<?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>75756</bug_id>
          
          <creation_ts>2012-01-06 16:09:02 -0800</creation_ts>
          <short_desc>Implement navigator.startActivity; add IntentsController for managing web intents callbacks.</short_desc>
          <delta_ts>2012-01-09 18:29:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          <dependson>73051</dependson>
          <blocked>75123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Greg Billock">gbillock</reporter>
          <assigned_to name="Greg Billock">gbillock</assigned_to>
          <cc>abarth</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>531480</commentid>
    <comment_count>0</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 16:09:02 -0800</bug_when>
    <thetext>Implement navigator.startActivity; add IntentsController for managing web intents callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531482</commentid>
    <comment_count>1</comment_count>
      <attachid>121515</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 16:10:01 -0800</bug_when>
    <thetext>Created attachment 121515
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531485</commentid>
    <comment_count>2</comment_count>
      <attachid>121515</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:11:42 -0800</bug_when>
    <thetext>Comment on attachment 121515
Patch

This patch seems to have a bunch of stuff from your earlier CL in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531487</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:15:00 -0800</bug_when>
    <thetext>Some high-level comments:

You should be using the [Supplemental] attribute to keep as much WebIntent-specific code in Modules/intents as possible.  You shouldn&apos;t be modifying Navigator.idl or any of the other &quot;core&quot; IDL files in these patches.  The [Supplemental] mechanism is somewhat new, but you can see how Gamepad uses it for inspiration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531492</commentid>
    <comment_count>4</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 16:17:37 -0800</bug_when>
    <thetext>This is the follow-up to 73051 containing mostly the callback, startActivity, and IntentsController. There is still some noise from 73051 that I will merge out as that lands.

I&apos;ve moved the IntentsController to be owned by the ScriptExecutionContext. After looking at the deserializer code, I think it is copying all the data out of the SerializedScriptValue input, so I&apos;ve also changed the callback to just take a pointer, which required a change to the CodeGeneratorV8. Take a look and see if you think it looks like something we want (if so, it should probably get split off again to get the right tests along with it).

I was looking at the Supplemental examples to try and put the navigator change in a supplemental IDL file. The examples show a supplemental constructor and supplemental fields, but not supplemental methods. Does it support that? If not, that&apos;s a candidate for another side patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531495</commentid>
    <comment_count>5</comment_count>
      <attachid>121515</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:19:04 -0800</bug_when>
    <thetext>Comment on attachment 121515
Patch

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

&gt; Source/WebCore/Modules/intents/IntentsController.cpp:57
&gt; +int IntentsController::assignIntentId(PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback)

Why

&gt; Source/WebCore/page/Navigator.cpp:328
&gt; +void Navigator::startActivity(ScriptExecutionContext* context,
&gt; +                              Intent* intent, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp; ec)

This code should all be inside Module/intents.  Also, I don&apos;t see any tests fo this API in this patch.

&gt; Source/WebCore/page/Navigator.cpp:348
&gt; +    int id = context-&gt;intentsController()-&gt;assignIntentId(successCallback, errorCallback);
&gt; +    intent-&gt;setIdentifier(id);
&gt; +    activeFrame-&gt;loader()-&gt;client()-&gt;dispatchIntent(*intent);

I don&apos;t understand why we have this complicated ID mechanism.  Can we call startActivity more than once per Intent?  It looks like we can only have one ID per intent.  Maybe we should store the callbacks on the intent object itself instead of using using a hashmap for indirection.  Is there something the hashmap buys us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531496</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:20:15 -0800</bug_when>
    <thetext>&gt; This is the follow-up to 73051 containing mostly the callback, startActivity, and IntentsController. There is still some noise from 73051 that I will merge out as that lands.

Please post the patch without the code from the other patch.  It&apos;s too hard to review with all this extra stuff in it.

&gt; I was looking at the Supplemental examples to try and put the navigator change in a supplemental IDL file. The examples show a supplemental constructor and supplemental fields, but not supplemental methods. Does it support that? If not, that&apos;s a candidate for another side patch.

It does.  Look at Gamepad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531507</commentid>
    <comment_count>7</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 16:37:02 -0800</bug_when>
    <thetext>Replies:

[gamepad, supplemental IDL] Got it. I guess it has propagated to the web FEs, but I see how NavigatorGamepad.idl is doing this and will copy.

[tests] There&apos;s a very simple existence and invocation test. I&apos;m going to add more.

[crap from earlier change] Yes. I was hoping to get exactly these kinds of high-level comments earlier. :-) Please don&apos;t review in depth until I get them stripped out, though. (Should be soon.)


[ID mechanism in IntentsController] I don&apos;t think startActivity should be called more than once per intent (although there is nothing to forbid it at present). But it could be called more than once per client document. That is, there can be situations (at least right now) when there are multiple startActivity async calls in flight at once.

I&apos;m not totally convinced that&apos;s how it should remain, and if it doesn&apos;t, then all we need is just a spot to write down the callbacks and the controller is very simple (and could even be collapsed with another object). At the present time, the spec doesn&apos;t disallow that kind of use, and we want to do more experimentation with it like this before being persuaded it ought to be forbidden.

(There are use cases in discussion that want to use web intents as a control invocation mechanism on discovered objects, i.e. home stereo equipment. It isn&apos;t clear yet how this will shake out, but being able to experiment with the code allowing that pattern will be useful.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531511</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:41:14 -0800</bug_when>
    <thetext>I&apos;d recommend creating an IntentActivity object to hold the Intent and the callbacks.  We&apos;d the pass ownership of that object to the Client and when the Client wants to call one of the callbacks, it hands the object back to us.  That avoids the need for a long-lived controller object and the need for this ID scheme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531514</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:42:17 -0800</bug_when>
    <thetext>The IntentActivity object should probably be an ActiveDOMObject so it can get notifications about the ScriptExecutionContext stopping and getting destroyed.  That will prevent problems where the callbacks are called after the ScriptExecutionContext is inactive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531519</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:46:43 -0800</bug_when>
    <thetext>Maybe ActivityRequest ?  I get the sense that this object isn&apos;t quite the activity itself (i.e., that we&apos;re starting), but a request to start an activity.  You probably have a better sense for what the names ought to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531525</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:54:37 -0800</bug_when>
    <thetext>I landed the first patch for you in case that makes it easier to prepare this patch without the &quot;crap&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532266</commentid>
    <comment_count>12</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 10:14:46 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I&apos;d recommend creating an IntentActivity object to hold the Intent and the callbacks.  We&apos;d the pass ownership of that object to the Client and when the Client wants to call one of the callbacks, it hands the object back to us.  That avoids the need for a long-lived controller object and the need for this ID scheme.

It pushes the up the requirement for this kind of memory, yes. My motivation for putting it at this level was to make it less work for client code to implement intent handling, following the examples of other features like geolocation. Do you think the state here is minimal enough that it&apos;s not a big burden? (Clients will have to track these IDS, so they may as well track the IntentActivity/IntentRequest object.)

The biggest such burden, I think, is making sure the proper notification gets to the right callback and no other. Using IntentActivity/IntentRequest would help with that, but will it require a more complex interaction to make sure the right ScriptExecutionContext is still active? Or will we end up needing a layer of notifications so that the IntentActivity will know that it went away? My thinking so far is that the dispatch mechanism for Web Intents will require ID tracking at some point anyway, so it ought to be baked in early to minimize error-proneness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532268</commentid>
    <comment_count>13</comment_count>
      <attachid>121680</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 10:16:38 -0800</bug_when>
    <thetext>Created attachment 121680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532270</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 10:19:15 -0800</bug_when>
    <thetext>The request objects should just be subclasses of ActiveDOMObject, so they&apos;ll get all the right notifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532275</commentid>
    <comment_count>15</comment_count>
      <attachid>121680</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 10:25:05 -0800</bug_when>
    <thetext>Comment on attachment 121680
Patch

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

This generally looks fine, but you haven&apos;t addressed my comments from before.

&gt; Source/WebCore/page/Navigator.cpp:310
&gt; +#if ENABLE(WEB_INTENTS)
&gt; +void Navigator::startActivity(ScriptExecutionContext* context,
&gt; +                              Intent* intent, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp; ec)

This should be done with [Supplemental] so we don&apos;t need to dump more unrelated code into Navigator.cpp.

&gt; Source/WebCore/page/Navigator.cpp:312
&gt; +    Frame* activeFrame = static_cast&lt;Document*&gt;(context)-&gt;frame();

We should probably use the frame from Navigator rather than from the currently executing script.  That&apos;s the normal thing when you call a method of an object.

&gt; Source/WebCore/page/Navigator.cpp:326
&gt; +    if (!activeFrame || !intent) {
&gt; +        ec = INVALID_STATE_ERR;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    if (intent-&gt;action().isEmpty() || intent-&gt;type().isEmpty()) {
&gt; +        ec = VALIDATION_ERR;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    if (!ScriptController::processingUserGesture()) {
&gt; +        ec = INVALID_ACCESS_ERR;
&gt; +        return;
&gt; +    }

Is the order of these error checks spelled out in the spec?  Because you&apos;re throwing different exceptions, the order is detectable.

&gt; Source/WebCore/page/Navigator.idl:66
&gt; +        [CallWith=ScriptExecutionContext] void startActivity(in Intent intent,

We don&apos;t need CallWith=ScriptExecutionContext.  Navigator is already associated with a frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532407</commentid>
    <comment_count>16</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 12:13:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; The request objects should just be subclasses of ActiveDOMObject, so they&apos;ll get all the right notifications.

That&apos;s cool! I hadn&apos;t seen those. I&apos;ll just build the controller in at the client layer and assign IDs there.

The Supplemental stuff also came out nice. I&apos;ll upload a new patch when I convert to these ActiveDOMObject things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532555</commentid>
    <comment_count>17</comment_count>
      <attachid>121729</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 15:13:21 -0800</bug_when>
    <thetext>Created attachment 121729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532561</commentid>
    <comment_count>18</comment_count>
      <attachid>121729</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 15:26:27 -0800</bug_when>
    <thetext>Comment on attachment 121729
Patch

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

This is starting to look good.  There&apos;s just a couple memory management issues to polish up.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Implement navigator.startActivity; add IntentsController for managing web intents callbacks.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=75756
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Test: webintents/web-intents-api.html

It would be nice to have more information in the ChangeLog.  Folks like to read these to understand what&apos;s happening in the project.

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:63
&gt; +    ContextDestructionObserver::contextDestroyed();
&gt; +    m_successCallback.clear();
&gt; +    m_errorCallback.clear();

Rather than overriding these, you should just check whether scriptExecutionContext() is null when the callbacks are called.

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:85
&gt; +    unsetPendingActivity(this);

Depending on the ownership model for IntentRequest, you might want to store a RefPtr to |this| on the stack so that we know that the last reference to this object doesn&apos;t get destroyed by the JavaScript that runs during handleEvent.

&gt; Source/WebCore/Modules/intents/IntentRequest.h:53
&gt; +    virtual void contextDestroyed();

Please add the OVERRIDE keyword.

&gt; Source/WebCore/Modules/intents/IntentRequest.h:55
&gt; +    // TODO(gbillock@google.com): support suspend/resume

I&apos;d just remove this comment.  (If we were to keep it, we&apos;d need it to be &quot;FIXME:&quot; rather than &quot;TODO(gbillock@google.com)&quot; )

&gt; Source/WebCore/Modules/intents/IntentRequest.h:60
&gt; +    Intent* m_intent;

Doesn&apos;t this need to be a RefPtr?  What&apos;s keeping the Intent alive?

&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:33
&gt; +#include &lt;wtf/RefCounted.h&gt;
&gt; +#include &lt;wtf/RefPtr.h&gt;

These should be inside the #if

&gt; Source/WebCore/Modules/intents/NavigatorIntents.h:44
&gt; +    static void startActivity(Navigator*,
&gt; +                              Intent*, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp;);

One line pls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532639</commentid>
    <comment_count>19</comment_count>
      <attachid>121729</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 16:34:27 -0800</bug_when>
    <thetext>Comment on attachment 121729
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Test: webintents/web-intents-api.html
&gt; 
&gt; It would be nice to have more information in the ChangeLog.  Folks like to read these to understand what&apos;s happening in the project.

Added more description about what&apos;s going on in the change.

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:63
&gt;&gt; +    m_errorCallback.clear();
&gt; 
&gt; Rather than overriding these, you should just check whether scriptExecutionContext() is null when the callbacks are called.

Since only one method is allowed to be called, I was using the callback cleared state to do this so I can release references as early as possible. Since the callbacks are optional and can be null, this ended up all working out nicely in the postResult/Failure code, so I piggybacked on that here. Do I need to check scriptExecutionContext() though? That is, is the threading nature here such that I need to lock around getting contextDestroyed() and postResult/Failure?

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:85
&gt;&gt; +    unsetPendingActivity(this);
&gt; 
&gt; Depending on the ownership model for IntentRequest, you might want to store a RefPtr to |this| on the stack so that we know that the last reference to this object doesn&apos;t get destroyed by the JavaScript that runs during handleEvent.

The model I have in mind is to pass ownership up to client code (see the FrameLoaderClient change below). Then the client code can throw away the object if it gets information that it isn&apos;t needed, which will then remove held refs. Should I hold a RefPtr to Intent as well, based on that premise? Or is it OK to let that be a weak pointer?

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.h:53
&gt;&gt; +    virtual void contextDestroyed();
&gt; 
&gt; Please add the OVERRIDE keyword.

Done

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.h:55
&gt;&gt; +    // TODO(gbillock@google.com): support suspend/resume
&gt; 
&gt; I&apos;d just remove this comment.  (If we were to keep it, we&apos;d need it to be &quot;FIXME:&quot; rather than &quot;TODO(gbillock@google.com)&quot; )

Done.

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.h:60
&gt;&gt; +    Intent* m_intent;
&gt; 
&gt; Doesn&apos;t this need to be a RefPtr?  What&apos;s keeping the Intent alive?

Yeah. This means the Intent is only alive during original dispatch (the call stack within the original startActivity call), which might violate the principle of least surprise... The code currently doesn&apos;t use it outside that scope, and it might be a heavy object, but still, Keeping a RefPtr so we can purposefully kill it if wanted sounds better.

&gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:33
&gt;&gt; +#include &lt;wtf/RefPtr.h&gt;
&gt; 
&gt; These should be inside the #if

Done.

&gt;&gt; Source/WebCore/Modules/intents/NavigatorIntents.h:44
&gt;&gt; +                              Intent*, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp;);
&gt; 
&gt; One line pls.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532641</commentid>
    <comment_count>20</comment_count>
      <attachid>121757</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 16:36:00 -0800</bug_when>
    <thetext>Created attachment 121757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532666</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:01:04 -0800</bug_when>
    <thetext>&gt; That is, is the threading nature here such that I need to lock around getting contextDestroyed() and postResult/Failure?

There is only one thread.  No locking needed.

&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:85
&gt; &gt;&gt; +    unsetPendingActivity(this);
&gt; &gt; 
&gt; &gt; Depending on the ownership model for IntentRequest, you might want to store a RefPtr to |this| on the stack so that we know that the last reference to this object doesn&apos;t get destroyed by the JavaScript that runs during handleEvent.
&gt; 
&gt; The model I have in mind is to pass ownership up to client code (see the FrameLoaderClient change below). Then the client code can throw away the object if it gets information that it isn&apos;t needed, which will then remove held refs. Should I hold a RefPtr to Intent as well, based on that premise? Or is it OK to let that be a weak pointer?

There&apos;s no guarantee the client will keep this object alive after the JavaScript runs.  For example, suppose the client drops its reference to this object when the Frame is destroyed.  It&apos;s quite possible that the JavaScript we execute synchronously here will be able to destroy the Frame.

&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentRequest.h:60
&gt; &gt;&gt; +    Intent* m_intent;
&gt; &gt; 
&gt; &gt; Doesn&apos;t this need to be a RefPtr?  What&apos;s keeping the Intent alive?
&gt; 
&gt; Yeah. This means the Intent is only alive during original dispatch (the call stack within the original startActivity call), which might violate the principle of least surprise... The code currently doesn&apos;t use it outside that scope, and it might be a heavy object, but still, Keeping a RefPtr so we can purposefully kill it if wanted sounds better.

If we want to drop the pointer to the Intent, we can zero out the reference.  That&apos;s better than having a dangling pointer temping folks to write security bugs.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532674</commentid>
    <comment_count>22</comment_count>
      <attachid>121757</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:06:44 -0800</bug_when>
    <thetext>Comment on attachment 121757
Patch

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

Two minor issues below.

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:59
&gt; +void IntentRequest::contextDestroyed()

Sorry, I don&apos;t think that contextDestroyed is quite the right thing.  I think you want to override stop().  contextDestroyed is when the context is finally deallocated (e.g., it&apos;s called in the destructor).  This stuff is kind of obscure.  I should write some documentation explaining the lifecycle of these objects.

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:70
&gt; +

Please add the following line here:

RefPtr&lt;Intent&gt; protector(this);

We don&apos;t control the lifetime of |this|, so we have to assume that handleEvent, which can do arbitrary things, can remove all existing references to us.  That means we need to take a reference to ourselves because we assume that |this| is still alive after handleEvent returns.

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:82
&gt; +

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532694</commentid>
    <comment_count>23</comment_count>
      <attachid>121764</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:19:30 -0800</bug_when>
    <thetext>Created attachment 121764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532701</commentid>
    <comment_count>24</comment_count>
      <attachid>121757</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:23:43 -0800</bug_when>
    <thetext>Comment on attachment 121757
Patch

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

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:59
&gt;&gt; +void IntentRequest::contextDestroyed()
&gt; 
&gt; Sorry, I don&apos;t think that contextDestroyed is quite the right thing.  I think you want to override stop().  contextDestroyed is when the context is finally deallocated (e.g., it&apos;s called in the destructor).  This stuff is kind of obscure.  I should write some documentation explaining the lifecycle of these objects.

Are you sure? The ActiveDomObject impl looks like contextDestroyed is what&apos;s hooked to the notification system. I&apos;ll just hook stop() up to the same code, though, right?

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:70
&gt;&gt; +
&gt; 
&gt; Please add the following line here:
&gt; 
&gt; RefPtr&lt;Intent&gt; protector(this);
&gt; 
&gt; We don&apos;t control the lifetime of |this|, so we have to assume that handleEvent, which can do arbitrary things, can remove all existing references to us.  That means we need to take a reference to ourselves because we assume that |this| is still alive after handleEvent returns.

Yeah, I was busy finding that idiom as you were typing this I guess. (Looked like some protect, some protector).

&gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:82
&gt;&gt; +
&gt; 
&gt; ditto

Yep. Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532705</commentid>
    <comment_count>25</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:26:16 -0800</bug_when>
    <thetext>One more thing on this. It includes a change to the codegen for the SerializedScriptValue treatment in handleEvent. Shall I pull that out to a separate patch? It&apos;ll need some separate tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532708</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:29:11 -0800</bug_when>
    <thetext>&gt; One more thing on this. It includes a change to the codegen for the SerializedScriptValue treatment in handleEvent. Shall I pull that out to a separate patch? It&apos;ll need some separate tests.

I think that&apos;s fine.  It won&apos;t compile otherwise, so it&apos;s not in that much risk of regressing.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532714</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:31:17 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 121757 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121757&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:59
&gt; &gt;&gt; +void IntentRequest::contextDestroyed()
&gt; &gt; 
&gt; &gt; Sorry, I don&apos;t think that contextDestroyed is quite the right thing.  I think you want to override stop().  contextDestroyed is when the context is finally deallocated (e.g., it&apos;s called in the destructor).  This stuff is kind of obscure.  I should write some documentation explaining the lifecycle of these objects.
&gt; 
&gt; Are you sure? The ActiveDomObject impl looks like contextDestroyed is what&apos;s hooked to the notification system. I&apos;ll just hook stop() up to the same code, though, right?

Pretty sure: http://trac.webkit.org/browser/trunk/Source/WebCore/dom/ScriptExecutionContext.cpp#L243

We can look at the callers of that function to double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532716</commentid>
    <comment_count>28</comment_count>
      <attachid>121770</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:33:09 -0800</bug_when>
    <thetext>Created attachment 121770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532719</commentid>
    <comment_count>29</comment_count>
      <attachid>121770</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:35:54 -0800</bug_when>
    <thetext>Comment on attachment 121770
Patch

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

&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:68
&gt; +    contextDestroyed();

This seems like crossing the streams, no?  I would just remove the contextDestroyed override and clear the callbacks here.  stop() will always be called before contextDestroyed() so there isn&apos;t a risk of them living too long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532726</commentid>
    <comment_count>30</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:45:10 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 121757 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121757&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/Modules/intents/IntentRequest.cpp:59
&gt; &gt; &gt;&gt; +void IntentRequest::contextDestroyed()
&gt; &gt; &gt; 
&gt; &gt; &gt; Sorry, I don&apos;t think that contextDestroyed is quite the right thing.  I think you want to override stop().  contextDestroyed is when the context is finally deallocated (e.g., it&apos;s called in the destructor).  This stuff is kind of obscure.  I should write some documentation explaining the lifecycle of these objects.
&gt; &gt; 
&gt; &gt; Are you sure? The ActiveDomObject impl looks like contextDestroyed is what&apos;s hooked to the notification system. I&apos;ll just hook stop() up to the same code, though, right?
&gt; 
&gt; Pretty sure: http://trac.webkit.org/browser/trunk/Source/WebCore/dom/ScriptExecutionContext.cpp#L243
&gt; 
&gt; We can look at the callers of that function to double check.

That looks pretty compelling. On the other hand, there are classes that purely implement the ContextDestructionObserver directly. See Source/WebCore/html/DOMURL.h for instance. I&apos;ve hooked them up to the same code currently, which is fine internally for this object. It&apos;s a bit slapdash, though; if one evolves to call the other, we&apos;re screwed. :-) I connected stop() as having to do with the suspend/resume thing (presumably as a way to kill any suspend()ed actions), and that the destruction notification is what we really want to respond to to abort callback delivery. I&apos;m guessing from looking at callers that that&apos;s incorrect. What I don&apos;t know is whether those callers have complete coverage. Is there any way for ~ScriptExecutionContext() to occur without stopActiveDOMObjects()? If so, or if this may occur in the future, we ought to have both impls (although cross invoking them is untidy...).

(Also, codegen tests and layout tests pass here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532728</commentid>
    <comment_count>31</comment_count>
      <attachid>121773</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-09 17:48:32 -0800</bug_when>
    <thetext>Created attachment 121773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532729</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-09 17:49:31 -0800</bug_when>
    <thetext>I think stop is always called at least once before the context is destroyed.  The DOMURL case is different because it just wants to free resources, rather than execute script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532754</commentid>
    <comment_count>33</comment_count>
      <attachid>121773</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 18:29:52 -0800</bug_when>
    <thetext>Comment on attachment 121773
Patch

Clearing flags on attachment: 121773

Committed r104531: &lt;http://trac.webkit.org/changeset/104531&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532755</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 18:29:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121515</attachid>
            <date>2012-01-06 16:10:01 -0800</date>
            <delta_ts>2012-01-09 10:16:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120106161000.patch</filename>
            <type>text/plain</type>
            <size>39800</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uNTQ2Y2E5M2QwZTMyM2M3OGFlYTBmY2Y0NjJiM2E4
Njk3YTZkM2FlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudHNDb250cm9sbGVyIGZvciBtYW5hZ2luZyB3
ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NTc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZW50OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6aWRl
bnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldElkZW50aWZpZXIpOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9J
bnRlbnRSZXN1bHRDYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudFJl
c3VsdENhbGxiYWNrOjp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
aW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgorICAgICAgICAqIE1vZHVs
ZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50c0NvbnRyb2xsZXI6OkludGVudHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVudHNDb250cm9sbGVyOjp+SW50ZW50c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjppbnRl
bnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6YXNzaWduSW50ZW50
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAg
ICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoR2V0
TmF0aXZlVHlwZUZvckNhbGxiYWNrcyk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmludGVudHND
b250cm9sbGVyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaEludGVudCk6CisgICAgICAg
ICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0eSk6CisgICAgICAgICogcGFn
ZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5pZGw6CisKIDIwMTItMDEt
MDUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKHIxMDQwNjApOiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1ldHJpY3MuaHRtbCBpcyBmYWlsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM1OGFhMGM3ZDViMmJlMDNlYmVhNmY3OWMx
NGU5NDUzYjczMDdiNTEuLmEwOGE0N2IzODEwMDA5YmM3NzgzNTcyNjA2MWNjYTgzODJiNzRhNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDEtMDYg
IEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5OyBhZGQgSW50ZW50c0NvbnRyb2xsZXIgZm9yIG1hbmFn
aW5nIHdlYiBpbnRlbnRzIGNhbGxiYWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorCiAyMDEyLTAxLTA1ICBKb2NoZW4g
RWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoZWNrIHdoZXRoZXIg
YSBXZWJWaWV3IGV4aXN0cyBiZWZvcmUgYWNjZXNzaW5nIGl0IGluIFN0b3JhZ2VBcmVhUHJveHku
IFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBjYXNlLCBlLmcuIGZvciBkZXRhY2hlZCBpZnJh
bWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYzhlMWUyZDljMjYyOTljNTg1NGMzNjQ1MjhjMWIxODRlMjE2ODEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKQEAgLTAsMCAr
MSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09H
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKworI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0
cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICh0eXBlLmlz
RW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0
YSkpOworfQorCitJbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKKyAgICA6
IG1fYWN0aW9uKGFjdGlvbikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9pZGVudGlmaWVy
KDApCit7CisgICAgc2V0RGF0YShkYXRhLmdldCgpKTsKK30KKworY29uc3QgU3RyaW5nJiBJbnRl
bnQ6OmFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0aW9uOworfQorCitjb25zdCBT
dHJpbmcmIEludGVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKwor
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGEuZ2V0KCk7Cit9CisKK3ZvaWQgSW50ZW50OjpzZXREYXRhKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgbV9kYXRhID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhLT50b1dpcmVTdHJpbmcoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1
ZSgpOworfQorCitpbnQgSW50ZW50OjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pZGVudGlmaWVyOworfQorCit2b2lkIEludGVudDo6c2V0SWRlbnRpZmllcihpbnQgaWQpCit7
CisgICAgbV9pZGVudGlmaWVyID0gaWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2ExZjU4ZDFiMGQxN2UyY2IyNzVjMmM3OWMzYjg3Nzcw
YTAwNDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudF9oCisjZGVmaW5lIEludGVudF9o
CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwor
Cit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJbnRlbnQgOiBwdWJsaWMgUmVm
Q291bnRlZDxJbnRlbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAg
Y29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBj
b25zdDsKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKKworICAgIGlu
dCBpZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7CisKK3By
aXZhdGU6CisgICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5
cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKKworICAgIHZvaWQg
c2V0RGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKKworICAgIFN0cmluZyBtX2FjdGlvbjsK
KyAgICBTdHJpbmcgbV90eXBlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1f
ZGF0YTsKKyAgICBpbnQgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9JbnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhZTdmMTZjMTUwNWMyNGIyMTIwM2M0NWM5
ODJhM2MxODFjYzY2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ludGVudHMvSW50ZW50LmlkbApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRv
dyB7CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAg
IENvbnN0cnVjdG9yUGFyYW1ldGVycz0zLAorICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5n
IGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25hbD1DYWxsV2l0aE51bGxWYWx1
ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEpLAorICAgICAgQ29uc3RydWN0b3JSYWlzZXNF
eGNlcHRpb24KKyAgXSBJbnRlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0luaXRp
YWxpemVkQnlDb25zdHJ1Y3Rvcl0gRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JdIERPTVN0cmluZyB0eXBlOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlIGRhdGE7CisgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhN2Q1
ZDdjZWEwYzhkYzVhMzBlNWI2ZTUzYjJlOTQyMDM1MjU4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApAQCAt
MCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBJbnRlbnRSZXN1bHRDYWxsYmFja19oCisjZGVmaW5lIEludGVudFJl
c3VsdENhbGxiYWNrX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50UmVz
dWx0Q2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfkludGVudFJlc3VsdENhbGxiYWNrKCkgeyB9CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUV2ZW50KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0KSA9IDA7
Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50UmVzdWx0Q2FsbGJhY2tfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENh
bGxiYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRD
YWxsYmFjay5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmViNGEzY2M2YTU5MGYzOTM2ZGU1OTVjNTExYTRlZTcw
MWE1NTdmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMs
CisgICAgICBDYWxsYmFjaz1GdW5jdGlvbk9ubHkKKyAgXSBJbnRlbnRSZXN1bHRDYWxsYmFjayB7
CisgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSByZXN1
bHQpOworICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudHNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnRzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQyNjI1ZjZhNWQzNmVjZmIzYWRmNzc4
NDMwZWFhYzgzZTE3OGM4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnRzQ29udHJvbGxlci5oIgorCisj
aWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiSW50ZW50UmVzdWx0Q2FsbGJhY2su
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitJbnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRyb2xsZXIoKQoreworfQorCitJ
bnRlbnRzQ29udHJvbGxlcjo6fkludGVudHNDb250cm9sbGVyKCkKK3sKK30KKworUGFzc093blB0
cjxJbnRlbnRzQ29udHJvbGxlcj4gSW50ZW50c0NvbnRyb2xsZXI6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnRlbnRzQ29udHJvbGxlcik7Cit9CisKK3N0YXRpYyBpbnQg
aW50ZW50SWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIGlu
dCBsYXN0VXNlZEludGVudElkID0gMDsKKyAgICArK2xhc3RVc2VkSW50ZW50SWQ7CisgICAgcmV0
dXJuIGxhc3RVc2VkSW50ZW50SWQ7Cit9CisKK2ludCBJbnRlbnRzQ29udHJvbGxlcjo6YXNzaWdu
SW50ZW50SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAg
IGludCBpZCA9IGludGVudElkKCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tzLnNldChpZCwgc3Vj
Y2Vzc0NhbGxiYWNrKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tzLnNldChpZCwgZXJyb3JDYWxsYmFj
ayk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIEludGVudHNDb250cm9sbGVyOjpwb3N0UmVz
dWx0KGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKQoreworICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZShkYXRhKTsKKyAgICBSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrcy50YWtlKGludGVudElkKTsKKyAgICBtX2Vycm9y
Q2FsbGJhY2tzLnJlbW92ZShpbnRlbnRJZCk7CisKKyAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrLmdl
dCgpKQorICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHZhbHVlLmdldCgpKTsK
K30KKwordm9pZCBJbnRlbnRzQ29udHJvbGxlcjo6cG9zdEZhaWx1cmUoY29uc3QgU3RyaW5nJiBk
YXRhLCBpbnQgaW50ZW50SWQpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGRhdGEpOworICAg
IFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IG1fZXJyb3JDYWxs
YmFja3MudGFrZShpbnRlbnRJZCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tzLnJlbW92ZShpbnRl
bnRJZCk7CisKKyAgICBpZiAoZXJyb3JDYWxsYmFjay5nZXQoKSkKKyAgICAgICAgZXJyb3JDYWxs
YmFjay0+aGFuZGxlRXZlbnQodmFsdWUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNWVk
M2RmNDE5ZDk0NTA0Nzk0NzczMGRlODE4NmZhNjAwNTM4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRzQ29udHJvbGxlcl9oCisjZGVmaW5lIElu
dGVudHNDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2s7CisKK2NsYXNzIEludGVudHND
b250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnRlbnRzQ29udHJvbGxlcik7
CitwdWJsaWM6CisgICAgfkludGVudHNDb250cm9sbGVyKCk7CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxJbnRlbnRzQ29udHJvbGxlcj4gY3JlYXRlKCk7CisKKyAgICBpbnQgYXNzaWduSW50ZW50
SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKworICAgIHZvaWQg
cG9zdFJlc3VsdChjb25zdCBTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7CisgICAgdm9pZCBw
b3N0RmFpbHVyZShjb25zdCBTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7CisKK3ByaXZhdGU6
CisgICAgSW50ZW50c0NvbnRyb2xsZXIoKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBDYWxsYmFja01hcDsKKyAgICBDYWxsYmFja01h
cCBtX3N1Y2Nlc3NDYWxsYmFja3M7CisgICAgQ2FsbGJhY2tNYXAgbV9lcnJvckNhbGxiYWNrczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5U
RU5UUykKKworI2VuZGlmIC8vIEludGVudHNDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYTI0YjQ0OGY0YjFiMTY2ODgyOTliM2MyM2EzMzBhZWI4
NjgyMjQ1YS4uNWQyYjk1Yzc4MzFmMDgxZTYwNDUzNjM1YTk3MTc5ZmQ4ODEyYjhhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTUxLDYgKzUxLDcgQEAKICAgICAg
ICcuLi8nLAogICAgICAgJy4uLy4uJywKICAgICAgICcuLi9Nb2R1bGVzL2dhbWVwYWQnLAorICAg
ICAgJy4uL01vZHVsZXMvaW50ZW50cycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScsCiAgICAg
ICAnLi4vYWNjZXNzaWJpbGl0eS9jaHJvbWl1bScsCiAgICAgICAnLi4vYmluZGluZ3MnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGYzNTU4NjhkNTg5OWZhZjg1Y2U3NTk2MGIyNWVmZDdlYWJkY2M3OGIu
LjhlMjY1NjI3M2E4MjdmY2NmZWFiMzIyMjRiNGY1ZTRmYTcyY2FmYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTExNDksNiArMTE0OSw4IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaWRs
JywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAgICAgICAgICAgICdN
b2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKICAgICAgICAgICAgICdj
c3MvQ1NTQ2hhcnNldFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxl
LmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTUsNiAr
MTY5NywxMSBAQAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5oJywK
ICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
dGVudHMvSW50ZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1
bHRDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRy
b2xsZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwJywKICAg
ICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5k
ZXggYTU2NjdhZGQyOGVmYTZmMjQyM2UyNTY5Yzc1Njc2YjYyMDNmNjdkYi4uM2E1NGEzODBjZDg3
NzY5MGEzMTEyZDdhY2QyNWNlNjc3MmZiYzdjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM0MjksNiArMzQyOSw3IEBA
IHN1YiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsK
ICAgICByZXR1cm4gImNvbnN0IFN0cmluZyYiIGlmICR0eXBlIGVxICJET01TdHJpbmciOworICAg
IHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlKiIgaWYgJHR5cGUgZXEgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSI7CiAKICAgICAjIENhbGxiYWNrcyB1c2UgcmF3IHBvaW50ZXJzLCBzbyBwYXNz
IGlzUGFyYW1ldGVyID0gMQogICAgIHJldHVybiBHZXROYXRpdmVUeXBlKCR0eXBlLCAxKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCAzODU5
MmNmYjUyNDkyMGJmNmFjMzcxZTMxNzNhZDI1ZDI1OWM5NTJmLi5jMjlkNjE2Yzg4MzQ1ZDE5ZTJi
ZThjYmY1ZGQ3YmMzNzU5OTRlOGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRmlsZVRocmVhZC5o
IgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQu
aCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgpAQCAtOTYsNiArOTcsOSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgICwgbV9oYXNPcGVu
RGF0YWJhc2VzKGZhbHNlKQogI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICwg
bV9pbnRlbnRzQ29udHJvbGxlcihJbnRlbnRzQ29udHJvbGxlcjo6Y3JlYXRlKCkpCisjZW5kaWYK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5k
ZXggMjRhMTdmNTk5ZDc1MTJiMmI1MTI3NTRlYjcwYWZkZGQ1MmYzNzU4Zi4uN2Y1ODI3ZGUwY2I3
MjJjZjliOGVlNTFmNDZhMjc1NDdhMjBiMjM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC02Myw2ICs2MywxMCBAQCBjbGFzcyBEYXRhYmFzZVRo
cmVhZDsKIGNsYXNzIEZpbGVUaHJlYWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfSU5URU5U
UykKK2NsYXNzIEludGVudHNDb250cm9sbGVyOworI2VuZGlmCisKIGNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgOiBwdWJsaWMgU2VjdXJpdHlDb250ZXh0IHsKIHB1YmxpYzoKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0xNTcsNiArMTYxLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgRXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSgpIGNvbnN0ID0gMDsKIAorI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKyAgICBJbnRlbnRzQ29udHJvbGxlciogaW50ZW50c0NvbnRyb2xsZXIo
KSBjb25zdCB7IHJldHVybiBtX2ludGVudHNDb250cm9sbGVyLmdldCgpOyB9CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIGNsYXNzIEFkZENvbnNvbGVNZXNzYWdlVGFzayA6IHB1YmxpYyBUYXNr
IHsKICAgICBwdWJsaWM6CkBAIC0yMTMsNiArMjIxLDEwIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICBSZWZQdHI8RmlsZVRocmVhZD4gbV9m
aWxlVGhyZWFkOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgT3duUHRy
PEludGVudHNDb250cm9sbGVyPiBtX2ludGVudHNDb250cm9sbGVyOworI2VuZGlmCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCmluZGV4IDI4YWE2ZDY1ZTMzMWFlOTAwNWY5NzRjYWM0MjcyYjhlMGQ2YjMzOTQuLjk2
MDAyYTU3OTNjYjBhMDljNWE5YThiN2IxMjQ1OWIzOWUxZjdjYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC03OCw2ICs3OCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbmRpZgogICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogICAgIGNsYXNz
IEludFNpemU7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIGNsYXNzIEludGVudDsKKyNl
bmRpZgogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgTWVzc2FnZUV2ZW50OwogICAgIGNsYXNz
IE5hdmlnYXRpb25BY3Rpb247CkBAIC0zMjMsNiArMzI2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGVtYmVkZGVyIGludGVyY2VwdGVk
IHRoZSBwb3N0TWVzc2FnZSBjYWxsCiAgICAgICAgIHZpcnR1YWwgYm9vbCB3aWxsQ2hlY2tBbmRE
aXNwYXRjaE1lc3NhZ2VFdmVudChTZWN1cml0eU9yaWdpbiogLyp0YXJnZXQqLywgTWVzc2FnZUV2
ZW50KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoSW50ZW50KGNvbnN0IEludGVudCYgaW50ZW50
KSB7IH0KKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAppbmRleCAxOTY2OGUzZDU3MjVkNjg5OTU5ZTljOTRkNTYzNjFjNWQx
NzE0NjQ4Li44NDE0Zjc1ZjNkYmM4Yjk0MzdhMWE2OThmNWMyMWU0MTc3YjBlNjFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC02MDcsNiArNjA3LDggQEAgbW9kdWxlIHdpbmRvdyB7
CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBU
cmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tFdmVudDsKICNlbmRpZgogCisgICAgICAgIGF0dHJp
YnV0ZSBbQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFNdIEludGVudENvbnN0cnVjdG9yIEludGVudDsg
Ly8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorCiAgICAgICAgIGF0dHJpYnV0ZSBET01Q
bHVnaW5Db25zdHJ1Y3RvciBQbHVnaW47CiAgICAgICAgIGF0dHJpYnV0ZSBET01QbHVnaW5BcnJh
eUNvbnN0cnVjdG9yIFBsdWdpbkFycmF5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL05hdmlnYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKaW5k
ZXggNDkyNjYzMmVlMzYzNmY1YTU1NGYxNTMxNDBhMjU1MmVhNjJmN2M0YS4uMTNkYzAzNGM3Nzdj
OGRmNjQ1YTNjYjY1M2UyZGZlM2Y3ZTkwYTcxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNw
cApAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUg
IkludGVudC5oIgorI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxiYWNrLmgiCisjaW5jbHVkZSAi
SW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQb2ludGVyTG9jay5oIgogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgpAQCAtNDAsNiArNDMsNyBAQAogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtMzE5LDQgKzMyMywzMCBAQCBHYW1lcGFkTGlzdCogTmF2aWdh
dG9yOjpnYW1lcGFkcygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKK3Zv
aWQgTmF2aWdhdG9yOjpzdGFydEFjdGl2aXR5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQqIGludGVudCwgUGFzc1Jl
ZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPElu
dGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQp
LT5mcmFtZSgpOworICAgIGlmICghYWN0aXZlRnJhbWUgfHwgIWludGVudCkgeworICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGludGVudC0+YWN0aW9uKCkuaXNFbXB0eSgpIHx8IGludGVudC0+dHlwZSgpLmlzRW1wdHkoKSkg
eworICAgICAgICBlYyA9IFZBTElEQVRJT05fRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGludCBpZCA9IGNvbnRleHQtPmludGVudHNDb250cm9sbGVyKCktPmFzc2lnbkludGVu
dElkKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgaW50ZW50LT5zZXRJZGVu
dGlmaWVyKGlkKTsKKyAgICBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRj
aEludGVudCgqaW50ZW50KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuaAppbmRleCA4NGYzMGJkZTM5YzFkMDMwZjBjMDM2MzJlMDVjZDhm
NTNmMDhlMmRmLi4xYmY2NmMxYzhmNWRmYmY5NDZkY2Q1YWY1ODA5OWFhYjBiZjM2ZTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTMzLDEwICszMywxMyBAQCBjbGFzcyBET01QbHVnaW5B
cnJheTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgR2FtZXBhZExpc3Q7CiBjbGFzcyBHZW9sb2NhdGlv
bjsKK2NsYXNzIEludGVudDsKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrOwogY2xhc3MgUG9p
bnRlckxvY2s7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrOwogY2xhc3Mg
TmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrOwogY2xhc3MgUGx1Z2luRGF0YTsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKQEAgLTgwLDYgKzgzLDExIEBAIHB1YmxpYzoKICAgICBHYW1lcGFkTGlzdCogZ2FtZXBhZHMo
KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHZvaWQgc3RhcnRBY3Rp
dml0eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50
ZW50KiwgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBOYXZpZ2F0b3IoRnJhbWUqKTsKICAgICBG
cmFtZSogbV9mcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAppbmRleCA2ZmU0M2U2NjBh
ODUwNzMzMTQ4NTNmNTgxNjEzMTdhNmRiZmEyMzg1Li4wNjA5Yzc0MmFkNDRmOWZlMTJmM2NjNjY1
M2JhMTNlMTY1NDcxMDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRv
ci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCkBAIC02MSw2ICs2
MSwxMyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW0NhbGxiYWNrPUZ1bmN0aW9uT25seSwgT3B0
aW9uYWxdIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykKICAg
ICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVO
QUJMRV9XRUJfSU5URU5UUykgJiYgRU5BQkxFX1dFQl9JTlRFTlRTCisgICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50IGlu
dGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5LCBPcHRpb25hbF0gSW50ZW50UmVz
dWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9u
bHksIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCisgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCBlN2Q5ZmViYzQwOTdkNGIyZTFlMGUxMTU5
MDdlMTI3NDUwZTYxZDFhLi45ZDJlMDYwNDc1MjY2NmU3OTA1MjE5NjQ0YjBkN2U3ZjgwZWQ4MmFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xNTksNiArMTU5LDExIEBA
CiAgICAgICAgICAgJ0VOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSPTEnLAogICAgICAg
ICBdLAogICAgICAgfV0sCisgICAgICBbJ2VuYWJsZV93ZWJfaW50ZW50cz09MScsIHsKKyAgICAg
ICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKKyAgICAgICAgICAnRU5BQkxFX1dFQl9JTlRFTlRTPTEn
LAorICAgICAgICBdLAorICAgICAgfV0sCiAgICAgICBbJ09TPT0ibWFjIicsIHsKICAgICAgICAg
J2ZlYXR1cmVfZGVmaW5lcyc6IFsKICAgICAgICAgICAnRU5BQkxFX1JVQkJFUl9CQU5ESU5HPTEn
LApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDQxZGJlYzAyMDIxNmRjMDg1NWU3ZDRlMzcwMzljMjU1YjZkOGQ1ZDMuLmU2MWZk
YjdkMjBmMzU1M2I4YWEwNjI4NTg0YjJjNzIyZTIyNTdjZDkgMTAwNzU1Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxMi0wMS0wNiAgR3JlZyBCaWxsb2NrICA8Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHk7IGFkZCBJbnRlbnRzQ29udHJv
bGxlciBmb3IgbWFuYWdpbmcgd2ViIGludGVudHMgY2FsbGJhY2tzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3NTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZDoKKyAg
ICAgICAgKiB3ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWw6IEFkZGVkLgorCiAyMDEy
LTAxLTA2ICBFbGxpb3QgUG9nZXIgIDxlcG9nZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBtYWtl
IGNhbnZhcy1saW5lV2lkdGggdGVzdCBwYXNzIGV2ZW4gaWYgcGl4ZWwgdmFsdWVzIHZhcnkgYSB0
aW55IGJpdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCBhZjliZWI2YTBhMzAxOTFiNjFl
NGVlOTMxZDRlNjhjOWU2ZGYwNmVlLi43ZmUyNzYzM2JjYTJmZjI3NTZkZmM2YWJlYmE1NmZhYjMz
NzE0NDZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMTkyOCw2ICsxOTI4LDkgQEAg
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS8KICMgTWljcm9kYXRhIERPTSBBUEkgaXMg
bm90IHlldCBlbmFibGVkLgogZmFzdC9kb20vTWljcm9EYXRhCiAKKyMgV2ViIEludGVudHMgaXMg
bm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGlt
cGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4
IDQ2ODJhZmVmMzQyYjFlZmJmYzU0OGJjZDQ4MjIwZTU3OWI5MGUwNTkuLjIzMTMwNGQxNTEwNjBl
NGNiODI2MjliMGI1YWMzYWJmYWE2MTY4YzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBA
IC0xNDM1LDYgKzE0MzUsOSBAQCBmYXN0L2ZyYW1lcy9mbGF0dGVuaW5nL2lmcmFtZS1mbGF0dGVu
aW5nLWZpeGVkLXdpZHRoLWFuZC1oZWlnaHQtbm8tc2Nyb2xsaW5nLmh0bQogIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyNDgKIGVkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxpbmctdW5pZmllZC1lbXVsYXRpb24uaHRtbAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQg
ZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRl
ZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCAzYjk4MDNk
YTg3MGQxZjc5YmEzOTcwZjRjMzk1YmNhNjI2ZGMyNmNmLi5lZWZhZjQ4YjVhMzViNGViY2RiYzVl
Njg3OTU0OGE3MjNmMjc5NDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNDg4LDYg
KzQ4OCw5IEBAIGZhc3QvcmVwYWludC90YWJsZS1leHRyYS1ib3R0b20tZ3Jvdy5odG1sCiAjIERS
VCBkb2Vzbid0IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4p
CiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAor
IyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50
ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCmluZGV4IDcyYmYzMzM3MWNiNTk0YzQ5ODM1NmZmY2YyZDM2NDk5Y2ViYTQ5YmYu
LjY3NjExNmU5ZmM0Mzk2N2QzZTBlZjEwNjNkYmE1ZTgxZTRjMTJkNzkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZApAQCAtMjQ4NCw2ICsyNDg0LDkgQEAgY3NzMy9mbGV4Ym94L2xpbmUtd3JhcHBp
bmcuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0OTEK
IGh0dHAvdGVzdHMvbWlzYy9vbmxvYWQtcmVtb3ZlLWlmcmFtZS1jcmFzaC0yLmh0bWwKIAorIyBX
ZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIg
TG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQKaW5kZXggZWNiZTE5MWRjZmI1MThlZjg0Mjc1NGVkZmY1ZDg1ZGRhZmYxOTI0Yi4u
NzhhODQxMDk0MTY5MjcwMDI2YThmYmMxYjIwOTExYmNhNDcxM2JjZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKQEAgLTE0ODMsNiArMTQ4Myw5IEBAIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdo
ZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBEUlQgZG9lc24ndCBz
dXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVu
dHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMg
bm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fp
cm8vU2tpcHBlZAppbmRleCBlZTc3YTE3MTQ0YzI4OTJjYTQyNDJjYmJhNmQ1NDBmODE3ZDc2NTM3
Li40ODE2ZDExYTFjMjZlMTdmNzI5MWE4YmU1NzYzZDI2NzI0MTRlNzk2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwMjEsNiArMjAyMSw5IEBAIGZhc3QvZXZlbnRz
L3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBE
UlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4u
KQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAK
KyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2lu
dGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2FmYjQ3YzFhMjAyZTc1YzNlZmMwYWFmZWZhNTQzMmJlMjczMTE4YgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDMzIEBACitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IGlzIGRl
ZmluZWQuCitQQVNTIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1MgbmV3IElu
dGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyLgorUEFTUyBuZXcgSW50ZW50KCcnLCdiJywnYycpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IEludGVudCgnJywn
JywnYycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
Mi4KK1BBU1MgbmV3IEludGVudCgnYScsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgor
UEFTUyBpbnRlbnQxLnR5cGUgaXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyB1bmRlZmluZWQu
CitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIK
K1BBU1MgaW50ZW50Mi50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQQVNT
IGludGVudDMuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNTIGlu
dGVudDMuZGF0YS5jIGlzICJkIgorUEFTUyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50
ZW50NC50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0
cnVlCitQQVNTIGludGVudDQuZGF0YS5sZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0g
aXMgImMiCitQQVNTIGludGVudDQuZGF0YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlz
IDQKK1BBU1MgaW50ZW50Ni5kYXRhIGlzIDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQor
UEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVsbAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3Qg
T2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eShpbnRlbnQxKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFMSURfQUNDRVNTX0VSUjogRE9NIEV4Y2VwdGlvbiAx
NS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NjI0ZjNkYWVkOTRkYWNlZmY4YTdlNmZmNTExNGZkOTA5NzE5ZjNmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApAQCAtMCwwICsx
LDU3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorICAgICAgc2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0
eSIpOworICAgICAgCisgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBJbnRlbnQo
KSIsICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7CisgICAgICBzaG91bGRU
aHJvdygibmV3IEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRz
JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycsJycpIiwgIidFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcg
SW50ZW50KCcnLCdiJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MiciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCdjJykiLCAiJ0Vycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5l
dyBJbnRlbnQoJ2EnLCcnLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyJyIpOworCisgICAgICB2YXIgaW50ZW50MSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicpOworICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEudHlwZSIsICJiIik7CisgICAgICBzaG91bGRC
ZVVuZGVmaW5lZCgiaW50ZW50MS5kYXRhIik7CisgICAgICBpbnRlbnQxLmFjdGlvbiA9ICJhYmMi
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisK
KyAgICAgIHZhciBpbnRlbnQyID0gbmV3IEludGVudCgiYSIsICJiIiwgImMiKTsKKyAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50Mi5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdpbnRlbnQyLmRhdGEnLCAiYyIpOworCisgICAgICB2YXIgaW50ZW50MyA9IG5l
dyBJbnRlbnQoImEiLCAiYiIsIHsiYyI6ICJkIn0pOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdpbnRlbnQzLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDMudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVu
dDMuZGF0YS5jJywgImQiKTsKKworICAgICAgdmFyIGludGVudDQgPSBuZXcgSW50ZW50KCJhIiwg
ImIiLCBbImMiLCAiZCJdKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC5h
Y3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LnR5cGUn
LCAiYiIpOworICAgICAgc2hvdWxkQmVUcnVlKCdpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJh
eScpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50NC5kYXRhLmxlbmd0aCcsIDIpOwor
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMF0nLCAiYyIpOworICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMV0nLCAiZCIpOworCisgICAg
ICB2YXIgaW50ZW50NSA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIDQpOworICAgICAgc2hvdWxkRXZh
bHVhdGVUbygnaW50ZW50NS5kYXRhJywgNCk7CisgICAgICB2YXIgaW50ZW50NiA9IG5ldyBJbnRl
bnQoJ2EnLCAnYicsIDQuNSk7CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ2LmRhdGEn
LCA0LjUpOworICAgICAgdmFyIGludGVudDcgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB0cnVlKTsK
KyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50ZW50Ny5kYXRhJyk7CisgICAgICB2YXIgaW50ZW50OCA9
IG5ldyBJbnRlbnQoJ2EnLCAnYicsIG51bGwpOworICAgICAgc2hvdWxkQmVOdWxsKCdpbnRlbnQ4
LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdiJywge30pOwor
ICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworCisgICAgICBzaG91
bGRUaHJvdygnbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSknLCAiJ0Vycm9yOiBJTlZB
TElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUnIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121680</attachid>
            <date>2012-01-09 10:16:38 -0800</date>
            <delta_ts>2012-01-09 15:13:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109101637.patch</filename>
            <type>text/plain</type>
            <size>24329</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uZWY1Y2FiNjAyZTI2ZjI4ODE2MDE4MmYzM2E3ODA3
YmM3ODE0ODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudHNDb250cm9sbGVyIGZvciBtYW5hZ2luZyB3
ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NTc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6aWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldElk
ZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVudFJlc3VsdENhbGxiYWNrOjp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OkludGVudHNDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250cm9sbGVyOjp+SW50ZW50c0NvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjppbnRlbnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxl
cjo6YXNzaWduSW50ZW50SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6
OnBvc3RSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RG
YWlsdXJlKToKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaDog
QWRkZWQuCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAoR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcyk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgICogZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmludGVudHNDb250cm9sbGVyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaElu
dGVudCk6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TmF2aWdhdG9yOjpzdGFydEFjdGl2aXR5KToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgor
ICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmlkbDoKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEwNDQxOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAKaW5kZXggNjBhMzI0OGIwNzI3NmM4OTIxZWMzNTQyNGQ3YTdhMWVhYWYyOWM0Yy4uZTczZGY4
ZDg5NDE2N2Y3MWNkMzExYmY3NjMzMDgzZWMwM2NjZGExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbnRlbnRzL0ludGVudC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAgUGFzc1JlZlB0cjxJbnRl
bnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5
cGUsIFBhc3MKIEludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKQogICAgIDog
bV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2lkZW50aWZpZXIo
MCkKIHsKICAgICBpZiAoZGF0YSkKICAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhLT50b1dpcmVTdHJpbmcoKSk7CkBAIC03NSw2ICs3Niwx
NiBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZGF0YS5nZXQoKTsKIH0KIAoraW50IEludGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKK30KKwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZp
ZXIoaW50IGlkKQoreworICAgIG1faWRlbnRpZmllciA9IGlkOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50LmgKaW5kZXggOTZiZWJkNmU1NjdhYmYxNGYxMGMxMWY2MDcz
MzNkOTYzOWU2ZTZjOC4uMjMzN2FkNTZiNmEwYzMyZWRlYmQ4N2E4ODFmYmJkMjFmNjUzMzY5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApAQCAtNjAsNiArNjAsNyBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBtX2FjdGlvbjsKICAgICBTdHJpbmcgbV90eXBlOwogICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKKyAgICBpbnQgbV9pZGVudGlm
aWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YTdkNWQ3Y2VhMGM4ZGM1YTMwZTViNmU1M2IyZTk0MjAzNTI1OGU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50UmVzdWx0Q2FsbGJhY2tfaAorI2RlZmluZSBJbnRl
bnRSZXN1bHRDYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIEludGVu
dFJlc3VsdENhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50UmVzdWx0Q2FsbGJhY2s+
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnRlbnRSZXN1bHRDYWxsYmFjaygpIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlc3VsdCkg
PSAwOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudFJlc3VsdENhbGxiYWNr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1
bHRDYWxsYmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVz
dWx0Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlYjRhM2NjNmE1OTBmMzkzNmRlNTk1YzUxMWE0
ZWU3MDFhNTU3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgd2luZG93IHsKKyAgaW50ZXJmYWNlIFsKKyAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRF
TlRTLAorICAgICAgQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5CisgIF0gSW50ZW50UmVzdWx0Q2FsbGJh
Y2sgeworICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
cmVzdWx0KTsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50c0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMjYyNWY2YTVkMzZlY2ZiM2Fk
Zjc3ODQzMGVhYWM4M2UxNzhjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIK
KworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxi
YWNrLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW50ZW50c0NvbnRyb2xsZXI6OkludGVudHNDb250cm9sbGVyKCkKK3sKK30K
KworSW50ZW50c0NvbnRyb2xsZXI6On5JbnRlbnRzQ29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NP
d25QdHI8SW50ZW50c0NvbnRyb2xsZXI+IEludGVudHNDb250cm9sbGVyOjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW50ZW50c0NvbnRyb2xsZXIpOworfQorCitzdGF0aWMg
aW50IGludGVudElkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRp
YyBpbnQgbGFzdFVzZWRJbnRlbnRJZCA9IDA7CisgICAgKytsYXN0VXNlZEludGVudElkOworICAg
IHJldHVybiBsYXN0VXNlZEludGVudElkOworfQorCitpbnQgSW50ZW50c0NvbnRyb2xsZXI6OmFz
c2lnbkludGVudElkKFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sK
KyAgICBpbnQgaWQgPSBpbnRlbnRJZCgpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrcy5zZXQoaWQs
IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgbV9lcnJvckNhbGxiYWNrcy5zZXQoaWQsIGVycm9yQ2Fs
bGJhY2spOworICAgIHJldHVybiBpZDsKK30KKwordm9pZCBJbnRlbnRzQ29udHJvbGxlcjo6cG9z
dFJlc3VsdChjb25zdCBTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCkKK3sKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUoZGF0YSk7CisgICAgUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxsYmFja3MudGFrZShpbnRlbnRJZCk7CisgICAgbV9l
cnJvckNhbGxiYWNrcy5yZW1vdmUoaW50ZW50SWQpOworCisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFj
ay5nZXQoKSkKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCh2YWx1ZS5nZXQo
KSk7Cit9CisKK3ZvaWQgSW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKGNvbnN0IFN0cmlu
ZyYgZGF0YSwgaW50IGludGVudElkKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsK
KyAgICBSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9y
Q2FsbGJhY2tzLnRha2UoaW50ZW50SWQpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrcy5yZW1vdmUo
aW50ZW50SWQpOworCisgICAgaWYgKGVycm9yQ2FsbGJhY2suZ2V0KCkpCisgICAgICAgIGVycm9y
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHZhbHVlLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
ZjVlZDNkZjQxOWQ5NDUwNDc5NDc3MzBkZTgxODZmYTYwMDUzOGE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmgKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50c0NvbnRyb2xsZXJfaAorI2RlZmlu
ZSBJbnRlbnRzQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrOworCitjbGFzcyBJbnRl
bnRzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW50ZW50c0NvbnRyb2xs
ZXIpOworcHVibGljOgorICAgIH5JbnRlbnRzQ29udHJvbGxlcigpOworCisgICAgc3RhdGljIFBh
c3NPd25QdHI8SW50ZW50c0NvbnRyb2xsZXI+IGNyZWF0ZSgpOworCisgICAgaW50IGFzc2lnbklu
dGVudElkKFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICB2
b2lkIHBvc3RSZXN1bHQoY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50SWQpOworICAgIHZv
aWQgcG9zdEZhaWx1cmUoY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50SWQpOworCitwcml2
YXRlOgorICAgIEludGVudHNDb250cm9sbGVyKCk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+ID4gQ2FsbGJhY2tNYXA7CisgICAgQ2FsbGJh
Y2tNYXAgbV9zdWNjZXNzQ2FsbGJhY2tzOworICAgIENhbGxiYWNrTWFwIG1fZXJyb3JDYWxsYmFj
a3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0lOVEVOVFMpCisKKyNlbmRpZiAvLyBJbnRlbnRzQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggM2JhNGI5MTI3ZTg5YjdkMTRkMmQwODVkNDVlNzUxNzUxY2FjNmE3Zi4uODE0MjQ5M2Uw
NWNkN2UxZTRkOGEyNzY5OTgxNjY4NTBjNTc1ZGZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE1
MCw2ICsxMTUwLDcgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3Qu
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKICAgICAgICAgICAg
ICdjc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VS
dWxlLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTgs
NiArMTY5OSw5IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVw
YWQuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50
ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50
cy9JbnRlbnRzQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlB
UklBR3JpZC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQppbmRleCAyNWQ2OTYwYzJkOTJhNTI0ZWFiYzZlZTA4YjFhMWVlNDQ1YTQy
ZjBhLi45NjkyMjcxZjQ3N2UxNjI3NGI4NDNkZjE1OGFjZTI1NGI1MWI5ODJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
MzQwOCw2ICszNDA4LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MKIHsKICAgICBt
eSAkdHlwZSA9IHNoaWZ0OwogICAgIHJldHVybiAiY29uc3QgU3RyaW5nJiIgaWYgJHR5cGUgZXEg
IkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWUqIiBpZiAkdHlw
ZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKIAogICAgICMgQ2FsbGJhY2tzIHVzZSByYXcg
cG9pbnRlcnMsIHNvIHBhc3MgaXNQYXJhbWV0ZXIgPSAxCiAgICAgcmV0dXJuIEdldE5hdGl2ZVR5
cGUoJHR5cGUsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCmluZGV4IDM4NTkyY2ZiNTI0OTIwYmY2YWMzNzFlMzE3M2FkMjVkMjU5Yzk1MmYuLmMy
OWQ2MTZjODgzNDVkMTllMmJlOGNiZjVkZDdiYzM3NTk5NGU4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNs
dWRlICJGaWxlVGhyZWFkLmgiCisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC05Niw2ICs5Nyw5IEBAIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQogI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
CiAgICAgLCBtX2hhc09wZW5EYXRhYmFzZXMoZmFsc2UpCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VC
X0lOVEVOVFMpCisgICAgLCBtX2ludGVudHNDb250cm9sbGVyKEludGVudHNDb250cm9sbGVyOjpj
cmVhdGUoKSkKKyNlbmRpZgogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAppbmRleCAyNGExN2Y1OTlkNzUxMmIyYjUxMjc1NGViNzBhZmRkZDUyZjM3
NThmLi43ZjU4MjdkZTBjYjcyMmNmOWI4ZWU1MWY0NmEyNzU0N2EyMGIyMzRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTYzLDYgKzYzLDEwIEBA
IGNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgRmlsZVRocmVhZDsKICNlbmRpZgogCisjaWYg
RU5BQkxFKFdFQl9JTlRFTlRTKQorY2xhc3MgSW50ZW50c0NvbnRyb2xsZXI7CisjZW5kaWYKKwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQgewog
cHVibGljOgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTE1Nyw2ICsxNjEsMTAg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBFdmVudFF1ZXVlKiBldmVudFF1ZXVlKCkgY29uc3Qg
PSAwOwogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIEludGVudHNDb250cm9sbGVyKiBp
bnRlbnRzQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZW50c0NvbnRyb2xsZXIuZ2V0
KCk7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgY2xhc3MgQWRkQ29uc29sZU1lc3NhZ2VU
YXNrIDogcHVibGljIFRhc2sgewogICAgIHB1YmxpYzoKQEAgLTIxMyw2ICsyMjEsMTAgQEAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgIFJlZlB0
cjxGaWxlVGhyZWFkPiBtX2ZpbGVUaHJlYWQ7CiAjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfSU5U
RU5UUykKKyAgICBPd25QdHI8SW50ZW50c0NvbnRyb2xsZXI+IG1faW50ZW50c0NvbnRyb2xsZXI7
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKaW5kZXggMjhhYTZkNjVlMzMxYWU5MDA1Zjk3NGNhYzQy
NzJiOGUwZDZiMzM5NC4uOTYwMDJhNTc5M2NiMGEwOWM1YTlhOGI3YjEyNDU5YjM5ZTFmN2NjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTc4LDYgKzc4
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQ7CiAgICAgY2xhc3MgSW50U2l6ZTsKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAg
Y2xhc3MgSW50ZW50OworI2VuZGlmCiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBNZXNzYWdl
RXZlbnQ7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKQEAgLTMyMyw2ICszMjYsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW1i
ZWRkZXIgaW50ZXJjZXB0ZWQgdGhlIHBvc3RNZXNzYWdlIGNhbGwKICAgICAgICAgdmlydHVhbCBi
b29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KFNlY3VyaXR5T3JpZ2luKiAvKnRh
cmdldCovLCBNZXNzYWdlRXZlbnQqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQoY29u
c3QgSW50ZW50JiBpbnRlbnQpIHsgfQorI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IGMzNWU5OTQ5NjFjNTBhODFh
YmI4YzAwODQzZDgyZWM0MzYxNjFkZTQuLmIxMmM5YTVmYzViZmZhYmE2Y2M1ZjFmODIxNmIyYjAy
OGRmZDBlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTMzLDYgKzMzLDkgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRl
ICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiUG9pbnRlckxvY2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
TGFuZ3VhZ2UuaCIKQEAgLTQwLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAg
LTMwMSw0ICszMDUsMzAgQEAgR2FtZXBhZExpc3QqIE5hdmlnYXRvcjo6Z2FtZXBhZHMoKQogfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCit2b2lkIE5hdmlnYXRvcjo6c3RhcnRB
Y3Rpdml0eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50ZW50KiBpbnRlbnQsIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgRnJhbWUqIGFjdGl2ZUZy
YW1lID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+ZnJhbWUoKTsKKyAgICBpZiAo
IWFjdGl2ZUZyYW1lIHx8ICFpbnRlbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnRlbnQtPmFjdGlvbigpLmlz
RW1wdHkoKSB8fCBpbnRlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBWQUxJ
REFUSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghU2NyaXB0Q29u
dHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElE
X0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaWQgPSBjb250
ZXh0LT5pbnRlbnRzQ29udHJvbGxlcigpLT5hc3NpZ25JbnRlbnRJZChzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spOworICAgIGludGVudC0+c2V0SWRlbnRpZmllcihpZCk7CisgICAgYWN0
aXZlRnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQoKmludGVudCk7Cit9
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgK
aW5kZXggMDdjOWQyYjRiMjVjYWQzNTlmMGQ4YmQwZTdmZTk4ZmY3Njk3ZmViZi4uYmNiYTFkYzdl
NTRjMzJiNTI0M2NiNmFjNTBlYWRkNTE0NmM0MjU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5o
CkBAIC0zNCwxMCArMzQsMTMgQEAgY2xhc3MgRE9NUGx1Z2luQXJyYXk7CiBjbGFzcyBGcmFtZTsK
IGNsYXNzIEdhbWVwYWRMaXN0OwogY2xhc3MgR2VvbG9jYXRpb247CitjbGFzcyBJbnRlbnQ7Citj
bGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFjazsKIGNsYXNzIFBvaW50ZXJMb2NrOwogY2xhc3MgTmF2
aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1
Y2Nlc3NDYWxsYmFjazsKIGNsYXNzIFBsdWdpbkRhdGE7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC03OSw2ICs4MiwxMSBA
QCBwdWJsaWM6CiAgICAgR2FtZXBhZExpc3QqIGdhbWVwYWRzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKyAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgIEludGVudCosIFBhc3NSZWZQdHI8SW50
ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1
bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgTmF2aWdhdG9yKEZyYW1lKik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmlkbAppbmRleCA2ZmU0M2U2NjBhODUwNzMzMTQ4NTNmNTgxNjEzMTdhNmRiZmEyMzg1
Li4wNjA5Yzc0MmFkNDRmOWZlMTJmM2NjNjY1M2JhMTNlMTY1NDcxMDI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9OYXZpZ2F0b3IuaWRsCkBAIC02MSw2ICs2MSwxMyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
W0NhbGxiYWNrPUZ1bmN0aW9uT25seSwgT3B0aW9uYWxdIE5hdmlnYXRvclVzZXJNZWRpYUVycm9y
Q2FsbGJhY2sgZXJyb3JDYWxsYmFjaykKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVOQUJMRV9XRUJfSU5URU5UUykgJiYgRU5BQkxFX1dF
Ql9JTlRFTlRTCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lk
IHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbQ2FsbGJhY2s9RnVuY3Rp
b25Pbmx5LCBPcHRpb25hbF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9ubHksIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxs
YmFjayBmYWlsdXJlQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyNlbmRpZgogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3YmI0YmFmMDAxY2I2YzhkNmFjOTM5MmY5NzQx
NzU1MDNiNTAyZGJjLi44ZGY5ZDdmNDdkMDU5MzJkZTU1MjdjMTdiNzc4ODBjZDU0YjgxYWFiIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMDYgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2Nr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5
OyBhZGQgSW50ZW50c0NvbnRyb2xsZXIgZm9yIG1hbmFnaW5nIHdlYiBpbnRlbnRzIGNhbGxiYWNr
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTA5ICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
aW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50
ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CmluZGV4IGQyZWFmZDE2N2ZhNmMwMzRj
ZTQzNGRjNjM1MTBlNDJlZDVjNjEwMWEuLmNhZmI0N2MxYTIwMmU3NWMzZWZjMGFhZmVmYTU0MzJi
ZTI3MzExOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LWFwaS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSw0IEBACitQQVNTIG5hdmlnYXRvci5zdGFydEFj
dGl2aXR5IGlzIGRlZmluZWQuCiBQQVNTIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIG5ldyBJbnRl
bnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4K
IFBBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyLgpAQCAtMjUsNiArMjYsNyBAQCBQQVNTIGludGVudDYuZGF0
YSBpcyA0LjUKIFBBU1MgaW50ZW50Ny5kYXRhIGlzIHRydWUKIFBBU1MgaW50ZW50OC5kYXRhIGlz
IG51bGwKIFBBU1MgaW50ZW50OS5kYXRhID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUKK1BB
U1MgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJTlZBTElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUuCiBQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLWFwaS5odG1sCmluZGV4IDgwNDI2YjA4NTQwNjBkYzdjZTRjNzBmNzlmMGQy
MDVjYWI0OTBjMGIuLmE2MjRmM2RhZWQ5NGRhY2VmZjhhN2U2ZmY1MTE0ZmQ5MDk3MTlmM2YgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApAQCAtNSw4ICs1
LDkgQEAKIDwvaGVhZD4KIDxib2R5PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ICAgICAgc2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eSIpOworICAgICAg
CiAgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBJbnRlbnQoKSIsICInVHlwZUVy
cm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0KICAgICAgIHNob3VsZFRocm93KCJuZXcg
SW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7CiAgICAg
ICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycs
J2InLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwpAQCAt
NDgsNiArNDksOCBAQAogICAgICAgc2hvdWxkQmVOdWxsKCdpbnRlbnQ4LmRhdGEnKTsKICAgICAg
IHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdiJywge30pOwogICAgICAgc2hvdWxkRXZh
bHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworCisgICAgICBzaG91bGRUaHJvdygnbmF2aWdh
dG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSknLCAiJ0Vycm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6
IERPTSBFeGNlcHRpb24gMTUnIik7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121729</attachid>
            <date>2012-01-09 15:13:21 -0800</date>
            <delta_ts>2012-01-09 16:35:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109151320.patch</filename>
            <type>text/plain</type>
            <size>24989</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uZjYxNDU1MWMxZTlkODY3NGY3ZTY3MWU0MjBlYTY1
ZDVkMTUwY2UwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudHNDb250cm9sbGVyIGZvciBtYW5hZ2luZyB3
ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NTc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6aWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldElk
ZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVudFJlc3VsdENhbGxiYWNrOjp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnRzUmVxdWVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnRzUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZXRO
YXRpdmVUeXBlRm9yQ2FsbGJhY2tzKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaEludGVu
dCk6CisKIDIwMTItMDEtMDkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDQ0MTguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTUyYjY0NDcxN2Y4ZDRmNTk2ZGI2NDRjYTgxMWZkMTNlOTQ4MDIyOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmNwcApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudFJlcXVlc3Qu
aCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEludGVudFJlcXVlc3Q+IEludGVudFJlcXVlc3Q6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50KiBpbnRlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVu
dFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50UmVxdWVz
dChjb250ZXh0LCBpbnRlbnQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworfQor
CitJbnRlbnRSZXF1ZXN0OjpJbnRlbnRSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudCogaW50ZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgOiBBY3RpdmVET01P
YmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1faW50ZW50KGludGVudCkKKyAgICAsIG1fc3Vj
Y2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJv
ckNhbGxiYWNrKQoreworICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBJ
bnRlbnRSZXF1ZXN0Ojpjb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBDb250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlcjo6Y29udGV4dERlc3Ryb3llZCgpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNs
ZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrLmNsZWFyKCk7Cit9CisKK3ZvaWQgSW50ZW50UmVx
dWVzdDo6cG9zdFJlc3VsdChTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYg
KCFtX3N1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdWNjZXNzQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KGRhdGEpOworCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2su
Y2xlYXIoKTsKK30KKwordm9pZCBJbnRlbnRSZXF1ZXN0Ojpwb3N0RmFpbHVyZShTZXJpYWxpemVk
U2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYgKCFtX2Vycm9yQ2FsbGJhY2spCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YSk7CisKKyAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVh
cigpOworICAgIG1fZXJyb3JDYWxsYmFjay5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmNmNDg5Nzc5
OGYzN2Y1ZWYyOTlhZWYzYTkzYzY4OTk5NTlmN2IwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUs
IEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnRlbnRSZXF1ZXN0X2gKKyNkZWZpbmUgSW50ZW50UmVxdWVzdF9oCisKKyNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEludGVu
dFJlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXF1ZXN0PiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50UmVxdWVz
dD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJbnRlbnQqLCBQYXNzUmVmUHRyPElu
dGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVz
dWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgSW50ZW50KiBpbnRlbnQoKSB7IHJl
dHVybiBtX2ludGVudDsgfQorCisgICAgdm9pZCBwb3N0UmVzdWx0KFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSopOworICAgIHZvaWQgcG9zdEZhaWx1cmUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOworCisgICAgLy8gVE9ETyhnYmls
bG9ja0Bnb29nbGUuY29tKTogc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZQorCitwcml2YXRlOgorICAg
IEludGVudFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEludGVudCosIFBhc3NSZWZQ
dHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRl
bnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICBJbnRlbnQqIG1faW50ZW50
OworICAgIFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Cisg
ICAgUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50UmVxdWVz
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVz
dWx0Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1
bHRDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhN2Q1ZDdjZWEwYzhkYzVhMzBlNWI2ZTUzYjJlOTQy
MDM1MjU4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRSZXN1
bHRDYWxsYmFja19oCisjZGVmaW5lIEludGVudFJlc3VsdENhbGxiYWNrX2gKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxF
KFdFQl9JTlRFTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnRlbnRSZXN1bHRDYWxsYmFjaz4geworcHVibGljOgorICAgIHZpcnR1YWwgfkludGVu
dFJlc3VsdENhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0KSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYgLy8gSW50ZW50UmVzdWx0Q2FsbGJhY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVi
NGEzY2M2YTU5MGYzOTM2ZGU1OTVjNTExYTRlZTcwMWE1NTdmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWwor
ICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDYWxsYmFjaz1GdW5jdGlvbk9u
bHkKKyAgXSBJbnRlbnRSZXN1bHRDYWxsYmFjayB7CisgICAgICBib29sZWFuIGhhbmRsZUV2ZW50
KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSByZXN1bHQpOworICB9OworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxYzEwODg4YzY4YzY5ZTBkOWNkOGE1MjRlMWQwZWY3ZjYyZTRhZTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5j
cHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk5hdmlnYXRvckludGVudHMuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
KworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkludGVudC5oIgorI2luY2x1ZGUgIkludGVudFJl
cXVlc3QuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgIklu
dGVudHNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmlnYXRvckludGVu
dHM6Ok5hdmlnYXRvckludGVudHMoKQoreworfQorCitOYXZpZ2F0b3JJbnRlbnRzOjp+TmF2aWdh
dG9ySW50ZW50cygpCit7Cit9CisKK3ZvaWQgTmF2aWdhdG9ySW50ZW50czo6c3RhcnRBY3Rpdml0
eShOYXZpZ2F0b3IqIG5hdmlnYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRlbnQqIGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW5hdmlnYXRvci0+ZnJhbWUoKSB8
fCAhaW50ZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50ZW50LT5hY3Rpb24oKS5pc0VtcHR5KCkgfHwgaW50
ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gVkFMSURBVElPTl9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEludGVudFJlcXVlc3Q+IHJlcXVl
c3QgPSBJbnRlbnRSZXF1ZXN0OjpjcmVhdGUobmF2aWdhdG9yLT5mcmFtZSgpLT5kb2N1bWVudCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVudCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBuYXZpZ2F0
b3ItPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQocmVxdWVzdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5U
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0
b3JJbnRlbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50
ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYyZTBjZjQyMGYwMWI0MmQxMDFiZmZlODZlNmYzMDc5ZTVlNmM3
ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2
aWdhdG9ySW50ZW50cy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmF2aWdhdG9ySW50ZW50c19oCisjZGVmaW5lIE5hdmlnYXRvckludGVudHNfaAorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRlbnQ7CitjbGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFj
azsKK2NsYXNzIE5hdmlnYXRvcjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgTmF2aWdhdG9ySW50ZW50cyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc3RhcnRBY3Rp
dml0eShOYXZpZ2F0b3IqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50Kiwg
UGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7
CisKK3ByaXZhdGU6CisgICAgTmF2aWdhdG9ySW50ZW50cygpOworICAgIH5OYXZpZ2F0b3JJbnRl
bnRzKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0lOVEVOVFMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JJbnRlbnRzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43NTVmNThlMWFjNjlmZTMwMTI0MDI5ZjliOTFjMGY5MzQ2YWUzNDU1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMu
aWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgICAgU3VwcGxlbWVudGFs
PU5hdmlnYXRvcgorICAgIF0gTmF2aWdhdG9ySW50ZW50cyB7CisgICAgICAgIHZvaWQgc3RhcnRB
Y3Rpdml0eShpbiBJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
W0NhbGxiYWNrPUZ1bmN0aW9uT25seSwgT3B0aW9uYWxdIEludGVudFJlc3VsdENhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDYWxsYmFjaz1G
dW5jdGlvbk9ubHksIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggM2JhNGI5MTI3ZTg5YjdkMTRkMmQwODVkNDVlNzUxNzUxY2FjNmE3Zi4u
YTUzYTExZTAxMTBhYzZkMzg5ZjYyMjhkNWUxZmRmNGJjYjk4ZDNmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTE1MCw2ICsxMTUwLDggQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2Ft
ZXBhZExpc3QuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2Ft
ZXBhZC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5pZGwnLAogICAgICAg
ICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250
RmFjZVJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAt
MTY5OCw2ICsxNzAwLDExIEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRv
ckdhbWVwYWQuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2lu
dGVudHMvSW50ZW50UmVxdWVzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50
ZW50UmVzdWx0Q2FsbGJhY2suaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL05hdmln
YXRvckludGVudHMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9y
SW50ZW50cy5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
JywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAn
LAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQppbmRleCAyNWQ2OTYwYzJkOTJhNTI0ZWFiYzZlZTA4YjFhMWVlNDQ1YTQyZjBhLi45NjkyMjcx
ZjQ3N2UxNjI3NGI4NDNkZjE1OGFjZTI1NGI1MWI5ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzQwOCw2ICszNDA4
LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MKIHsKICAgICBteSAkdHlwZSA9IHNo
aWZ0OwogICAgIHJldHVybiAiY29uc3QgU3RyaW5nJiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7
CisgICAgcmV0dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWUqIiBpZiAkdHlwZSBlcSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlIjsKIAogICAgICMgQ2FsbGJhY2tzIHVzZSByYXcgcG9pbnRlcnMsIHNv
IHBhc3MgaXNQYXJhbWV0ZXIgPSAxCiAgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUsIDEp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAyOGFhNmQ2
NWUzMzFhZTkwMDVmOTc0Y2FjNDI3MmI4ZTBkNmIzMzk0Li4zNWM2ODliMjJhNjUwOWNmZTAxZDMx
YTE2MTFlOGQ0Y2VkMjMyY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaApAQCAtNzgsNiArNzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAg
ICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKICAgICBjbGFzcyBJbnRTaXplOworI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKyAgICBjbGFzcyBJbnRlbnRSZXF1ZXN0OworI2VuZGlmCiAgICAgY2xh
c3MgS1VSTDsKICAgICBjbGFzcyBNZXNzYWdlRXZlbnQ7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFj
dGlvbjsKQEAgLTMyMyw2ICszMjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW1iZWRkZXIgaW50ZXJjZXB0ZWQgdGhlIHBvc3RNZXNz
YWdlIGNhbGwKICAgICAgICAgdmlydHVhbCBib29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2Fn
ZUV2ZW50KFNlY3VyaXR5T3JpZ2luKiAvKnRhcmdldCovLCBNZXNzYWdlRXZlbnQqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQoUGFzc1JlZlB0cjxJbnRlbnRSZXF1ZXN0PiBpbnRlbnRS
ZXF1ZXN0KSB7IH0KKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA3YmI0YmFmMDAxY2I2YzhkNmFjOTM5MmY5NzQxNzU1MDNiNTAyZGJjLi44ZGY5ZDdmNDdk
MDU5MzJkZTU1MjdjMTdiNzc4ODBjZDU0YjgxYWFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTItMDEtMDYgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5OyBhZGQgSW50ZW50c0NvbnRyb2xsZXIg
Zm9yIG1hbmFnaW5nIHdlYiBpbnRlbnRzIGNhbGxiYWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTAxLTA5ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVXBkYXRlIHRlc3QgZXhwZWN0YXRp
b25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhw
ZWN0ZWQudHh0CmluZGV4IGQyZWFmZDE2N2ZhNmMwMzRjZTQzNGRjNjM1MTBlNDJlZDVjNjEwMWEu
LmNhZmI0N2MxYTIwMmU3NWMzZWZjMGFhZmVmYTU0MzJiZTI3MzExOGIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAgLTEs
MyArMSw0IEBACitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IGlzIGRlZmluZWQuCiBQQVNT
IHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90
IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KIFBBU1MgbmV3IEludGVudCgnJywnJywn
JykgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgpA
QCAtMjUsNiArMjYsNyBAQCBQQVNTIGludGVudDYuZGF0YSBpcyA0LjUKIFBBU1MgaW50ZW50Ny5k
YXRhIGlzIHRydWUKIFBBU1MgaW50ZW50OC5kYXRhIGlzIG51bGwKIFBBU1MgaW50ZW50OS5kYXRh
ID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLnN0YXJ0QWN0aXZp
dHkoaW50ZW50MSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6IERP
TSBFeGNlcHRpb24gMTUuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1Qg
Q09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMt
YXBpLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCmlu
ZGV4IDgwNDI2YjA4NTQwNjBkYzdjZTRjNzBmNzlmMGQyMDVjYWI0OTBjMGIuLmE2MjRmM2RhZWQ5
NGRhY2VmZjhhN2U2ZmY1MTE0ZmQ5MDk3MTlmM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50
cy93ZWItaW50ZW50cy1hcGkuaHRtbApAQCAtNSw4ICs1LDkgQEAKIDwvaGVhZD4KIDxib2R5Pgog
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgc2hvdWxkQmVEZWZpbmVkKCJu
YXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eSIpOworICAgICAgCiAgICAgICBzaG91bGRUaHJvdygidmFy
IGludGVudCA9IG5ldyBJbnRlbnQoKSIsICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50
cyciKTs7Ci0KICAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJv
cjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IEludGVu
dCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwog
ICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwpAQCAtNDgsNiArNDksOCBAQAogICAgICAgc2hv
dWxkQmVOdWxsKCdpbnRlbnQ4LmRhdGEnKTsKICAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVu
dCgnYScsICdiJywge30pOwogICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywg
e30pOworCisgICAgICBzaG91bGRUaHJvdygnbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50
MSknLCAiJ0Vycm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUnIik7CiA8
L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121757</attachid>
            <date>2012-01-09 16:36:00 -0800</date>
            <delta_ts>2012-01-09 17:23:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109163559.patch</filename>
            <type>text/plain</type>
            <size>25250</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uNmFjNGVmMDNhYWQ2MGVlZDlhOWVhZGYwOTZhNjlm
Y2UxZDBlZDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudFJlcXVlc3Qgb2JqZWN0IGZvciBtYW5hZ2lu
ZyB3ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIFdlYiBjb250ZW50IHdpbGwgaW52b2tl
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IHRvIGxhdW5jaCBhIG5ldyBXZWIKKyAgICAgICAgSW50
ZW50cyBjYWxsLiBFYWNoIHN1Y2ggY2FsbCB3aWxsIG1hcCB0byBhbiBJbnRlbnRSZXF1ZXN0IGJy
b2tlcgorICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdXNlZCBieSBjbGllbnQgY29kZSB0byBjb3Jy
ZWxhdGUgYW55IHJldHVybiBkYXRhIHRvCisgICAgICAgIHRoZSAob3B0aW9uYWwpIGNhbGxiYWNr
cyBzdXBwbGllZCBieSB3ZWIgY29udGVudCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0SWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxs
YmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0Lmg6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoSW50ZW50KToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQx
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44N2Q1NWJjNmUyMWE4YzNjNzJiNWI4M2E5OTUzYmEwMGU5MDRjMjE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
cXVlc3QuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
ZW50UmVxdWVzdC5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SW50ZW50UmVxdWVzdD4gSW50
ZW50UmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPElu
dGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEludGVudFJlcXVlc3QoY29udGV4dCwgaW50ZW50LCBzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spKTsKK30KKworSW50ZW50UmVxdWVzdDo6SW50ZW50UmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2spCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAg
ICAsIG1faW50ZW50KGludGVudCkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxs
YmFjaykKKyAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQoreworICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBJbnRlbnRSZXF1ZXN0Ojpjb250ZXh0RGVz
dHJveWVkKCkKK3sKKyAgICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6Y29udGV4dERlc3Ry
b3llZCgpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxi
YWNrLmNsZWFyKCk7Cit9CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6cG9zdFJlc3VsdChTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYgKCFtX3N1Y2Nlc3NDYWxsYmFjaykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGEp
OworCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgbV9zdWNjZXNzQ2FsbGJh
Y2suY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2suY2xlYXIoKTsKK30KKwordm9pZCBJbnRl
bnRSZXF1ZXN0Ojpwb3N0RmFpbHVyZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEpCit7Cisg
ICAgaWYgKCFtX2Vycm9yQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YSk7CisKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFj
ay5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dFJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjdlYjAwN2Y2MTQ4MjU5MzE3ZDUwYjdkNDU2Njc1MDc5
YjJhN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudFJlcXVlc3QuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRSZXF1ZXN0X2gKKyNk
ZWZpbmUgSW50ZW50UmVxdWVzdF9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJ
bnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEludGVudFJlcXVlc3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnRlbnRSZXF1ZXN0PiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjayk7CisKKyAgICBJbnRlbnQqIGludGVudCgpIHsgcmV0dXJuIG1faW50ZW50
LmdldCgpOyB9CisKKyAgICB2b2lkIHBvc3RSZXN1bHQoU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7
CisgICAgdm9pZCBwb3N0RmFpbHVyZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKKworICAgIHZp
cnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAg
SW50ZW50UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJbnRlbnQ+
LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgUmVmUHRy
PEludGVudD4gbV9pbnRlbnQ7CisgICAgUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBtX3N1
Y2Nlc3NDYWxsYmFjazsKKyAgICBSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IG1fZXJyb3JD
YWxsYmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRp
ZiAvLyBJbnRlbnRSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRjZGViMDQ5MDI2MjYy
OWI3M2Y2YTY4YWNhYWVjYWRiY2U0MGU0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEludGVudFJlc3VsdENhbGxiYWNrX2gKKyNkZWZpbmUgSW50ZW50UmVzdWx0Q2FsbGJh
Y2tfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCitjbGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFj
ayA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudFJlc3VsdENhbGxiYWNrPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+SW50ZW50UmVzdWx0Q2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQpID0gMDsKK307CisKK30K
KworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRSZXN1bHRDYWxsYmFja19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mZWI0YTNjYzZhNTkwZjM5MzZkZTU5NWM1MTFhNGVlNzAxYTU1N2ZkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
c3VsdENhbGxiYWNrLmlkbApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7
CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIENh
bGxiYWNrPUZ1bmN0aW9uT25seQorICBdIEludGVudFJlc3VsdENhbGxiYWNrIHsKKyAgICAgIGJv
b2xlYW4gaGFuZGxlRXZlbnQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHJlc3VsdCk7CisgIH07
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9y
SW50ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50
ZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU2MzZmZDc4ODFlZTA5YjIyMzJkODY2ZWZlZTEwNTI3Nzhl
ODhjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9O
YXZpZ2F0b3JJbnRlbnRzLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9ySW50ZW50cy5oIgorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisj
aW5jbHVkZSAiSW50ZW50UmVxdWVzdC5oIgorI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxiYWNr
LmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmlnYXRvckludGVudHM6Ok5hdmlnYXRvcklu
dGVudHMoKQoreworfQorCitOYXZpZ2F0b3JJbnRlbnRzOjp+TmF2aWdhdG9ySW50ZW50cygpCit7
Cit9CisKK3ZvaWQgTmF2aWdhdG9ySW50ZW50czo6c3RhcnRBY3Rpdml0eShOYXZpZ2F0b3IqIG5h
dmlnYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PEludGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbmF2aWdhdG9yLT5mcmFtZSgpIHx8ICFp
bnRlbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpbnRlbnQtPmFjdGlvbigpLmlzRW1wdHkoKSB8fCBpbnRlbnQt
PnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBWQUxJREFUSU9OX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW50ZW50UmVxdWVzdD4gcmVxdWVzdCA9
IEludGVudFJlcXVlc3Q6OmNyZWF0ZShuYXZpZ2F0b3ItPmZyYW1lKCktPmRvY3VtZW50KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ZW50LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIG5hdmlnYXRvci0+
ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaEludGVudChyZXF1ZXN0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvcklu
dGVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWYyMjdjMjYwMjEzMmEwZjI5M2IxNzY4MjA3NzUxNTg5OTJhNWZiYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0
b3JJbnRlbnRzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOYXZp
Z2F0b3JJbnRlbnRzX2gKKyNkZWZpbmUgTmF2aWdhdG9ySW50ZW50c19oCisKKyNpZiBFTkFCTEUo
V0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEludGVudDsKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrOwor
Y2xhc3MgTmF2aWdhdG9yOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBO
YXZpZ2F0b3JJbnRlbnRzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzdGFydEFjdGl2aXR5
KE5hdmlnYXRvciosIFBhc3NSZWZQdHI8SW50ZW50PiwgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgTmF2aWdh
dG9ySW50ZW50cygpOworICAgIH5OYXZpZ2F0b3JJbnRlbnRzKCk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNlbmRpZiAv
LyBOYXZpZ2F0b3JJbnRlbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTVmNThlMWFjNjlmZTMwMTI0
MDI5ZjliOTFjMGY5MzQ2YWUzNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
bW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1X
RUJfSU5URU5UUywKKyAgICAgICAgU3VwcGxlbWVudGFsPU5hdmlnYXRvcgorICAgIF0gTmF2aWdh
dG9ySW50ZW50cyB7CisgICAgICAgIHZvaWQgc3RhcnRBY3Rpdml0eShpbiBJbnRlbnQgaW50ZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW0NhbGxiYWNrPUZ1bmN0aW9uT25seSwg
T3B0aW9uYWxdIEludGVudFJlc3VsdENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9ubHksIE9wdGlvbmFsXSBJ
bnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2JhNGI5MTI3
ZTg5YjdkMTRkMmQwODVkNDVlNzUxNzUxY2FjNmE3Zi4uYTUzYTExZTAxMTBhYzZkMzg5ZjYyMjhk
NWUxZmRmNGJjYjk4ZDNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE1MCw2ICsxMTUwLDggQEAK
ICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwnLAogICAgICAgICAgICAg
J01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvTmF2aWdhdG9ySW50ZW50cy5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVs
ZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsJywKICAgICAgICAg
ICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5OCw2ICsxNzAwLDExIEBACiAgICAg
ICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVl
c3QuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuY3BwJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5oJywKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAyNWQ2OTYwYzJkOTJhNTI0
ZWFiYzZlZTA4YjFhMWVlNDQ1YTQyZjBhLi45NjkyMjcxZjQ3N2UxNjI3NGI4NDNkZjE1OGFjZTI1
NGI1MWI5ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzQwOCw2ICszNDA4LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVG
b3JDYWxsYmFja3MKIHsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAgIHJldHVybiAiY29uc3Qg
U3RyaW5nJiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUqIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKIAogICAg
ICMgQ2FsbGJhY2tzIHVzZSByYXcgcG9pbnRlcnMsIHNvIHBhc3MgaXNQYXJhbWV0ZXIgPSAxCiAg
ICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAyOGFhNmQ2NWUzMzFhZTkwMDVmOTc0Y2FjNDI3MmI4
ZTBkNmIzMzk0Li4zNWM2ODliMjJhNjUwOWNmZTAxZDMxYTE2MTFlOGQ0Y2VkMjMyY2JkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtNzgsNiArNzgsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVu
dDsKICAgICBjbGFzcyBJbnRTaXplOworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBjbGFz
cyBJbnRlbnRSZXF1ZXN0OworI2VuZGlmCiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBNZXNz
YWdlRXZlbnQ7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKQEAgLTMyMyw2ICszMjYsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
ZW1iZWRkZXIgaW50ZXJjZXB0ZWQgdGhlIHBvc3RNZXNzYWdlIGNhbGwKICAgICAgICAgdmlydHVh
bCBib29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KFNlY3VyaXR5T3JpZ2luKiAv
KnRhcmdldCovLCBNZXNzYWdlRXZlbnQqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisjaWYg
RU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQo
UGFzc1JlZlB0cjxJbnRlbnRSZXF1ZXN0PiBpbnRlbnRSZXF1ZXN0KSB7IH0KKyNlbmRpZgogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3YmI0YmFmMDAxY2I2YzhkNmFj
OTM5MmY5NzQxNzU1MDNiNTAyZGJjLi44ZGY5ZDdmNDdkMDU5MzJkZTU1MjdjMTdiNzc4ODBjZDU0
YjgxYWFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMDYgIEdyZWcgQmlsbG9jayAg
PGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IG5hdmlnYXRvci5zdGFy
dEFjdGl2aXR5OyBhZGQgSW50ZW50c0NvbnRyb2xsZXIgZm9yIG1hbmFnaW5nIHdlYiBpbnRlbnRz
IGNhbGxiYWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAx
LTA5ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtDaHJvbWl1bV0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CmluZGV4IGQyZWFmZDE2
N2ZhNmMwMzRjZTQzNGRjNjM1MTBlNDJlZDVjNjEwMWEuLmNhZmI0N2MxYTIwMmU3NWMzZWZjMGFh
ZmVmYTU0MzJiZTI3MzExOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2Vi
LWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSw0IEBACitQQVNTIG5hdmlnYXRv
ci5zdGFydEFjdGl2aXR5IGlzIGRlZmluZWQuCiBQQVNTIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNT
IG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFy
Z3VtZW50cy4KIFBBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgpAQCAtMjUsNiArMjYsNyBAQCBQQVNTIGlu
dGVudDYuZGF0YSBpcyA0LjUKIFBBU1MgaW50ZW50Ny5kYXRhIGlzIHRydWUKIFBBU1MgaW50ZW50
OC5kYXRhIGlzIG51bGwKIFBBU1MgaW50ZW50OS5kYXRhID09ICdbb2JqZWN0IE9iamVjdF0nIGlz
IHRydWUKK1BBU1MgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSkgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUuCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCmluZGV4IDgwNDI2YjA4NTQwNjBkYzdjZTRj
NzBmNzlmMGQyMDVjYWI0OTBjMGIuLmE2MjRmM2RhZWQ5NGRhY2VmZjhhN2U2ZmY1MTE0ZmQ5MDk3
MTlmM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBp
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApA
QCAtNSw4ICs1LDkgQEAKIDwvaGVhZD4KIDxib2R5PgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgc2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eSIp
OworICAgICAgCiAgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBJbnRlbnQoKSIs
ICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0KICAgICAgIHNob3VsZFRo
cm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMn
Iik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBJ
bnRlbnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
JyIpOwpAQCAtNDgsNiArNDksOCBAQAogICAgICAgc2hvdWxkQmVOdWxsKCdpbnRlbnQ4LmRhdGEn
KTsKICAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdiJywge30pOwogICAgICAg
c2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworCisgICAgICBzaG91bGRUaHJv
dygnbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSknLCAiJ0Vycm9yOiBJTlZBTElEX0FD
Q0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUnIik7CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121764</attachid>
            <date>2012-01-09 17:19:30 -0800</date>
            <delta_ts>2012-01-09 17:33:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109171929.patch</filename>
            <type>text/plain</type>
            <size>25436</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uNmFjNGVmMDNhYWQ2MGVlZDlhOWVhZGYwOTZhNjlm
Y2UxZDBlZDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudFJlcXVlc3Qgb2JqZWN0IGZvciBtYW5hZ2lu
ZyB3ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIFdlYiBjb250ZW50IHdpbGwgaW52b2tl
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IHRvIGxhdW5jaCBhIG5ldyBXZWIKKyAgICAgICAgSW50
ZW50cyBjYWxsLiBFYWNoIHN1Y2ggY2FsbCB3aWxsIG1hcCB0byBhbiBJbnRlbnRSZXF1ZXN0IGJy
b2tlcgorICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdXNlZCBieSBjbGllbnQgY29kZSB0byBjb3Jy
ZWxhdGUgYW55IHJldHVybiBkYXRhIHRvCisgICAgICAgIHRoZSAob3B0aW9uYWwpIGNhbGxiYWNr
cyBzdXBwbGllZCBieSB3ZWIgY29udGVudCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0SWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxs
YmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0Lmg6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoSW50ZW50KToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQx
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMGZjYjRlNzNmODFjODM0MDQwMzE1YTdhYzRkYmYzNWU3NjIyMjMwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
cXVlc3QuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
ZW50UmVxdWVzdC5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SW50ZW50UmVxdWVzdD4gSW50
ZW50UmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPElu
dGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEludGVudFJlcXVlc3QoY29udGV4dCwgaW50ZW50LCBzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spKTsKK30KKworSW50ZW50UmVxdWVzdDo6SW50ZW50UmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2spCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAg
ICAsIG1faW50ZW50KGludGVudCkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxs
YmFjaykKKyAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQoreworICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBJbnRlbnRSZXF1ZXN0Ojpjb250ZXh0RGVz
dHJveWVkKCkKK3sKKyAgICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6Y29udGV4dERlc3Ry
b3llZCgpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxi
YWNrLmNsZWFyKCk7Cit9CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6cG9zdFJlc3VsdChTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgLy8gQ2FsbGJhY2sgY291bGQgbGVhZCB0byBk
ZWxldGlvbiBvZiB0aGlzLgorICAgIFJlZlB0cjxJbnRlbnRSZXF1ZXN0PiBwcm90ZWN0KHRoaXMp
OworCisgICAgaWYgKCFtX3N1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGEpOworCisgICAgbV9zdWNjZXNzQ2Fs
bGJhY2suY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2suY2xlYXIoKTsKKyAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9pZCBJbnRlbnRSZXF1ZXN0Ojpwb3N0RmFpbHVy
ZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgLy8gQ2FsbGJhY2sgY291bGQg
bGVhZCB0byBkZWxldGlvbiBvZiB0aGlzLgorICAgIFJlZlB0cjxJbnRlbnRSZXF1ZXN0PiBwcm90
ZWN0KHRoaXMpOworCisgICAgaWYgKCFtX2Vycm9yQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YSk7CisKKyAgICBtX3N1Y2Nl
c3NDYWxsYmFjay5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFjay5jbGVhcigpOworICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjdlYjAwN2Y2MTQ4MjU5MzE3
ZDUwYjdkNDU2Njc1MDc5YjJhN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJH
b29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRl
bnRSZXF1ZXN0X2gKKyNkZWZpbmUgSW50ZW50UmVxdWVzdF9oCisKKyNpZiBFTkFCTEUoV0VCX0lO
VEVOVFMpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJJbnRlbnQu
aCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEludGVudFJlcXVlc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXF1ZXN0PiwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50UmVxdWVzdD4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8
SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRS
ZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICBJbnRlbnQqIGludGVudCgpIHsg
cmV0dXJuIG1faW50ZW50LmdldCgpOyB9CisKKyAgICB2b2lkIHBvc3RSZXN1bHQoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKik7CisgICAgdm9pZCBwb3N0RmFpbHVyZShTZXJpYWxpemVkU2NyaXB0VmFs
dWUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgT1ZFUlJJREU7CisK
K3ByaXZhdGU6CisgICAgSW50ZW50UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJbnRlbnQ+LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sp
OworCisgICAgUmVmUHRyPEludGVudD4gbV9pbnRlbnQ7CisgICAgUmVmUHRyPEludGVudFJlc3Vs
dENhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKKyAgICBSZWZQdHI8SW50ZW50UmVzdWx0Q2Fs
bGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTRjZGViMDQ5MDI2MjYyOWI3M2Y2YTY4YWNhYWVjYWRiY2U0MGU0YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudFJlc3VsdENhbGxiYWNrX2gKKyNkZWZpbmUgSW50
ZW50UmVzdWx0Q2FsbGJhY2tfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCitjbGFzcyBJbnRl
bnRSZXN1bHRDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudFJlc3VsdENhbGxiYWNr
PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW50ZW50UmVzdWx0Q2FsbGJhY2soKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQp
ID0gMDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRSZXN1bHRDYWxsYmFj
a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVz
dWx0Q2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
c3VsdENhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWI0YTNjYzZhNTkwZjM5MzZkZTU5NWM1MTFh
NGVlNzAxYTU1N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbApAQCAtMCwwICsxLDMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5U
RU5UUywKKyAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seQorICBdIEludGVudFJlc3VsdENhbGxi
YWNrIHsKKyAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
IHJlc3VsdCk7CisgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvTmF2aWdhdG9ySW50ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvTmF2aWdhdG9ySW50ZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU2MzZmZDc4ODFlZTA5YjIyMzJk
ODY2ZWZlZTEwNTI3NzhlODhjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9ySW50ZW50
cy5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiSW50ZW50LmgiCisjaW5jbHVkZSAiSW50ZW50UmVxdWVzdC5oIgorI2luY2x1ZGUgIkludGVu
dFJlc3VsdENhbGxiYWNrLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmlnYXRvckludGVu
dHM6Ok5hdmlnYXRvckludGVudHMoKQoreworfQorCitOYXZpZ2F0b3JJbnRlbnRzOjp+TmF2aWdh
dG9ySW50ZW50cygpCit7Cit9CisKK3ZvaWQgTmF2aWdhdG9ySW50ZW50czo6c3RhcnRBY3Rpdml0
eShOYXZpZ2F0b3IqIG5hdmlnYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPElu
dGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbmF2aWdhdG9y
LT5mcmFtZSgpIHx8ICFpbnRlbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnRlbnQtPmFjdGlvbigpLmlzRW1w
dHkoKSB8fCBpbnRlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBWQUxJREFU
SU9OX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghU2NyaXB0Q29udHJv
bGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FD
Q0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW50ZW50UmVx
dWVzdD4gcmVxdWVzdCA9IEludGVudFJlcXVlc3Q6OmNyZWF0ZShuYXZpZ2F0b3ItPmZyYW1lKCkt
PmRvY3VtZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZW50LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwor
ICAgIG5hdmlnYXRvci0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaEludGVu
dChyZXF1ZXN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL05hdmlnYXRvckludGVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9O
YXZpZ2F0b3JJbnRlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWYyMjdjMjYwMjEzMmEwZjI5M2IxNzY4MjA3
NzUxNTg5OTJhNWZiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOYXZpZ2F0b3JJbnRlbnRzX2gKKyNkZWZpbmUgTmF2aWdhdG9ySW50ZW50c19o
CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludGVudDsKK2NsYXNzIEludGVudFJl
c3VsdENhbGxiYWNrOworY2xhc3MgTmF2aWdhdG9yOworCit0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOworCitjbGFzcyBOYXZpZ2F0b3JJbnRlbnRzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBzdGFydEFjdGl2aXR5KE5hdmlnYXRvciosIFBhc3NSZWZQdHI8SW50ZW50PiwgUGFzc1JlZlB0
cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEludGVu
dFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZh
dGU6CisgICAgTmF2aWdhdG9ySW50ZW50cygpOworICAgIH5OYXZpZ2F0b3JJbnRlbnRzKCk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVO
VFMpCisKKyNlbmRpZiAvLyBOYXZpZ2F0b3JJbnRlbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTVm
NThlMWFjNjlmZTMwMTI0MDI5ZjliOTFjMGY5MzQ2YWUzNDU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuaWRsCkBAIC0w
LDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgICAgU3VwcGxlbWVudGFsPU5hdmlnYXRv
cgorICAgIF0gTmF2aWdhdG9ySW50ZW50cyB7CisgICAgICAgIHZvaWQgc3RhcnRBY3Rpdml0eShp
biBJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW0NhbGxiYWNr
PUZ1bmN0aW9uT25seSwgT3B0aW9uYWxdIEludGVudFJlc3VsdENhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9u
bHksIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCisgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggM2JhNGI5MTI3ZTg5YjdkMTRkMmQwODVkNDVlNzUxNzUxY2FjNmE3Zi4uYTUzYTExZTAx
MTBhYzZkMzg5ZjYyMjhkNWUxZmRmNGJjYjk4ZDNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE1
MCw2ICsxMTUwLDggQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3Qu
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5pZGwnLAogICAgICAgICAgICAgJ2Nz
cy9DU1NDaGFyc2V0UnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUu
aWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5OCw2ICsx
NzAwLDExIEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQu
aCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRl
bnRzL0ludGVudFJlcXVlc3QuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50
ZW50UmVxdWVzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0
Q2FsbGJhY2suaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVu
dHMuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5o
JywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAy
NWQ2OTYwYzJkOTJhNTI0ZWFiYzZlZTA4YjFhMWVlNDQ1YTQyZjBhLi45NjkyMjcxZjQ3N2UxNjI3
NGI4NDNkZjE1OGFjZTI1NGI1MWI5ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzQwOCw2ICszNDA4LDcgQEAgc3Vi
IEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MKIHsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogICAg
IHJldHVybiAiY29uc3QgU3RyaW5nJiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0
dXJuICJTZXJpYWxpemVkU2NyaXB0VmFsdWUqIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlIjsKIAogICAgICMgQ2FsbGJhY2tzIHVzZSByYXcgcG9pbnRlcnMsIHNvIHBhc3MgaXNQ
YXJhbWV0ZXIgPSAxCiAgICAgcmV0dXJuIEdldE5hdGl2ZVR5cGUoJHR5cGUsIDEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCAyOGFhNmQ2NWUzMzFhZTkw
MDVmOTc0Y2FjNDI3MmI4ZTBkNmIzMzk0Li4zNWM2ODliMjJhNjUwOWNmZTAxZDMxYTE2MTFlOGQ0
Y2VkMjMyY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaApA
QCAtNzgsNiArNzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICBjbGFzcyBI
VE1MUGx1Z0luRWxlbWVudDsKICAgICBjbGFzcyBJbnRTaXplOworI2lmIEVOQUJMRShXRUJfSU5U
RU5UUykKKyAgICBjbGFzcyBJbnRlbnRSZXF1ZXN0OworI2VuZGlmCiAgICAgY2xhc3MgS1VSTDsK
ICAgICBjbGFzcyBNZXNzYWdlRXZlbnQ7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKQEAg
LTMyMyw2ICszMjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZW1iZWRkZXIgaW50ZXJjZXB0ZWQgdGhlIHBvc3RNZXNzYWdlIGNhbGwK
ICAgICAgICAgdmlydHVhbCBib29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KFNl
Y3VyaXR5T3JpZ2luKiAvKnRhcmdldCovLCBNZXNzYWdlRXZlbnQqKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hJbnRlbnQoUGFzc1JlZlB0cjxJbnRlbnRSZXF1ZXN0PiBpbnRlbnRSZXF1ZXN0KSB7
IH0KKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3YmI0
YmFmMDAxY2I2YzhkNmFjOTM5MmY5NzQxNzU1MDNiNTAyZGJjLi44ZGY5ZDdmNDdkMDU5MzJkZTU1
MjdjMTdiNzc4ODBjZDU0YjgxYWFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMDYg
IEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5OyBhZGQgSW50ZW50c0NvbnRyb2xsZXIgZm9yIG1hbmFn
aW5nIHdlYiBpbnRlbnRzIGNhbGxiYWNrcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTAxLTA5ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb25zLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0
CmluZGV4IGQyZWFmZDE2N2ZhNmMwMzRjZTQzNGRjNjM1MTBlNDJlZDVjNjEwMWEuLmNhZmI0N2Mx
YTIwMmU3NWMzZWZjMGFhZmVmYTU0MzJiZTI3MzExOGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAgLTEsMyArMSw0IEBA
CitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IGlzIGRlZmluZWQuCiBQQVNTIHZhciBpbnRl
bnQgPSBuZXcgSW50ZW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBh
cmd1bWVudHMuCiBQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KIFBBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgpAQCAtMjUsNiAr
MjYsNyBAQCBQQVNTIGludGVudDYuZGF0YSBpcyA0LjUKIFBBU1MgaW50ZW50Ny5kYXRhIGlzIHRy
dWUKIFBBU1MgaW50ZW50OC5kYXRhIGlzIG51bGwKIFBBU1MgaW50ZW50OS5kYXRhID09ICdbb2Jq
ZWN0IE9iamVjdF0nIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50
MSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRp
b24gMTUuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCmluZGV4IDgwNDI2
YjA4NTQwNjBkYzdjZTRjNzBmNzlmMGQyMDVjYWI0OTBjMGIuLmE2MjRmM2RhZWQ5NGRhY2VmZjhh
N2U2ZmY1MTE0ZmQ5MDk3MTlmM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmludGVudHMv
d2ViLWludGVudHMtYXBpLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1hcGkuaHRtbApAQCAtNSw4ICs1LDkgQEAKIDwvaGVhZD4KIDxib2R5PgogPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgc2hvdWxkQmVEZWZpbmVkKCJuYXZpZ2F0b3Iu
c3RhcnRBY3Rpdml0eSIpOworICAgICAgCiAgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9
IG5ldyBJbnRlbnQoKSIsICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7Ci0K
ICAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVu
b3VnaCBhcmd1bWVudHMnIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywn
JykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOwogICAgICAgc2hv
dWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBE
T00gRXhjZXB0aW9uIDEyJyIpOwpAQCAtNDgsNiArNDksOCBAQAogICAgICAgc2hvdWxkQmVOdWxs
KCdpbnRlbnQ4LmRhdGEnKTsKICAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdi
Jywge30pOwogICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworCisg
ICAgICBzaG91bGRUaHJvdygnbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkoaW50ZW50MSknLCAiJ0Vy
cm9yOiBJTlZBTElEX0FDQ0VTU19FUlI6IERPTSBFeGNlcHRpb24gMTUnIik7CiA8L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121770</attachid>
            <date>2012-01-09 17:33:09 -0800</date>
            <delta_ts>2012-01-09 17:48:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109173308.patch</filename>
            <type>text/plain</type>
            <size>25539</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uNmFjNGVmMDNhYWQ2MGVlZDlhOWVhZGYwOTZhNjlm
Y2UxZDBlZDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudFJlcXVlc3Qgb2JqZWN0IGZvciBtYW5hZ2lu
ZyB3ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIFdlYiBjb250ZW50IHdpbGwgaW52b2tl
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IHRvIGxhdW5jaCBhIG5ldyBXZWIKKyAgICAgICAgSW50
ZW50cyBjYWxsLiBFYWNoIHN1Y2ggY2FsbCB3aWxsIG1hcCB0byBhbiBJbnRlbnRSZXF1ZXN0IGJy
b2tlcgorICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdXNlZCBieSBjbGllbnQgY29kZSB0byBjb3Jy
ZWxhdGUgYW55IHJldHVybiBkYXRhIHRvCisgICAgICAgIHRoZSAob3B0aW9uYWwpIGNhbGxiYWNr
cyBzdXBwbGllZCBieSB3ZWIgY29udGVudCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0SWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxs
YmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0Lmg6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoSW50ZW50KToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQx
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMWVkZmI1YWQ5ZTg2NWNkZjdlZGY0ZGVkYTk0MDYzNWQyYjdjYmE4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
cXVlc3QuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
dGVudFJlcXVlc3QuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEludGVudFJlcXVlc3Q+IElu
dGVudFJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxJ
bnRlbnQ+IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnRlbnRSZXF1ZXN0KGNvbnRleHQsIGludGVudCwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7Cit9CisKK0ludGVudFJlcXVlc3Q6OkludGVudFJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbnQ+IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisg
ICAgLCBtX2ludGVudChpbnRlbnQpCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2Fs
bGJhY2spCisgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKK3sKKyAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6Y29udGV4dERl
c3Ryb3llZCgpCit7CisgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OmNvbnRleHREZXN0
cm95ZWQoKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOworICAgIG1fZXJyb3JDYWxs
YmFjay5jbGVhcigpOworfQorCit2b2lkIEludGVudFJlcXVlc3Q6OnN0b3AoKQoreworICAgIGNv
bnRleHREZXN0cm95ZWQoKTsKK30KKwordm9pZCBJbnRlbnRSZXF1ZXN0Ojpwb3N0UmVzdWx0KFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSkKK3sKKyAgICAvLyBDYWxsYmFjayBjb3VsZCBsZWFk
IHRvIGRlbGV0aW9uIG9mIHRoaXMuCisgICAgUmVmUHRyPEludGVudFJlcXVlc3Q+IHByb3RlY3Rv
cih0aGlzKTsKKworICAgIGlmICghbV9zdWNjZXNzQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChkYXRhKTsKKworICAgIG1fc3Vj
Y2Vzc0NhbGxiYWNrLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrLmNsZWFyKCk7CisgICAg
dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6cG9z
dEZhaWx1cmUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKQoreworICAgIC8vIENhbGxiYWNr
IGNvdWxkIGxlYWQgdG8gZGVsZXRpb24gb2YgdGhpcy4KKyAgICBSZWZQdHI8SW50ZW50UmVxdWVz
dD4gcHJvdGVjdG9yKHRoaXMpOworCisgICAgaWYgKCFtX2Vycm9yQ2FsbGJhY2spCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZGF0YSk7CisKKyAg
ICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFjay5jbGVhcigp
OworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTgwOWE5OGU3
NjAxNzg4ZTQzM2Y3NzU3NWE4YjdkMGRhNmVmM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3QuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUs
IEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnRlbnRSZXF1ZXN0X2gKKyNkZWZpbmUgSW50ZW50UmVxdWVzdF9oCisKKyNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEludGVu
dFJlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXF1ZXN0PiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50UmVxdWVz
dD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEludGVudD4sIFBh
c3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICBJbnRlbnQqIGlu
dGVudCgpIHsgcmV0dXJuIG1faW50ZW50LmdldCgpOyB9CisKKyAgICB2b2lkIHBvc3RSZXN1bHQo
U2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisgICAgdm9pZCBwb3N0RmFpbHVyZShTZXJpYWxpemVk
U2NyaXB0VmFsdWUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOworCitwcml2YXRlOgor
ICAgIEludGVudFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SW50
ZW50PiwgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKworICAgIFJl
ZlB0cjxJbnRlbnQ+IG1faW50ZW50OworICAgIFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
bV9zdWNjZXNzQ2FsbGJhY2s7CisgICAgUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBtX2Vy
cm9yQ2FsbGJhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisj
ZW5kaWYgLy8gSW50ZW50UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0Y2RlYjA0OTAy
NjI2MjliNzNmNmE2OGFjYWFlY2FkYmNlNDBlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJbnRlbnRSZXN1bHRDYWxsYmFja19oCisjZGVmaW5lIEludGVudFJlc3VsdENh
bGxiYWNrX2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2Fs
bGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXN1bHRDYWxsYmFjaz4geworcHVibGlj
OgorICAgIHZpcnR1YWwgfkludGVudFJlc3VsdENhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0KSA9IDA7Cit9Owor
Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50UmVzdWx0Q2FsbGJhY2tfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNr
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFj
ay5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmViNGEzY2M2YTU5MGYzOTM2ZGU1OTVjNTExYTRlZTcwMWE1NTdm
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnRSZXN1bHRDYWxsYmFjay5pZGwKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5k
b3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAg
ICBDYWxsYmFjaz1GdW5jdGlvbk9ubHkKKyAgXSBJbnRlbnRSZXN1bHRDYWxsYmFjayB7CisgICAg
ICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSByZXN1bHQpOwor
ICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmln
YXRvckludGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRv
ckludGVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1NjM2ZmQ3ODgxZWUwOWIyMjMyZDg2NmVmZWUxMDUy
Nzc4ZTg4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvTmF2aWdhdG9ySW50ZW50cy5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvckludGVudHMuaCIKKworI2lm
IEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkludGVudC5o
IgorI2luY2x1ZGUgIkludGVudFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxs
YmFjay5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXZpZ2F0b3JJbnRlbnRzOjpOYXZpZ2F0
b3JJbnRlbnRzKCkKK3sKK30KKworTmF2aWdhdG9ySW50ZW50czo6fk5hdmlnYXRvckludGVudHMo
KQoreworfQorCit2b2lkIE5hdmlnYXRvckludGVudHM6OnN0YXJ0QWN0aXZpdHkoTmF2aWdhdG9y
KiBuYXZpZ2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxJbnRlbnQ+IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW5hdmlnYXRvci0+ZnJhbWUoKSB8
fCAhaW50ZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50ZW50LT5hY3Rpb24oKS5pc0VtcHR5KCkgfHwgaW50
ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gVkFMSURBVElPTl9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEludGVudFJlcXVlc3Q+IHJlcXVl
c3QgPSBJbnRlbnRSZXF1ZXN0OjpjcmVhdGUobmF2aWdhdG9yLT5mcmFtZSgpLT5kb2N1bWVudCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVudCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBuYXZpZ2F0
b3ItPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQocmVxdWVzdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5U
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0
b3JJbnRlbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50
ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFmMjI3YzI2MDIxMzJhMGYyOTNiMTc2ODIwNzc1MTU4OTkyYTVm
YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2
aWdhdG9ySW50ZW50cy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYg
TmF2aWdhdG9ySW50ZW50c19oCisjZGVmaW5lIE5hdmlnYXRvckludGVudHNfaAorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRlbnQ7CitjbGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFj
azsKK2NsYXNzIE5hdmlnYXRvcjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgTmF2aWdhdG9ySW50ZW50cyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc3RhcnRBY3Rp
dml0eShOYXZpZ2F0b3IqLCBQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8SW50ZW50UmVz
dWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIE5h
dmlnYXRvckludGVudHMoKTsKKyAgICB+TmF2aWdhdG9ySW50ZW50cygpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjZW5k
aWYgLy8gTmF2aWdhdG9ySW50ZW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU1ZjU4ZTFhYzY5ZmUz
MDEyNDAyOWY5YjkxYzBmOTM0NmFlMzQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmlkbApAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9u
YWw9V0VCX0lOVEVOVFMsCisgICAgICAgIFN1cHBsZW1lbnRhbD1OYXZpZ2F0b3IKKyAgICBdIE5h
dmlnYXRvckludGVudHMgeworICAgICAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50IGlu
dGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9u
bHksIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBbQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5LCBPcHRpb25h
bF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorICAgICAgICAgICAgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDNiYTRi
OTEyN2U4OWI3ZDE0ZDJkMDg1ZDQ1ZTc1MTc1MWNhYzZhN2YuLmE1M2ExMWUwMTEwYWM2ZDM4OWY2
MjI4ZDVlMWZkZjRiY2I5OGQzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTExNTAsNiArMTE1MCw4
IEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmlkbCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9p
bnRlbnRzL05hdmlnYXRvckludGVudHMuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTQ2hhcnNl
dFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCcsCiAgICAg
ICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTgsNiArMTcwMCwxMSBAQAog
ICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVz
L2ludGVudHMvSW50ZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRS
ZXF1ZXN0LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlcXVlc3Qu
aCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgn
LAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmNwcCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuaCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAnYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwJywKICAgICAgICAgICAgICdhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggMjVkNjk2MGMyZDky
YTUyNGVhYmM2ZWUwOGIxYTFlZTQ0NWE0MmYwYS4uOTY5MjI3MWY0NzdlMTYyNzRiODQzZGYxNThh
Y2UyNTRiNTFiOTgyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTM0MDgsNiArMzQwOCw3IEBAIHN1YiBHZXROYXRpdmVU
eXBlRm9yQ2FsbGJhY2tzCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gImNv
bnN0IFN0cmluZyYiIGlmICR0eXBlIGVxICJET01TdHJpbmciOworICAgIHJldHVybiAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiIgaWYgJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7CiAK
ICAgICAjIENhbGxiYWNrcyB1c2UgcmF3IHBvaW50ZXJzLCBzbyBwYXNzIGlzUGFyYW1ldGVyID0g
MQogICAgIHJldHVybiBHZXROYXRpdmVUeXBlKCR0eXBlLCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKaW5kZXggMjhhYTZkNjVlMzMxYWU5MDA1Zjk3NGNhYzQy
NzJiOGUwZDZiMzM5NC4uMzVjNjg5YjIyYTY1MDljZmUwMWQzMWExNjExZThkNGNlZDIzMmNiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTc4LDYgKzc4
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQ7CiAgICAgY2xhc3MgSW50U2l6ZTsKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAg
Y2xhc3MgSW50ZW50UmVxdWVzdDsKKyNlbmRpZgogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3Mg
TWVzc2FnZUV2ZW50OwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CkBAIC0zMjMsNiArMzI2
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGVtYmVkZGVyIGludGVyY2VwdGVkIHRoZSBwb3N0TWVzc2FnZSBjYWxsCiAgICAgICAgIHZp
cnR1YWwgYm9vbCB3aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChTZWN1cml0eU9yaWdp
biogLyp0YXJnZXQqLywgTWVzc2FnZUV2ZW50KikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
I2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoSW50
ZW50KFBhc3NSZWZQdHI8SW50ZW50UmVxdWVzdD4gaW50ZW50UmVxdWVzdCkgeyB9CisjZW5kaWYK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2JiNGJhZjAwMWNiNmM4
ZDZhYzkzOTJmOTc0MTc1NTAzYjUwMmRiYy4uOGRmOWQ3ZjQ3ZDA1OTMyZGU1NTI3YzE3Yjc3ODgw
Y2Q1NGI4MWFhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTA2ICBHcmVnIEJpbGxv
Y2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZpZ2F0b3Iu
c3RhcnRBY3Rpdml0eTsgYWRkIEludGVudHNDb250cm9sbGVyIGZvciBtYW5hZ2luZyB3ZWIgaW50
ZW50cyBjYWxsYmFja3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NTc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMS0wOSAgSm9obiBLbm90dGVuYmVsdCAgPGprbm90dGVuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFVwZGF0ZSB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAppbmRleCBkMmVh
ZmQxNjdmYTZjMDM0Y2U0MzRkYzYzNTEwZTQyZWQ1YzYxMDFhLi5jYWZiNDdjMWEyMDJlNzVjM2Vm
YzBhYWZlZmE1NDMyYmUyNzMxMThiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50
cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsNCBAQAorUEFTUyBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgogUEFTUyB2YXIgaW50ZW50ID0gbmV3IElu
dGVudCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgog
UEFTUyBuZXcgSW50ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCiBQQVNTIG5ldyBJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KQEAgLTI1LDYgKzI2LDcgQEAgUEFT
UyBpbnRlbnQ2LmRhdGEgaXMgNC41CiBQQVNTIGludGVudDcuZGF0YSBpcyB0cnVlCiBQQVNTIGlu
dGVudDguZGF0YSBpcyBudWxsCiBQQVNTIGludGVudDkuZGF0YSA9PSAnW29iamVjdCBPYmplY3Rd
JyBpcyB0cnVlCitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5KGludGVudDEpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9BQ0NFU1NfRVJSOiBET00gRXhjZXB0aW9uIDE1LgogUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAppbmRleCA4MDQyNmIwODU0MDYwZGM3
Y2U0YzcwZjc5ZjBkMjA1Y2FiNDkwYzBiLi5hNjI0ZjNkYWVkOTRkYWNlZmY4YTdlNmZmNTExNGZk
OTA5NzE5ZjNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LWFwaS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0
bWwKQEAgLTUsOCArNSw5IEBACiA8L2hlYWQ+CiA8Ym9keT4KIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgICAgIHNob3VsZEJlRGVmaW5lZCgibmF2aWdhdG9yLnN0YXJ0QWN0aXZp
dHkiKTsKKyAgICAgIAogICAgICAgc2hvdWxkVGhyb3coInZhciBpbnRlbnQgPSBuZXcgSW50ZW50
KCkiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7OwotCiAgICAgICBzaG91
bGRUaHJvdygibmV3IEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1l
bnRzJyIpOwogICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycsJycpIiwgIidFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKICAgICAgIHNob3VsZFRocm93KCJu
ZXcgSW50ZW50KCcnLCdiJywnYycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMiciKTsKQEAgLTQ4LDYgKzQ5LDggQEAKICAgICAgIHNob3VsZEJlTnVsbCgnaW50ZW50OC5k
YXRhJyk7CiAgICAgICB2YXIgaW50ZW50OSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHt9KTsKICAg
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDkuZGF0YScsIHt9KTsKKworICAgICAgc2hvdWxk
VGhyb3coJ25hdmlnYXRvci5zdGFydEFjdGl2aXR5KGludGVudDEpJywgIidFcnJvcjogSU5WQUxJ
RF9BQ0NFU1NfRVJSOiBET00gRXhjZXB0aW9uIDE1JyIpOwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwvYm9k
eT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121773</attachid>
            <date>2012-01-09 17:48:32 -0800</date>
            <delta_ts>2012-01-09 18:29:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75756-20120109174831.patch</filename>
            <type>text/plain</type>
            <size>25576</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk3NTQ4NGYwY2M1ZTk1
MjZmNTEwYmFkOWEyMDhhZjg2M2ZmZjliZC4uNmFjNGVmMDNhYWQ2MGVlZDlhOWVhZGYwOTZhNjlm
Y2UxZDBlZDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAxLTA2ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eTsgYWRkIEludGVudFJlcXVlc3Qgb2JqZWN0IGZvciBtYW5hZ2lu
ZyB3ZWIgaW50ZW50cyBjYWxsYmFja3MuCisgICAgICAgIFdlYiBjb250ZW50IHdpbGwgaW52b2tl
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5IHRvIGxhdW5jaCBhIG5ldyBXZWIKKyAgICAgICAgSW50
ZW50cyBjYWxsLiBFYWNoIHN1Y2ggY2FsbCB3aWxsIG1hcCB0byBhbiBJbnRlbnRSZXF1ZXN0IGJy
b2tlcgorICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdXNlZCBieSBjbGllbnQgY29kZSB0byBjb3Jy
ZWxhdGUgYW55IHJldHVybiBkYXRhIHRvCisgICAgICAgIHRoZSAob3B0aW9uYWwpIGNhbGxiYWNr
cyBzdXBwbGllZCBieSB3ZWIgY29udGVudCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbAorCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0SWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxs
YmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0LmNwcDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudHNSZXF1ZXN0Lmg6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAg
ICAgICAgKEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoSW50ZW50KToKKwogMjAxMi0wMS0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNDQx
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZWNhNGFmMjk2ZDFkZGMwYjljMDg5OWMyYjg2YTg2MTRjMmUxZGIwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
cXVlc3QuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
dGVudFJlcXVlc3QuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEludGVudFJlcXVlc3Q+IElu
dGVudFJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxJ
bnRlbnQ+IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnRlbnRSZXF1ZXN0KGNvbnRleHQsIGludGVudCwgc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKSk7Cit9CisKK0ludGVudFJlcXVlc3Q6OkludGVudFJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbnQ+IGludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBlcnJvckNhbGxiYWNrKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisg
ICAgLCBtX2ludGVudChpbnRlbnQpCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2Fs
bGJhY2spCisgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKK3sKKyAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6Y29udGV4dERl
c3Ryb3llZCgpCit7CisgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OmNvbnRleHREZXN0
cm95ZWQoKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOworICAgIG1fZXJyb3JDYWxs
YmFjay5jbGVhcigpOworfQorCit2b2lkIEludGVudFJlcXVlc3Q6OnN0b3AoKQoreworICAgIG1f
c3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrLmNsZWFyKCk7Cit9
CisKK3ZvaWQgSW50ZW50UmVxdWVzdDo6cG9zdFJlc3VsdChTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IGRhdGEpCit7CisgICAgLy8gQ2FsbGJhY2sgY291bGQgbGVhZCB0byBkZWxldGlvbiBvZiB0aGlz
LgorICAgIFJlZlB0cjxJbnRlbnRSZXF1ZXN0PiBwcm90ZWN0b3IodGhpcyk7CisKKyAgICBpZiAo
IW1fc3VjY2Vzc0NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQoZGF0YSk7CisKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigp
OworICAgIG1fZXJyb3JDYWxsYmFjay5jbGVhcigpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworfQorCit2b2lkIEludGVudFJlcXVlc3Q6OnBvc3RGYWlsdXJlKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogZGF0YSkKK3sKKyAgICAvLyBDYWxsYmFjayBjb3VsZCBsZWFkIHRvIGRlbGV0
aW9uIG9mIHRoaXMuCisgICAgUmVmUHRyPEludGVudFJlcXVlc3Q+IHByb3RlY3Rvcih0aGlzKTsK
KworICAgIGlmICghbV9lcnJvckNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Vy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGRhdGEpOworCisgICAgbV9zdWNjZXNzQ2FsbGJhY2su
Y2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2suY2xlYXIoKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bnRlbnRzL0ludGVudFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnRSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E4MDlhOThlNzYwMTc4OGU0MzNmNzc1NzVhOGI3
ZDBkYTZlZjNkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnRSZXF1ZXN0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50UmVxdWVzdF9o
CisjZGVmaW5lIEludGVudFJlcXVlc3RfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisjaW5jbHVk
ZSAiSW50ZW50UmVzdWx0Q2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBJbnRlbnRSZXF1ZXN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW50ZW50UmVxdWVzdD4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudFJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJbnRlbnQ+LCBQYXNzUmVmUHRyPEludGVudFJlc3Vs
dENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgSW50ZW50KiBpbnRlbnQoKSB7IHJldHVybiBtX2lu
dGVudC5nZXQoKTsgfQorCisgICAgdm9pZCBwb3N0UmVzdWx0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSopOworICAgIHZvaWQgcG9zdEZhaWx1cmUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgpIE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHN0b3AoKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnRSZXF1ZXN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8SW50
ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1
bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICBSZWZQdHI8SW50ZW50PiBtX2ludGVu
dDsKKyAgICBSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwor
ICAgIFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudFJlcXVl
c3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
c3VsdENhbGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVz
dWx0Q2FsbGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGNkZWIwNDkwMjYyNjI5YjczZjZhNjhhY2FhZWNh
ZGJjZTQwZTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50UmVz
dWx0Q2FsbGJhY2tfaAorI2RlZmluZSBJbnRlbnRSZXN1bHRDYWxsYmFja19oCisKKyNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CisKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrIDogcHVibGljIFJlZkNv
dW50ZWQ8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnRl
bnRSZXN1bHRDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChTZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHJlc3VsdCkgPSAwOworfTsKKworfQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIEludGVudFJlc3VsdENhbGxiYWNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZl
YjRhM2NjNmE1OTBmMzkzNmRlNTk1YzUxMWE0ZWU3MDFhNTU3ZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRs
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKyAgaW50ZXJmYWNlIFsK
KyAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgQ2FsbGJhY2s9RnVuY3Rpb25P
bmx5CisgIF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgeworICAgICAgYm9vbGVhbiBoYW5kbGVFdmVu
dChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgcmVzdWx0KTsKKyAgfTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNTYzNmZkNzg4MWVlMDliMjIzMmQ4NjZlZmVlMTA1Mjc3OGU4OGM0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMu
Y3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOYXZpZ2F0b3JJbnRlbnRzLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW50ZW50UmVzdWx0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJO
YXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworTmF2aWdhdG9ySW50ZW50czo6TmF2aWdhdG9ySW50ZW50cygpCit7Cit9CisK
K05hdmlnYXRvckludGVudHM6On5OYXZpZ2F0b3JJbnRlbnRzKCkKK3sKK30KKwordm9pZCBOYXZp
Z2F0b3JJbnRlbnRzOjpzdGFydEFjdGl2aXR5KE5hdmlnYXRvciogbmF2aWdhdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW50ZW50PiBpbnRlbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxJbnRlbnRS
ZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFuYXZpZ2F0b3ItPmZyYW1lKCkgfHwgIWludGVudCkgeworICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGludGVudC0+YWN0aW9uKCkuaXNFbXB0eSgpIHx8IGludGVudC0+dHlwZSgpLmlzRW1wdHko
KSkgeworICAgICAgICBlYyA9IFZBTElEQVRJT05fRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkg
eworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxJbnRlbnRSZXF1ZXN0PiByZXF1ZXN0ID0gSW50ZW50UmVxdWVzdDo6
Y3JlYXRlKG5hdmlnYXRvci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgbmF2aWdhdG9yLT5mcmFtZSgpLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmRpc3BhdGNoSW50ZW50KHJlcXVlc3QpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZjIyN2MyNjAyMTMyYTBmMjkzYjE3NjgyMDc3NTE1ODk5MmE1ZmJjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvckludGVudHMuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5hdmlnYXRvckludGVudHNfaAor
I2RlZmluZSBOYXZpZ2F0b3JJbnRlbnRzX2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSW50ZW50OworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2s7CitjbGFzcyBOYXZpZ2F0b3I7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIE5hdmlnYXRvckludGVudHMg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoTmF2aWdhdG9yKiwgUGFz
c1JlZlB0cjxJbnRlbnQ+LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
IEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBOYXZpZ2F0b3JJbnRlbnRzKCk7Cisg
ICAgfk5hdmlnYXRvckludGVudHMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKKworI2VuZGlmIC8vIE5hdmlnYXRvckludGVu
dHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRv
ckludGVudHMuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL05hdmlnYXRvcklu
dGVudHMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NWY1OGUxYWM2OWZlMzAxMjQwMjlmOWI5MWMwZjkzNDZh
ZTM0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
TmF2aWdhdG9ySW50ZW50cy5pZGwKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAg
ICAgICBTdXBwbGVtZW50YWw9TmF2aWdhdG9yCisgICAgXSBOYXZpZ2F0b3JJbnRlbnRzIHsKKyAg
ICAgICAgdm9pZCBzdGFydEFjdGl2aXR5KGluIEludGVudCBpbnRlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBbQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5LCBPcHRpb25hbF0gSW50ZW50
UmVzdWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gW0NhbGxiYWNrPUZ1bmN0aW9uT25seSwgT3B0aW9uYWxdIEludGVudFJlc3VsdENhbGxi
YWNrIGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwor
ICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzYmE0YjkxMjdlODliN2QxNGQyZDA4NWQ0
NWU3NTE3NTFjYWM2YTdmLi5hNTNhMTFlMDExMGFjNmQzODlmNjIyOGQ1ZTFmZGY0YmNiOThkM2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMTUwLDYgKzExNTAsOCBAQAogICAgICAgICAgICAgJ01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2Ft
ZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRD
YWxsYmFjay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0b3JJbnRl
bnRzLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCcsCiAgICAgICAg
ICAgICAnY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NJbXBv
cnRSdWxlLmlkbCcsCkBAIC0xNjk4LDYgKzE3MDAsMTEgQEAKICAgICAgICAgICAgICdNb2R1bGVz
L2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVxdWVzdC5jcHAnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXF1ZXN0LmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50cy5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW50ZW50cy9OYXZpZ2F0b3JJbnRlbnRzLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5QVJJQUdyaWQuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDI1ZDY5NjBjMmQ5MmE1MjRlYWJjNmVlMDhiMWExZWU0
NDVhNDJmMGEuLjk2OTIyNzFmNDc3ZTE2Mjc0Yjg0M2RmMTU4YWNlMjU0YjUxYjk4MmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CkBAIC0zNDA4LDYgKzM0MDgsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcwogewog
ICAgIG15ICR0eXBlID0gc2hpZnQ7CiAgICAgcmV0dXJuICJjb25zdCBTdHJpbmcmIiBpZiAkdHlw
ZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoiIGlm
ICR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiOwogCiAgICAgIyBDYWxsYmFja3MgdXNl
IHJhdyBwb2ludGVycywgc28gcGFzcyBpc1BhcmFtZXRlciA9IDEKICAgICByZXR1cm4gR2V0TmF0
aXZlVHlwZSgkdHlwZSwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCmluZGV4IDI4YWE2ZDY1ZTMzMWFlOTAwNWY5NzRjYWM0MjcyYjhlMGQ2YjMzOTQuLjM1YzY4
OWIyMmE2NTA5Y2ZlMDFkMzFhMTYxMWU4ZDRjZWQyMzJjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC03OCw2ICs3OCw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbmRpZgogICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogICAgIGNsYXNzIElu
dFNpemU7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIGNsYXNzIEludGVudFJlcXVlc3Q7
CisjZW5kaWYKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE1lc3NhZ2VFdmVudDsKICAgICBj
bGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwpAQCAtMzIzLDYgKzMyNiwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBlbWJlZGRlciBpbnRlcmNl
cHRlZCB0aGUgcG9zdE1lc3NhZ2UgY2FsbAogICAgICAgICB2aXJ0dWFsIGJvb2wgd2lsbENoZWNr
QW5kRGlzcGF0Y2hNZXNzYWdlRXZlbnQoU2VjdXJpdHlPcmlnaW4qIC8qdGFyZ2V0Ki8sIE1lc3Nh
Z2VFdmVudCopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVO
VFMpCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEludGVudChQYXNzUmVmUHRyPEludGVu
dFJlcXVlc3Q+IGludGVudFJlcXVlc3QpIHsgfQorI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdiYjRiYWYwMDFjYjZjOGQ2YWM5MzkyZjk3NDE3NTUwM2I1
MDJkYmMuLjhkZjlkN2Y0N2QwNTkzMmRlNTUyN2MxN2I3Nzg4MGNkNTRiODFhYWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMi0wMS0wNiAgR3JlZyBCaWxsb2NrICA8Z2JpbGxvY2tAZ29vZ2xl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHk7IGFkZCBJ
bnRlbnRzQ29udHJvbGxlciBmb3IgbWFuYWdpbmcgd2ViIGludGVudHMgY2FsbGJhY2tzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3NTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmludGVudHMv
d2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViaW50ZW50
cy93ZWItaW50ZW50cy1hcGkuaHRtbDogQWRkZWQuCisKIDIwMTItMDEtMDkgIEpvaG4gS25vdHRl
bmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVcGRh
dGUgdGVzdCBleHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRz
L3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dl
Yi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKaW5kZXggZDJlYWZkMTY3ZmE2YzAzNGNlNDM0ZGM2
MzUxMGU0MmVkNWM2MTAxYS4uY2FmYjQ3YzFhMjAyZTc1YzNlZmMwYWFmZWZhNTQzMmJlMjczMTE4
YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4
cGVjdGVkLnR4dApAQCAtMSwzICsxLDQgQEAKK1BBU1MgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkg
aXMgZGVmaW5lZC4KIFBBU1MgdmFyIGludGVudCA9IG5ldyBJbnRlbnQoKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KIFBBU1MgbmV3IEludGVudCgnYScp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUyBu
ZXcgSW50ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCkBAIC0yNSw2ICsyNiw3IEBAIFBBU1MgaW50ZW50Ni5kYXRhIGlzIDQu
NQogUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQogUEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVsbAog
UEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBuYXZp
Z2F0b3Iuc3RhcnRBY3Rpdml0eShpbnRlbnQxKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFM
SURfQUNDRVNTX0VSUjogRE9NIEV4Y2VwdGlvbiAxNS4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50
ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtYXBpLmh0bWwKaW5kZXggODA0MjZiMDg1NDA2MGRjN2NlNGM3MGY3OWYwZDIwNWNhYjQ5
MGMwYi4uYTYyNGYzZGFlZDk0ZGFjZWZmOGE3ZTZmZjUxMTRmZDkwOTcxOWYzZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC01LDggKzUsOSBAQAog
PC9oZWFkPgogPGJvZHk+CiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICBz
aG91bGRCZURlZmluZWQoIm5hdmlnYXRvci5zdGFydEFjdGl2aXR5Iik7CisgICAgICAKICAgICAg
IHNob3VsZFRocm93KCJ2YXIgaW50ZW50ID0gbmV3IEludGVudCgpIiwgIidUeXBlRXJyb3I6IE5v
dCBlbm91Z2ggYXJndW1lbnRzJyIpOzsKLQogICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQo
J2EnKSIsICInVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTsKICAgICAgIHNob3Vs
ZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCcnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTInIik7CiAgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnYicsJ2Mn
KSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CkBAIC00OCw2ICs0
OSw4IEBACiAgICAgICBzaG91bGRCZU51bGwoJ2ludGVudDguZGF0YScpOwogICAgICAgdmFyIGlu
dGVudDkgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB7fSk7CiAgICAgICBzaG91bGRFdmFsdWF0ZVRv
KCdpbnRlbnQ5LmRhdGEnLCB7fSk7CisKKyAgICAgIHNob3VsZFRocm93KCduYXZpZ2F0b3Iuc3Rh
cnRBY3Rpdml0eShpbnRlbnQxKScsICInRXJyb3I6IElOVkFMSURfQUNDRVNTX0VSUjogRE9NIEV4
Y2VwdGlvbiAxNSciKTsKIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>