<?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>81667</bug_id>
          
          <creation_ts>2012-03-20 08:23:08 -0700</creation_ts>
          <short_desc>Speech JavaScript API: Plumbing for Chromium</short_desc>
          <delta_ts>2012-04-04 03:57:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>83126</dependson>
          <blocked>80261</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>primiano</cc>
    
    <cc>satish</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>583084</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-20 08:23:08 -0700</bug_when>
    <thetext>Speech JavaScript API: Plumbing for Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583099</commentid>
    <comment_count>1</comment_count>
      <attachid>132832</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-20 08:38:11 -0700</bug_when>
    <thetext>Created attachment 132832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583103</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 08:40:55 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583105</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-20 08:42:10 -0700</bug_when>
    <thetext>I&apos;ve uploaded this as a single patch so it&apos;s easy to see how it all fits together. The bulk of the patch is in SpeechRecognitionProxy. If desired, I could break out the other wrapper classes to a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583360</commentid>
    <comment_count>4</comment_count>
      <attachid>132832</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-20 12:41:54 -0700</bug_when>
    <thetext>Comment on attachment 132832
Patch

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

&gt; Source/WebKit/chromium/public/WebSpeechGrammar.h:45
&gt; +    WEBKIT_EXPORT WebURL src() const;

nit: src -&gt; sourceURL ?

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:46
&gt; +    virtual void visibilityHidden() { WEBKIT_ASSERT_NOT_REACHED(); }

is visibilityHidden a command?  it seems like it is a notification about the visibility state changing to hidden?

&gt; Source/WebKit/chromium/public/WebViewClient.h:320
&gt; +    // Scripted speech -----------------------------------------------------

does scripted speech really require a different section?  can we just extend
the &quot;Speech&quot; section?

&gt; Source/WebKit/chromium/public/WebViewClient.h:323
&gt; +    virtual WebSpeechRecognitionClient* speechRecognitionClient() { return 0; }

is the caller expected to delete this pointer when they are done with it?  i&apos;m guessing
the answer is NO since this function is not named &quot;createFoo&quot;.  assuming the answer is
NO, then WebSpeechRecognitionClient should have a protected destructor to prevent unwanted
deletion through this pointer.

&gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:50
&gt; +    if (!m_recognitionMap.contains(recognition)) {

usually we put ID maps like this on the chromium side?  does WebKit need
this map?  it seems like it might be better to create an API wrapper for
WebSpeechRecognition instead.

the WebKit API is supposed to be a thin layer between chromium and webcore.
if chromium needs IDs for IPC purposes, then that is a chromium concern,
not a webkit concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584138</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-21 08:09:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 132832 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132832&amp;action=review

Thank you very much for the review!

&gt; &gt; Source/WebKit/chromium/public/WebSpeechGrammar.h:45
&gt; &gt; +    WEBKIT_EXPORT WebURL src() const;
&gt; 
&gt; nit: src -&gt; sourceURL ?

It&apos;s called src() in the wrapped object, which in turn matches the IDL.
I&apos;m happy to rename if you think sourceURL is preferable, though.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:46
&gt; &gt; +    virtual void visibilityHidden() { WEBKIT_ASSERT_NOT_REACHED(); }
&gt; 
&gt; is visibilityHidden a command?  it seems like it is a notification about the visibility state changing to hidden?

You&apos;re right. Renaming to notifyVisibilityHidden(). Happy to accept better naming suggestions too :)

&gt; &gt; Source/WebKit/chromium/public/WebViewClient.h:320
&gt; &gt; +    // Scripted speech -----------------------------------------------------
&gt; 
&gt; does scripted speech really require a different section?  can we just extend
&gt; the &quot;Speech&quot; section?

Done, putting it in the existing speech section.

&gt; &gt; Source/WebKit/chromium/public/WebViewClient.h:323
&gt; &gt; +    virtual WebSpeechRecognitionClient* speechRecognitionClient() { return 0; }
&gt; 
&gt; is the caller expected to delete this pointer when they are done with it?  i&apos;m guessing
&gt; the answer is NO since this function is not named &quot;createFoo&quot;.  assuming the answer is
&gt; NO, then WebSpeechRecognitionClient should have a protected destructor to prevent unwanted
&gt; deletion through this pointer.

Nice catch! Done.

&gt; &gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:50
&gt; &gt; +    if (!m_recognitionMap.contains(recognition)) {
&gt; 
&gt; usually we put ID maps like this on the chromium side?  does WebKit need
&gt; this map?  it seems like it might be better to create an API wrapper for
&gt; WebSpeechRecognition instead.
&gt; 
&gt; the WebKit API is supposed to be a thin layer between chromium and webcore.
&gt; if chromium needs IDs for IPC purposes, then that is a chromium concern,
&gt; not a webkit concern.

Yes, passing a pointer to a WebSpeechRecognition object rather than an id seems nicer, I&apos;ll do that.

I still need to keep track between the mapping between the SpeechRecognition objects and the wrappers, though. It&apos;s important that that same wrapper gets used e.g. for a start() and a stop() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584139</commentid>
    <comment_count>6</comment_count>
      <attachid>133043</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-21 08:10:25 -0700</bug_when>
    <thetext>Created attachment 133043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584140</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-21 08:13:36 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585416</commentid>
    <comment_count>8</comment_count>
      <attachid>133043</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-22 10:00:27 -0700</bug_when>
    <thetext>Comment on attachment 133043
Patch

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

&gt; Source/WebKit/chromium/public/WebSpeechGrammar.h:45
&gt; +    WEBKIT_EXPORT WebURL src() const;

I understand that this is just a reflection of a DOM attribute.  What is
the purpose of exposing this attribute?  Are you going to use it for
security decisions?  Or, will you do some resource loading externally to
WebKit?

&gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:43
&gt; +#if WEBKIT_IMPLEMENTATION

nit: we usually put WEBKIT_IMPLEMENTATION sections at the end of the &apos;public&apos; section.

&gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:47
&gt; +    WEBKIT_EXPORT void audioStartCallback();

nit: how about giving these &quot;event style&quot; names?

  didStartAudio
  didStartSound
  didStartSpeech
  didEndSpeech
  didEndAudio
  ...

It is not quite clear to me how to rename resultCallback or
noMatchCallback or resultDeletedCallback.  Are those three
possible responses to something?

It would also be helpful to document some of the event flow here.
How is the embedder expected to call these methods?

My point is that I think you should do more than just cleave your
code into two pieces.  I think you should try make the API make
sense on its own.  Imagine someone is trying to hook this up to
a different embedder.  What do they need to know?  Please explain
with comments and helpful function names.

&gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:60
&gt; +    WebCore::SpeechRecognition* m_speechRecognition;

are you sure this shouldn&apos;t be a WebPrivatePtr?  SpeechRecognition is
a reference counted class, right?

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:40
&gt; +    virtual void start(WebSpeechRecognition*, const WebVector&lt;WebSpeechGrammar&gt;&amp;, WebString language, bool continuous) { WEBKIT_ASSERT_NOT_REACHED(); }

are you sure you want to pass WebSpeechRecognition by pointer and not by const ref?
WebSpeechRecognition could just be a smart pointer around SpeechRecognition.

nit: &quot;language&quot; should be passed as &quot;const WebString&amp;&quot;

nit: are you sure this interface wouldn&apos;t be better named WeBSpeechRecognitionController?  with methods like &apos;start&apos;, &apos;stop&apos;, and &apos;abort&apos;, it sure seems like this interface is more of a controller and less of a client.  A client is an interface that receives notifications, observes a system, updates UI, implements policy, etc.  A controller is an interface that takes action, drives a system, updates state, etc.

&gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:51
&gt; +        m_recognitionMap.set(recognition, adoptPtr(new WebSpeechRecognition(recognition)));

I don&apos;t understand why you have a map here.  A WebSpeechRecognition should just be
a wrapper around a SpeechRecognition.  You should be able to map back-n-forth between
WebSpeechRecognition and SpeechRecognition just like we can map back-n-forth between
WebNode and Node.

To support an IDMap on the Chromium side, you can give WebSpeechRecognition an equals
and lessThan method, like we have for WebNode.  Also, you can define operator== and
operator&lt;.  Then you can use it as a key in a map.  Would that address your concern?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586336</commentid>
    <comment_count>9</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-23 07:40:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 133043 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133043&amp;action=review

Thanks for the review!

&gt; &gt; Source/WebKit/chromium/public/WebSpeechGrammar.h:45
&gt; &gt; +    WEBKIT_EXPORT WebURL src() const;
&gt; 
&gt; I understand that this is just a reflection of a DOM attribute.  What is
&gt; the purpose of exposing this attribute?  Are you going to use it for
&gt; security decisions?  Or, will you do some resource loading externally to
&gt; WebKit?

The latter. We will pass this URL in our request to the speech server, which I suppose will then load it.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:43
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; 
&gt; nit: we usually put WEBKIT_IMPLEMENTATION sections at the end of the &apos;public&apos; section.

Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:47
&gt; &gt; +    WEBKIT_EXPORT void audioStartCallback();
&gt; 
&gt; nit: how about giving these &quot;event style&quot; names?
&gt; 
&gt;   didStartAudio
&gt;   didStartSound
&gt;   didStartSpeech
&gt;   didEndSpeech
&gt;   didEndAudio
&gt;   ...
&gt; 
&gt; It is not quite clear to me how to rename resultCallback or
&gt; noMatchCallback or resultDeletedCallback.  Are those three
&gt; possible responses to something?

Yes, those three are called as results are streamed back from the speech server. (As per your next comment, I&apos;ll try to document this better.)

The flow is that the user calls start() on the SpeechRecognitionClient, which gets forwarded via the proxy to the embedder. The embedder then calls back via the WebSpeechRecognition interface: audioStartCallback(), speechStartCallback(), some resultCallback()s, etc. The callback methods correspond exactly to the &quot;startaudio&quot;, &quot;result&quot;, etc. events from the spec: http://speech-javascript-api-spec.googlecode.com/git/speechapi.html#speechreco-events

I agree that the function names aren&apos;t great. &quot;didStartAudio&quot;, etc. sound better, but I don&apos;t know how &quot;resultCallback&quot; would be renamed to fit with that.

&gt; It would also be helpful to document some of the event flow here.
&gt; How is the embedder expected to call these methods?
&gt; 
&gt; My point is that I think you should do more than just cleave your
&gt; code into two pieces.  I think you should try make the API make
&gt; sense on its own.  Imagine someone is trying to hook this up to
&gt; a different embedder.  What do they need to know?  Please explain
&gt; with comments and helpful function names.

I&apos;ve tried to add comments to make it more clear.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:60
&gt; &gt; +    WebCore::SpeechRecognition* m_speechRecognition;
&gt; 
&gt; are you sure this shouldn&apos;t be a WebPrivatePtr?  SpeechRecognition is
&gt; a reference counted class, right?

Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:40
&gt; &gt; +    virtual void start(WebSpeechRecognition*, const WebVector&lt;WebSpeechGrammar&gt;&amp;, WebString language, bool continuous) { WEBKIT_ASSERT_NOT_REACHED(); }
&gt; 
&gt; are you sure you want to pass WebSpeechRecognition by pointer and not by const ref?
&gt; WebSpeechRecognition could just be a smart pointer around SpeechRecognition.

I was worried about how I would insert the WebRecognition objects in an IDMap Chromium-side, which is why I passed a pointer. As you pointed out below, this can be fixed, so I&apos;ve changed the code to pass it by const ref.

&gt; nit: &quot;language&quot; should be passed as &quot;const WebString&amp;&quot;

Done.

&gt; nit: are you sure this interface wouldn&apos;t be better named WeBSpeechRecognitionController?  with methods like &apos;start&apos;, &apos;stop&apos;, and &apos;abort&apos;, it sure seems like this interface is more of a controller and less of a client.  A client is an interface that receives notifications, observes a system, updates UI, implements policy, etc.  A controller is an interface that takes action, drives a system, updates state, etc.

Hmm, that does sound sensible. The problem is we already have a Controller class. In WebCore, there is both a SpeechRecognitionController object and the SpeechRecognitionClient interface. This was to squeeze the design into the Supplement pattern similarly to UserMediaController and UserMediaClient from http://trac.webkit.org/changeset/108437).

&gt; &gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:51
&gt; &gt; +        m_recognitionMap.set(recognition, adoptPtr(new WebSpeechRecognition(recognition)));
&gt; 
&gt; I don&apos;t understand why you have a map here.  A WebSpeechRecognition should just be
&gt; a wrapper around a SpeechRecognition.  You should be able to map back-n-forth between
&gt; WebSpeechRecognition and SpeechRecognition just like we can map back-n-forth between
&gt; WebNode and Node.
&gt; 
&gt; To support an IDMap on the Chromium side, you can give WebSpeechRecognition an equals
&gt; and lessThan method, like we have for WebNode.  Also, you can define operator== and
&gt; operator&lt;.  Then you can use it as a key in a map.  Would that address your concern?

Yes, that addresses my concerns and makes everything much nicer :) Thanks for helping me get this straight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586337</commentid>
    <comment_count>10</comment_count>
      <attachid>133484</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-23 07:41:01 -0700</bug_when>
    <thetext>Created attachment 133484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586344</commentid>
    <comment_count>11</comment_count>
      <attachid>133043</attachid>
    <who name="Satish Sampath">satish</who>
    <bug_when>2012-03-23 07:50:06 -0700</bug_when>
    <thetext>Comment on attachment 133043
Patch

&gt; I agree that the function names aren&apos;t great. &quot;didStartAudio&quot;, etc. sound better, but I don&apos;t know how &quot;resultCallback&quot; would be renamed to fit with that.

In this case didReceiveResult, didReceiveNoMatch, didDeletePreviousResult and didReceiveError sound good to me.
I think there would be a bit of confusion between didStart, didStartAudio, didStartSound and didStartSpeech for a first time viewer so documenting them with a call flow and url to the spec would be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586900</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-23 17:32:58 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 133043 [details])
&gt; &gt; I agree that the function names aren&apos;t great. &quot;didStartAudio&quot;, etc. sound better, but I don&apos;t know how &quot;resultCallback&quot; would be renamed to fit with that.
&gt; 
&gt; In this case didReceiveResult, didReceiveNoMatch, didDeletePreviousResult and didReceiveError sound good to me.
&gt; I think there would be a bit of confusion between didStart, didStartAudio, didStartSound and didStartSpeech for a first time viewer so documenting them with a call flow and url to the spec would be useful.

^^^ I like Satish&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587734</commentid>
    <comment_count>13</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-26 07:44:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 133043 [details])
&gt; &gt; I agree that the function names aren&apos;t great. &quot;didStartAudio&quot;, etc. sound better, but I don&apos;t know how &quot;resultCallback&quot; would be renamed to fit with that.
&gt; 
&gt; In this case didReceiveResult, didReceiveNoMatch, didDeletePreviousResult and didReceiveError sound good to me.
Done.

&gt; I think there would be a bit of confusion between didStart, didStartAudio, didStartSound and didStartSpeech for a first time viewer so documenting them with a call flow and url to the spec would be useful.
Done.


(In reply to comment #12)
&gt; ^^^ I like Satish&apos;s suggestions.
Done :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587735</commentid>
    <comment_count>14</comment_count>
      <attachid>133811</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-26 07:44:39 -0700</bug_when>
    <thetext>Created attachment 133811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590094</commentid>
    <comment_count>15</comment_count>
      <attachid>133811</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-28 10:20:12 -0700</bug_when>
    <thetext>Comment on attachment 133811
Patch

Sorry for the high latency in getting feedback to you.  I think there are some
pretty considerable design problems in this API that should be resolved.


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

&gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:42
&gt; +// Wrapper around a SpeechRecognition pointer.

nit: this comment is not very helpful to WebKit API users.  the point of the
API is to hide WebCore details.  it would be better to have a comment that
explains what a WebSpeechRecognition object is.  it seems to be an object that
represents a &quot;notification sink&quot; for events related to a speech recognition request.
i think the class is probably poorly named since its name doesn&apos;t really match up
with its function.

&gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:107
&gt; +    WEBKIT_EXPORT void didReceiveError(const WebString&amp; msg, unsigned short code);

nit: spell it out... msg -&gt; message

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:38
&gt; +class WebSpeechRecognitionClient {

i&apos;m still not sure why this is named with a Client suffix.  its methods are clearly
about controlling something...

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:49
&gt; +    virtual void notifyVisibilityHidden() { WEBKIT_ASSERT_NOT_REACHED(); }

i don&apos;t understand why this method exists.  the embedder already knows when the
page is hidden.  afterall, it is the embedder who communicates that to WebKit
via WebView::setVisibilityState.  Why does the embedder need WebKit to tell it
what it already knows?

perhaps you are just trying to add a method to tell the embedder to abort any
ongoing speech recognition?  in that case, the method name should be specific
to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591166</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-29 07:26:54 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 133811 [details])
&gt; Sorry for the high latency in getting feedback to you.  I think there are some
&gt; pretty considerable design problems in this API that should be resolved.

Thanks for the comments. I&apos;ve tried to rework the patch so that the API makes sense on its own rather than just wrap WebCore objects and take names based on that.

The two most interesting classes in the API are now:

 - WebSpeechRecognizer: the interface used for starting and stopping recognition,
   which should be implemented by the embedder. (This could be renamed to
   WebSpeechRecognitionController if you prefer.)

 - WebSpeechRecognitionClient: a client that is passed as an argument to the
   start, stop, and abort functions; used for reporting on progress.

Hopefully this makes things more clear.


&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133811&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:42
&gt; &gt; +// Wrapper around a SpeechRecognition pointer.
&gt; 
&gt; nit: this comment is not very helpful to WebKit API users.  the point of the
&gt; API is to hide WebCore details.  it would be better to have a comment that
&gt; explains what a WebSpeechRecognition object is.  it seems to be an object that
&gt; represents a &quot;notification sink&quot; for events related to a speech recognition request.
&gt; i think the class is probably poorly named since its name doesn&apos;t really match up
&gt; with its function.
This class has been renamed to WebSpeechRecognitionClient.
 
&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognition.h:107
&gt; &gt; +    WEBKIT_EXPORT void didReceiveError(const WebString&amp; msg, unsigned short code);
&gt; 
&gt; nit: spell it out... msg -&gt; message
Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:38
&gt; &gt; +class WebSpeechRecognitionClient {
&gt; 
&gt; i&apos;m still not sure why this is named with a Client suffix.  its methods are clearly
&gt; about controlling something...
It&apos;s now WebSpeechRecognizer.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:49
&gt; &gt; +    virtual void notifyVisibilityHidden() { WEBKIT_ASSERT_NOT_REACHED(); }
&gt; 
&gt; i don&apos;t understand why this method exists.  the embedder already knows when the
&gt; page is hidden.  afterall, it is the embedder who communicates that to WebKit
&gt; via WebView::setVisibilityState.  Why does the embedder need WebKit to tell it
&gt; what it already knows?
You&apos;re right, this can be handled in the embedder. Removing the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591168</commentid>
    <comment_count>17</comment_count>
      <attachid>134578</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-29 07:27:24 -0700</bug_when>
    <thetext>Created attachment 134578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591387</commentid>
    <comment_count>18</comment_count>
      <attachid>134578</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-29 11:42:11 -0700</bug_when>
    <thetext>Comment on attachment 134578
Patch

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

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:60
&gt; +    WEBKIT_EXPORT bool equals(const WebSpeechRecognitionClient&amp;) const;

I think it probably makes more sense for this to be an interface and for the
recognizer to be instantiated each time you need to start a speech recognition
task.

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionParameters.h:39
&gt; +    WebSpeechRecognitionParameters(const WebVector&lt;WebSpeechGrammar&gt;&amp;, const WebString&amp; language, bool continuous);

nit: elsewhere, we use a suffix of &quot;Params&quot;

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionParameters.h:41
&gt; +    WEBKIT_EXPORT const WebVector&lt;WebSpeechGrammar&gt;&amp; grammars() const;

nit: here you can just define these as inline getters since they just simply
return member variables.

&gt; Source/WebKit/chromium/public/WebViewClient.h:321
&gt; +    virtual WebSpeechRecognizer* speechRecognizer() { return 0; }

I really like the WebSpeechRecognizer name!  However, maybe this should return
an instance and be named createSpeechRecognizer?

Maybe WebSpeechRecogitionClient should be named WebSpeechRecognizerClient, and
it should also be an interface, which gets passed to createSpeechRecognizer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592136</commentid>
    <comment_count>19</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-30 07:11:11 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 134578 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134578&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:60
&gt; &gt; +    WEBKIT_EXPORT bool equals(const WebSpeechRecognitionClient&amp;) const;
&gt; 
&gt; I think it probably makes more sense for this to be an interface and for the
&gt; recognizer to be instantiated each time you need to start a speech recognition
&gt; task.

Hmm, I&apos;m not sure about this one. If we instantiate a new recognizer each time we start a recognition, we need to have a mapping from SpeechRecognition objects to WebSpeechRecognizer, so that a stop() call can be propagated to the correct recognizer.

That brings us back to the state we had before, with SpeechRecognitionClientProxy having a HashMap member and logic to maintain the mapping. It would also need to manage the lifetime of the recognizers and destroy them at the right moment.

It seems to me that this brings back some of the problems from previous versions of this patch. Not having to worry about any mappings or lifetime issues, but shifting that responsibility to the embedder where it can be done easily since it know exactly how long it needs to keep things alive (until it has sent the last event).

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionParameters.h:39
&gt; &gt; +    WebSpeechRecognitionParameters(const WebVector&lt;WebSpeechGrammar&gt;&amp;, const WebString&amp; language, bool continuous);
&gt; 
&gt; nit: elsewhere, we use a suffix of &quot;Params&quot;
Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionParameters.h:41
&gt; &gt; +    WEBKIT_EXPORT const WebVector&lt;WebSpeechGrammar&gt;&amp; grammars() const;
&gt; 
&gt; nit: here you can just define these as inline getters since they just simply
&gt; return member variables.
Done.

&gt; &gt; Source/WebKit/chromium/public/WebViewClient.h:321
&gt; &gt; +    virtual WebSpeechRecognizer* speechRecognizer() { return 0; }
&gt; 
&gt; I really like the WebSpeechRecognizer name!
So do I :)

&gt; However, maybe this should return
&gt; an instance and be named createSpeechRecognizer?
I think creating multiple instances of WebSpeechRecognizer would complicate things, as mentioned above.

&gt; Maybe WebSpeechRecogitionClient should be named WebSpeechRecognizerClient
Done.

&gt; , and
&gt; it should also be an interface, which gets passed to createSpeechRecognizer.
I&apos;m not sure about this one, as mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592137</commentid>
    <comment_count>20</comment_count>
      <attachid>134803</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-03-30 07:11:44 -0700</bug_when>
    <thetext>Created attachment 134803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592240</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-03-30 10:03:45 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 134578 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134578&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionClient.h:60
&gt; &gt; &gt; +    WEBKIT_EXPORT bool equals(const WebSpeechRecognitionClient&amp;) const;
&gt; &gt; 
&gt; &gt; I think it probably makes more sense for this to be an interface and for the
&gt; &gt; recognizer to be instantiated each time you need to start a speech recognition
&gt; &gt; task.
&gt; 
&gt; Hmm, I&apos;m not sure about this one. If we instantiate a new recognizer each time we start a recognition, we need to have a mapping from SpeechRecognition objects to WebSpeechRecognizer, so that a stop() call can be propagated to the correct recognizer.
&gt; 
&gt; That brings us back to the state we had before, with SpeechRecognitionClientProxy having a HashMap member and logic to maintain the mapping. It would also need to manage the lifetime of the recognizers and destroy them at the right moment.
&gt; 
&gt; It seems to me that this brings back some of the problems from previous versions of this patch. Not having to worry about any mappings or lifetime issues, but shifting that responsibility to the embedder where it can be done easily since it know exactly how long it needs to keep things alive (until it has sent the last event).

OK, then how about defining WebSpeechRecognizer and WebSpeechRecognizerClient as interfaces, but keep WebSpeechRecognizer as a singleton, and then introduce WebSpeechRecogition as a wrapper for SpeechRecognition?  WebSpeechRecognition would just serve as a handle to idenitfy a recognition task.  It would not have any other state of methods.  I think WebSpeechRecognizerClient could be implemented by SpeechRecognitionClientProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593414</commentid>
    <comment_count>22</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-02 06:23:29 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; OK, then how about defining WebSpeechRecognizer and WebSpeechRecognizerClient as interfaces, but keep WebSpeechRecognizer as a singleton, and then introduce WebSpeechRecogition as a wrapper for SpeechRecognition?  WebSpeechRecognition would just serve as a handle to idenitfy a recognition task.  It would not have any other state of methods.  I think WebSpeechRecognizerClient could be implemented by SpeechRecognitionClientProxy.

Yes, this sound like a good approach! Patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593416</commentid>
    <comment_count>23</comment_count>
      <attachid>135084</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-02 06:24:01 -0700</bug_when>
    <thetext>Created attachment 135084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593552</commentid>
    <comment_count>24</comment_count>
      <attachid>135084</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-04-02 09:56:33 -0700</bug_when>
    <thetext>Comment on attachment 135084
Patch

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

Interface structure looks pretty good.  Just some minor nits now.

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionHandle.h:41
&gt; +// A handle to a SpeechRecognition object. As long as there is a handle, the

nit: avoid making the user think about WebCore objects.  mentioning the SpeechRecognition
type in this comment breaks that rule.  I would just drop the first two sentences here,
and then I would change the third sentence to begin as &quot;WebSpeechRecognitionHandle is
used by the WebSpeechRecognizer...&quot;

&gt; Source/WebKit/chromium/public/WebSpeechRecognitionParams.h:39
&gt; +    WebSpeechRecognitionParams(const WebVector&lt;WebSpeechGrammar&gt;&amp;, const WebString&amp; language, bool continuous);

nit: implement the constructor inline or else it needs to be tagged with WEBKIT_EXPORT.  usually we just implement inline.

&gt; Source/WebKit/chromium/public/WebSpeechRecognizer.h:41
&gt; +    virtual void start(WebSpeechRecognitionHandle, const WebSpeechRecognitionParams&amp;, WebSpeechRecognizerClient*) { WEBKIT_ASSERT_NOT_REACHED(); }

nit: pass handles as &quot;const WebSpeechRecognitionHandle&amp;&quot; ... you should see other classes that are implemented using WebPrivatePtr being passed as const ref.

&gt; Source/WebKit/chromium/public/WebSpeechRecognizerClient.h:44
&gt; +    virtual void didStartAudio(WebSpeechRecognitionHandle&amp;) = 0;

nit: pass handles as &quot;const WebSpeechRecognitionHandle&amp;&quot;

&gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:76
&gt; +    RefPtr&lt;SpeechRecognition&gt; recognition = static_cast&lt;PassRefPtr&lt;SpeechRecognition&gt; &gt;(handle);

the explicit cast to PassRefPtr&lt;SpeechRecognition&gt; should become unnecessary once you
change the argument type to &quot;const WebSpeechRecognitionHandle&amp;&quot; as the conversion
operator defined on WebSpeechRecognitionHandle will then be used implicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594407</commentid>
    <comment_count>25</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-03 05:56:05 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 135084 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135084&amp;action=review
&gt; 
&gt; Interface structure looks pretty good.  Just some minor nits now.
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionHandle.h:41
&gt; &gt; +// A handle to a SpeechRecognition object. As long as there is a handle, the
&gt; 
&gt; nit: avoid making the user think about WebCore objects.  mentioning the SpeechRecognition
&gt; type in this comment breaks that rule.  I would just drop the first two sentences here,
&gt; and then I would change the third sentence to begin as &quot;WebSpeechRecognitionHandle is
&gt; used by the WebSpeechRecognizer...&quot;
Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognitionParams.h:39
&gt; &gt; +    WebSpeechRecognitionParams(const WebVector&lt;WebSpeechGrammar&gt;&amp;, const WebString&amp; language, bool continuous);
&gt; 
&gt; nit: implement the constructor inline or else it needs to be tagged with WEBKIT_EXPORT.  usually we just implement inline.
Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognizer.h:41
&gt; &gt; +    virtual void start(WebSpeechRecognitionHandle, const WebSpeechRecognitionParams&amp;, WebSpeechRecognizerClient*) { WEBKIT_ASSERT_NOT_REACHED(); }
&gt; 
&gt; nit: pass handles as &quot;const WebSpeechRecognitionHandle&amp;&quot; ... you should see other classes that are implemented using WebPrivatePtr being passed as const ref.
Done.

&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognizerClient.h:44
&gt; &gt; +    virtual void didStartAudio(WebSpeechRecognitionHandle&amp;) = 0;
&gt; 
&gt; nit: pass handles as &quot;const WebSpeechRecognitionHandle&amp;&quot;
Done.

&gt; &gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:76
&gt; &gt; +    RefPtr&lt;SpeechRecognition&gt; recognition = static_cast&lt;PassRefPtr&lt;SpeechRecognition&gt; &gt;(handle);
&gt; 
&gt; the explicit cast to PassRefPtr&lt;SpeechRecognition&gt; should become unnecessary once you
&gt; change the argument type to &quot;const WebSpeechRecognitionHandle&amp;&quot; as the conversion
&gt; operator defined on WebSpeechRecognitionHandle will then be used implicitly.

Hmm, I still can&apos;t do RefPtr&lt;SpeechRecognition&gt; recognition = handle;

RefPtr&lt;T&gt; doesn&apos;t have a ctor that takes a PassRefPtr&lt;T&gt;.
What it does have is a ctor template that takes a PassRefPtr&lt;U&gt;, but since handle isn&apos;t a PassRefPtr in itself, the compiler can&apos;t do template argument deduction for U.

I could do this:

  RefPtr&lt;SpeechRecognition&gt; recognition;
  recognition = handle;
  recognition-&gt;didReceiveResult(...);

Which might be less ugly, but feels more weird.

I could also use the PassRefPtr directly:

  PassRefPtr&lt;SpeechRecognition&gt; recognition = handle;
  recognition-&gt;didReceiveResult(...);

But that fails on the &quot;Local variables should never be PassRefPtr&quot; rule.

This would be another solution:

  static PassRefPtr&lt;SpeechRecognition&gt; unwrapHandle(const WebSpeechRecognitionHandle&amp; handle)
  {
      return handle;
  }

  void SpeechRecognitionClientProxy::didStartAudio(const WebSpeechRecognitionHandle&amp; handle)
  {
      RefPtr&lt;SpeechRecognition&gt; recognition = unwrapHandle(handle);
      recognition-&gt;didStartAudio();
  }

Still a bit weird, but it avoids the static_cast.

I&apos;m not sure what the best way is here, so I&apos;ve kept the static_casts in for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594408</commentid>
    <comment_count>26</comment_count>
      <attachid>135316</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-03 05:56:47 -0700</bug_when>
    <thetext>Created attachment 135316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594537</commentid>
    <comment_count>27</comment_count>
      <attachid>135316</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-04-03 09:01:19 -0700</bug_when>
    <thetext>Comment on attachment 135316
Patch

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

&gt; Source/WebKit/chromium/public/WebSpeechRecognizerClient.h:39
&gt; +public:

this interface should probably have a protected destructor to ensure
that the WebSpeechRecognizer implementation does not try to delete
its client.

&gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:106
&gt; +    RefPtr&lt;SpeechRecognition&gt; recognition = static_cast&lt;PassRefPtr&lt;SpeechRecognition&gt; &gt;(handle);

OK... looking around the codebase, the more common pattern in cases like this is to do:

  RefPtr&lt;SpeechRecognition&gt; recognition = PassRefPtr&lt;SpeechRecognition&gt;(handle);

^^^ slightly less verbosity

It seems like it would be cool if we had a global unwrap function that somehow
did the right thing here.

  unwrap&lt;SpeechRecognition&gt;(handle)-&gt;didEndAudio()

But, such a change would probably be a bigger effort.  I&apos;d say it seems out-of-scope
for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595294</commentid>
    <comment_count>28</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-04 00:52:06 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 135316 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135316&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebSpeechRecognizerClient.h:39
&gt; &gt; +public:
&gt; 
&gt; this interface should probably have a protected destructor to ensure
&gt; that the WebSpeechRecognizer implementation does not try to delete
&gt; its client.
Done.

&gt; &gt; Source/WebKit/chromium/src/SpeechRecognitionClientProxy.cpp:106
&gt; &gt; +    RefPtr&lt;SpeechRecognition&gt; recognition = static_cast&lt;PassRefPtr&lt;SpeechRecognition&gt; &gt;(handle);
&gt; 
&gt; OK... looking around the codebase, the more common pattern in cases like this is to do:
&gt; 
&gt;   RefPtr&lt;SpeechRecognition&gt; recognition = PassRefPtr&lt;SpeechRecognition&gt;(handle);
&gt; 
&gt; ^^^ slightly less verbosity
Ah, yes that&apos;s nicer. Done.

&gt; It seems like it would be cool if we had a global unwrap function that somehow
&gt; did the right thing here.
&gt; 
&gt;   unwrap&lt;SpeechRecognition&gt;(handle)-&gt;didEndAudio()
&gt; 
&gt; But, such a change would probably be a bigger effort.  I&apos;d say it seems out-of-scope
&gt; for this patch.
Yeah that sounds like it might be a good idea. I&apos;ll have a think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595306</commentid>
    <comment_count>29</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-04 01:37:36 -0700</bug_when>
    <thetext>Committed r113149: &lt;http://trac.webkit.org/changeset/113149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595387</commentid>
    <comment_count>30</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-04-04 03:57:06 -0700</bug_when>
    <thetext>Committed r113164: &lt;http://trac.webkit.org/changeset/113164&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132832</attachid>
            <date>2012-03-20 08:38:11 -0700</date>
            <delta_ts>2012-03-21 08:10:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120320153809.patch</filename>
            <type>text/plain</type>
            <size>41542</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcxNzUzMzYwY2UyOGNi
YmYzNzYyMzhmNTJjNDE5MmE2OGFmMThhYi4uNTE4YTE2ZTY0NDJiM2MyMTBkYjYwM2QwOTljY2Rj
NjRlMzdiNmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTIwICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BlZWNoR3JhbW1hcjo6c3JjKCkgaXMgY2FsbGVkIHdpdGgg
YSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBiZWNhdXNlCisgICAgICAgIHRoZSBhdHRyaWJ1dGUg
c2V0dGVyIG5lZWRzIGl0LiBQcm92aWRlIGEgc3JjKCkgbWV0aG9kIHRoYXQgZG9lc24ndAorICAg
ICAgICB0YWtlIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIGludGVy
bmFsbHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgbWlub3IgZml4LgorCisgICAg
ICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oOgorICAgICAgICAoV2ViQ29yZTo6
U3BlZWNoR3JhbW1hcjo6c3JjKToKKwogMjAxMi0wMy0xOSAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIERlYnVnIGJ1aWxkIGFm
dGVyIHIxMTEzNTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2VlZGI1NTdiMTY1MTBl
MDhkY2JmNTZkODM2MjIwNGQ4NDA3OGFkNC4uMmFlNjBmMGUyODRjNDYxMWE0NjdmMDhhNjk5MmEw
OTQ5YTM4NWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDQgQEAK
KzIwMTItMDMtMjAgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJvbWl1bQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcGx1bWJpbmcgZm9yIHNw
ZWVjaCByZWNvZ25pdGlvbi4KKyAgICAgICAgV3JhcHBlcnM6CisgICAgICAgICAtIFdlYlNwZWVj
aEdyYW1tYXIKKyAgICAgICAgIC0gV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQKKworICAgICAg
ICBJbnRlcmZhY2VzOgorICAgICAgICAgLSBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCwgdG8g
YmUgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0KKyAgICAgICAgIC0gV2ViU3BlZWNoUmVjb2duaXRp
b25Qcm94eSwgcHJveGllcyBjYWxscyB0byBhIFNwZWVjaFJlY29nbml0aW9uIG9iamVjdAorCisg
ICAgICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6IGltcGxlbWVudHMgdGhlIFNwZWVj
aFJlY29nbml0aW9uQ2xpZW50CisgICAgICAgIGludGVyZmFjZSwgcHJveHlpbmcgY2FsbHMgb24g
dG8gYSBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4KKyAgICAgICAgQWxzbyBwcm92aWRlcyB0
aGUgcmV0dXJuIHBhdGggYnkgaW1wbGVtZW50aW5nIFdlYlNwZWVjaFJlY29nbml0aW9uUHJveHku
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hHcmFt
bWFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaEdyYW1t
YXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFy
Ojp+V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29nbml0
aW9uQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dDo6c2V0U3BlZWNoUmVjb2duaXRpb25Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50Ojp+V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6c3RhcnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6c3RvcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojp2aXNpYmlsaXR5SGlkZGVuKToKKyAgICAgICAg
KiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvblByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eTo6YXVkaW9TdGFydENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eTo6c291bmRTdGFydENhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eTo6c3BlZWNo
U3RhcnRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUHJv
eHk6OnNwZWVjaEVuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25Qcm94eTo6YXVkaW9FbmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uUHJveHk6OnJlc3VsdENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXRpb25Qcm94eTo6bm9NYXRjaENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eTo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25Qcm94eTo6b25FcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUHJveHk6OnN0YXJ0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblByb3h5OjplbmRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUHJveHk6On5XZWJTcGVlY2hS
ZWNvZ25pdGlvblByb3h5KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp+V2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdDbGllbnQ6OnNwZWVjaFJlY29nbml0aW9uQ2xpZW50KToKKyAgICAgICAgKiBzcmMv
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RhcnQp
OgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzdG9wKToK
KyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6YWJvcnQpOgor
ICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp2aXNpYmlsaXR5
SGlkZGVuKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6
dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVj
b2duaXRpb25DbGllbnRQcm94eTo6YXVkaW9TdGFydENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c291bmRTdGFydENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3BlZWNoU3RhcnRD
YWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OnNwZWVjaEVuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eTo6YXVkaW9FbmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk6OnJlc3VsdENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6bm9NYXRjaENhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6cmVzdWx0RGVsZXRlZENhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6b25F
cnJvcik6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OnN0
YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5OjplbmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkpOgorICAgICAgICAqIHNyYy9T
cGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkpOgorICAgICAgICAqIHNyYy9X
ZWJTcGVlY2hHcmFtbWFyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVl
Y2hHcmFtbWFyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFy
OjpzcmMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjp3ZWlnaHQpOgorICAg
ICAgICAqIHNyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6
OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojpy
ZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGVy
YXRvciBQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OldlYlZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdl
YktpdCk6CisKIDIwMTItMDMtMTkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgIm1hZ2ljIiBpZnJhbWUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaAppbmRleCA2MjA4OGMxOGIwYzhjYjAx
ZDM0MDdkMWQyNjZiODJjYjZkZDJmMmY5Li5lMDgzNThiYmYxM2VkMmZmZWM0Y2U2NjYyMjY2OWZl
YjlhMTRhMGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hHcmFtbWFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3Jh
bW1hci5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
cGVlY2hHcmFtbWFyPiBjcmVhdGUoY29uc3QgS1VSTCYgc3JjLCBkb3VibGUgd2VpZ2h0KTsKIAog
ICAgIGNvbnN0IEtVUkwmIHNyYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3QgeyByZXR1
cm4gbV9zcmM7IH0KKyAgICBjb25zdCBLVVJMJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3NyYzsg
fQogICAgIHZvaWQgc2V0U3JjKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IHNyYyk7CiAKICAgICBkb3VibGUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV93ZWlnaHQ7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzNzZmNmQ0MTE2YzY4NWRjODE3NzQyNDUw
ZjgyMzNjOWQwYjBlNjc3Li40MGNjODNhYWU0YzQyNjcwZTY2NjZkMmY3ZDAyNzVjMGE2ZTYxNzU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0yNTIsOSArMjUyLDEzIEBACiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViU29ja2V0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViU29ja2V0Q2xpZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoR3Jh
bW1hci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaElucHV0Q29udHJvbGxl
ci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaElucHV0TGlzdGVuZXIuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hJbnB1dFJlc3VsdC5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgnLAorICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCcsCisgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblByb3h5LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViU3BlbGxDaGVja0NsaWVudC5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlN0b3JhZ2VBcmVhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlci5oJywKQEAgLTQ3MSw2ICs0NzUsOCBAQAogICAgICAgICAgICAg
ICAgICdzcmMvU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9TcGVlY2hJbnB1dENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1Nw
ZWVjaElucHV0Q2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29n
bml0aW9uQ2xpZW50UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29n
bml0aW9uQ2xpZW50UHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJlYVBy
b3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJlYVByb3h5LmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckNocm9taXVtLmNwcCcsCkBA
IC02NTgsNyArNjY0LDkgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwuaCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNw
ZWVjaElucHV0UmVzdWx0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFnZUFyZWFJ
bXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVySW1wbC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoR3JhbW1h
ci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoR3JhbW1hci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA3ZWZlNDEyODZjNDY0Y2I4N2MxN2QyOWJlOGQ3NTYzOTEyMWNhZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hHcmFt
bWFyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoR3JhbW1hcl9o
CisjZGVmaW5lIFdlYlNwZWVjaEdyYW1tYXJfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTcGVlY2hHcmFtbWFyOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViU3BlZWNoR3JhbW1hciB7CitwdWJsaWM6CisgICAgV2ViU3BlZWNo
R3JhbW1hcigpIHsgfQorICAgIH5XZWJTcGVlY2hHcmFtbWFyKCkgeyByZXNldCgpOyB9CisKKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBzcmMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGZs
b2F0IHdlaWdodCgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJTcGVlY2hHcmFtbWFyKGNvbnN0IFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYpOworICAgIFdlYlNwZWVjaEdy
YW1tYXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3Jh
bW1hcj4mKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6
U3BlZWNoR3JhbW1hcj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJTcGVlY2hHcmFtbWFyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjIzNzkzYmNjODM1YmFkZGJmMGYwNjA0MWEyYTFmYTQ2MmYxMzkzNDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50X2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnRfaAor
CisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOworY2xhc3MgV2ViU3BlZWNoUmVjb2du
aXRpb25Qcm94eTsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVlY2hSZWNvZ25pdGlvblByb3h5KFdlYlNwZWVjaFJl
Y29nbml0aW9uUHJveHkqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgfldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoaW50NjRfdCByZWNvZ25pdGlvbklkLCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNo
R3JhbW1hcj4mLCBXZWJTdHJpbmcgbGFuZ3VhZ2UsIGJvb2wgY29udGludW91cykgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcChpbnQ2NF90IHJl
Y29nbml0aW9uSWQpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIGFib3J0KGludDY0X3QgcmVjb2duaXRpb25JZCkgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mMjczNWU2MmQ1OTkzODcwNDQ3MzQwODUyOWE0NTNhYmVmZTQ2NjY4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVj
b2duaXRpb25Qcm94eS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNw
ZWVjaFJlY29nbml0aW9uUHJveHlfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pdGlvblByb3h5
X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQ7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29n
bml0aW9uUHJveHkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhdWRpb1N0YXJ0Q2FsbGJh
Y2soaW50NjRfdCByZWNvZ25pdGlvbklkKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzb3VuZFN0YXJ0Q2FsbGJhY2soaW50NjRfdCByZWNvZ25pdGlv
bklkKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
cGVlY2hTdGFydENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCkgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3BlZWNoRW5kQ2FsbGJhY2soaW50
NjRfdCByZWNvZ25pdGlvbklkKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAg
IHZpcnR1YWwgdm9pZCBhdWRpb0VuZENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCkgeyBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdWx0Q2Fs
bGJhY2soaW50NjRfdCByZWNvZ25pdGlvbklkLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdCYsIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG5vTWF0Y2hDYWxsYmFjayhpbnQ2NF90IHJl
Y29nbml0aW9uSWQsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JikgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdWx0RGVsZXRlZENh
bGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCwgdW5zaWduZWQgcmVzdWx0SW5kZXgsIGNvbnN0
IFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpIHsg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3Io
aW50NjRfdCByZWNvZ25pdGlvbklkLCBjb25zdCBXZWJTdHJpbmcmIG1zZywgdW5zaWduZWQgc2hv
cnQgY29kZSkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRDYWxsYmFjayhpbnQ2NF90IHJlY29nbml0aW9uSWQpIHsgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGVuZENhbGxiYWNrKGludDY0X3QgcmVj
b2duaXRpb25JZCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAgIHZpcnR1
YWwgfldlYlNwZWVjaFJlY29nbml0aW9uUHJveHkoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTNmNTQzMTE5YzYxYTZiM2RkMWU1M2NlZmQwNThl
MDU5MzY5OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCisjZGVmaW5lIFdlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJT
dHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCB7CitwdWJsaWM6Cisg
ICAgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoKSB7IH0KKyAgICB+V2ViU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3Np
Z24oY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHRyYW5zY3JpcHRzLCBjb25zdCBXZWJWZWN0
b3I8ZmxvYXQ+JiBjb25maWRlbmNlcywgYm9vbCBmaW5hbCk7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFzc2lnbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYpOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZXNldCgpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0
PigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKaW5kZXggZjI5MDMz
YzcyMzgwMDVjNWVkNzJkYWMzMWI4MTg5YWFkNDgzMzgxNy4uMDlmNGE4YjRlMjE1NGNhNDI1MzA1
NTE0N2I0MTM2MWQwY2ZjMjQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlld0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXdDbGllbnQuaApAQCAtNjgsNiArNjgsNyBAQCBjbGFzcyBXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXI7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNwZWVjaElucHV0Q29udHJvbGxl
cjsKIGNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudDsKIGNsYXNzIFdlYlN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBXZWJVUkw7CiBj
bGFzcyBXZWJVUkxSZXF1ZXN0OwpAQCAtMzE2LDYgKzMxNywxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcigKICAg
ICAgICAgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIFNj
cmlwdGVkIHNwZWVjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIHNwZWVjaCBy
ZWNvZ25pdGlvbiBzZXJ2aWNlcy4KKyAgICB2aXJ0dWFsIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50KiBzcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgcmV0dXJuIDA7IH0KKwogICAgIC8vIERl
dmljZSBPcmllbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiAgICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGRldmljZSBv
cmllbnRhdGlvbiBzZXJ2aWNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzll
NDdjZGI3MmMyYjZlYjA2YTkxNWNhYWQ4ZjNkZGRmN2VmMDNmYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHku
Y3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCIKKworI2luY2x1ZGUgIlNwZWVj
aFJlY29nbml0aW9uLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25FcnJvci5oIgorI2lu
Y2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2du
aXRpb25SZXN1bHRMaXN0LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoR3JhbW1hci5oIgorI2luY2x1
ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk+IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmNyZWF0ZShXZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3BlZWNoUmVj
b2duaXRpb25DbGllbnRQcm94eShjbGllbnQpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpzdGFydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRp
b24sIGNvbnN0IFdlYkNvcmU6OlNwZWVjaEdyYW1tYXJMaXN0KiBncmFtbWFyTGlzdCwgY29uc3Qg
U3RyaW5nJiBsYW5nLCBib29sIGNvbnRpbnVvdXMpCit7CisgICAgaW50NjRfdCByZWNvZ25pdGlv
bklkOworICAgIGlmICghbV9yZWNvZ25pdGlvbk1hcC5jb250YWlucyhyZWNvZ25pdGlvbikpIHsK
KyAgICAgICAgcmVjb2duaXRpb25JZCA9ICsrbV9sYXN0UmVjb2duaXRpb25JZDsKKyAgICAgICAg
bV9yZWNvZ25pdGlvbk1hcC5zZXQocmVjb2duaXRpb24sIHJlY29nbml0aW9uSWQpOworICAgICAg
ICBtX2lkTWFwLnNldChyZWNvZ25pdGlvbklkLCByZWNvZ25pdGlvbik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcmVjb2duaXRpb25JZCA9IG1fcmVjb2duaXRpb25NYXAuZ2V0KHJlY29nbml0aW9u
KTsKKyAgICAgICAgQVNTRVJUKG1faWRNYXAuZ2V0KHJlY29nbml0aW9uSWQpID09IHJlY29nbml0
aW9uKTsKKyAgICB9CisKKyAgICBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4gd2ViU3BlZWNo
R3JhbW1hcnMoZ3JhbW1hckxpc3QtPmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aSA9IDA7IGkgPCBncmFtbWFyTGlzdC0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgd2ViU3BlZWNo
R3JhbW1hcnNbaV0gPSBncmFtbWFyTGlzdC0+aXRlbShpKTsKKworICAgIG1faGFzRXZlckJlZW5T
dGFydGVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+c3RhcnQocmVjb2duaXRpb25JZCwgd2ViU3Bl
ZWNoR3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHk6OnN0b3AoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0
aW9uKQoreworICAgIEFTU0VSVChtX3JlY29nbml0aW9uTWFwLmNvbnRhaW5zKHJlY29nbml0aW9u
KSk7CisgICAgQVNTRVJUKG1faWRNYXAuZ2V0KG1fcmVjb2duaXRpb25NYXAuZ2V0KHJlY29nbml0
aW9uKSkgPT0gcmVjb2duaXRpb24pOworICAgIGludDY0X3QgcmVjb2duaXRpb25JZCA9IG1fcmVj
b2duaXRpb25NYXAuZ2V0KHJlY29nbml0aW9uKTsKKyAgICBtX2NsaWVudC0+c3RvcChyZWNvZ25p
dGlvbklkKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjphYm9ydChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pCit7CisgICAgQVNTRVJUKG1f
cmVjb2duaXRpb25NYXAuY29udGFpbnMocmVjb2duaXRpb24pKTsKKyAgICBBU1NFUlQobV9pZE1h
cC5nZXQobV9yZWNvZ25pdGlvbk1hcC5nZXQocmVjb2duaXRpb24pKSA9PSByZWNvZ25pdGlvbik7
CisgICAgaW50NjRfdCByZWNvZ25pdGlvbklkID0gbV9yZWNvZ25pdGlvbk1hcC5nZXQocmVjb2du
aXRpb24pOworICAgIG1fY2xpZW50LT5hYm9ydChyZWNvZ25pdGlvbklkKTsKK30KKwordm9pZCBT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp2aXNpYmlsaXR5SGlkZGVuKCkKK3sKKyAgICBp
ZiAoIW1faGFzRXZlckJlZW5TdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVu
dC0+dmlzaWJpbGl0eUhpZGRlbigpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50
UHJveHk6OnVucmVnaXN0ZXJTcGVlY2hSZWNvZ25pdGlvbihXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbiogc3BlZWNoUmVjb2duaXRpb24pCit7CisgICAgaWYgKCFtX3JlY29nbml0aW9uTWFwLmNv
bnRhaW5zKHNwZWVjaFJlY29nbml0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50NjRf
dCByZWNvZ25pdGlvbklkID0gbV9yZWNvZ25pdGlvbk1hcC5nZXQoc3BlZWNoUmVjb2duaXRpb24p
OworICAgIG1fcmVjb2duaXRpb25NYXAucmVtb3ZlKHNwZWVjaFJlY29nbml0aW9uKTsKKyAgICBt
X2lkTWFwLnJlbW92ZShyZWNvZ25pdGlvbklkKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjphdWRpb1N0YXJ0Q2FsbGJhY2soaW50NjRfdCByZWNvZ25pdGlvbklkKQor
eworICAgIGlmICghbV9pZE1hcC5jb250YWlucyhyZWNvZ25pdGlvbklkKSkKKyAgICAgICAgcmV0
dXJuOworICAgIFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiA9IG1faWRN
YXAuZ2V0KHJlY29nbml0aW9uSWQpOworICAgIHJlY29nbml0aW9uLT5hdWRpb1N0YXJ0Q2FsbGJh
Y2soKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojpzb3VuZFN0YXJ0
Q2FsbGJhY2soaW50NjRfdCByZWNvZ25pdGlvbklkKQoreworICAgIGlmICghbV9pZE1hcC5jb250
YWlucyhyZWNvZ25pdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiA9IG1faWRNYXAuZ2V0KHJlY29nbml0aW9uSWQpOwor
ICAgIHJlY29nbml0aW9uLT5zb3VuZFN0YXJ0Q2FsbGJhY2soKTsKK30KKwordm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzcGVlY2hTdGFydENhbGxiYWNrKGludDY0X3QgcmVjb2du
aXRpb25JZCkKK3sKKyAgICBpZiAoIW1faWRNYXAuY29udGFpbnMocmVjb2duaXRpb25JZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRp
b24gPSBtX2lkTWFwLmdldChyZWNvZ25pdGlvbklkKTsKKyAgICByZWNvZ25pdGlvbi0+c3BlZWNo
U3RhcnRDYWxsYmFjaygpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OnNwZWVjaEVuZENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCkKK3sKKyAgICBpZiAoIW1f
aWRNYXAuY29udGFpbnMocmVjb2duaXRpb25JZCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24gPSBtX2lkTWFwLmdldChyZWNvZ25p
dGlvbklkKTsKKyAgICByZWNvZ25pdGlvbi0+c3BlZWNoRW5kQ2FsbGJhY2soKTsKK30KKwordm9p
ZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjphdWRpb0VuZENhbGxiYWNrKGludDY0X3Qg
cmVjb2duaXRpb25JZCkKK3sKKyAgICBpZiAoIW1faWRNYXAuY29udGFpbnMocmVjb2duaXRpb25J
ZCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVj
b2duaXRpb24gPSBtX2lkTWFwLmdldChyZWNvZ25pdGlvbklkKTsKKyAgICByZWNvZ25pdGlvbi0+
YXVkaW9FbmRDYWxsYmFjaygpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OnJlc3VsdENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCwgY29uc3QgV2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgY29u
c3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkK
K3sKKyAgICBpZiAoIW1faWRNYXAuY29udGFpbnMocmVjb2duaXRpb25JZCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24gPSBtX2lk
TWFwLmdldChyZWNvZ25pdGlvbklkKTsKKworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3RvcihyZXN1bHRIaXN0b3J5
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRIaXN0b3J5LnNpemUo
KTsgKytpKQorICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVuZChzdGF0aWNfY2FzdDxQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3VsdEhpc3Rv
cnlbaV0pKTsKKworICAgIHJlY29nbml0aW9uLT5yZXN1bHRDYWxsYmFjayhyZXN1bHQsIHJlc3Vs
dEluZGV4LCBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1
bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eTo6bm9NYXRjaENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCwgY29uc3QgV2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAoIW1faWRNYXAuY29udGFpbnMo
cmVjb2duaXRpb25JZCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvbiogcmVjb2duaXRpb24gPSBtX2lkTWFwLmdldChyZWNvZ25pdGlvbklkKTsKKyAgICBy
ZWNvZ25pdGlvbi0+bm9NYXRjaENhbGxiYWNrKHJlc3VsdCk7Cit9CisKK3ZvaWQgU3BlZWNoUmVj
b2duaXRpb25DbGllbnRQcm94eTo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKGludDY0X3QgcmVjb2du
aXRpb25JZCwgdW5zaWduZWQgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpCit7CisgICAgaWYgKCFtX2lkTWFwLmNv
bnRhaW5zKHJlY29nbml0aW9uSWQpKQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uID0gbV9pZE1hcC5nZXQocmVjb2duaXRpb25JZCk7
CisKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+
IHJlc3VsdEhpc3RvcnlWZWN0b3IocmVzdWx0SGlzdG9yeS5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVzdWx0SGlzdG9yeS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0
SGlzdG9yeVZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5W2ldKSk7CisKKyAgICByZWNvZ25p
dGlvbi0+cmVzdWx0RGVsZXRlZENhbGxiYWNrKHJlc3VsdEluZGV4LCBXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisK
K3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6b25FcnJvcihpbnQ2NF90IHJlY29n
bml0aW9uSWQsIGNvbnN0IFdlYlN0cmluZyYgbXNnLCB1bnNpZ25lZCBzaG9ydCBjb2RlKQorewor
ICAgIGlmICghbV9pZE1hcC5jb250YWlucyhyZWNvZ25pdGlvbklkKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiA9IG1faWRNYXAu
Z2V0KHJlY29nbml0aW9uSWQpOworCisgICAgV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25FcnJv
cjo6Q29kZSBlcnJvckNvZGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlv
bkVycm9yOjpDb2RlPihjb2RlKTsKKyAgICByZWNvZ25pdGlvbi0+ZXJyb3JDYWxsYmFjayhXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbkVycm9yOjpjcmVhdGUoZXJyb3JDb2RlLCBtc2cpKTsKK30K
Kwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzdGFydENhbGxiYWNrKGludDY0
X3QgcmVjb2duaXRpb25JZCkKK3sKKyAgICBpZiAoIW1faWRNYXAuY29udGFpbnMocmVjb2duaXRp
b25JZCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiog
cmVjb2duaXRpb24gPSBtX2lkTWFwLmdldChyZWNvZ25pdGlvbklkKTsKKyAgICByZWNvZ25pdGlv
bi0+c3RhcnRDYWxsYmFjaygpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OmVuZENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCkKK3sKKyAgICBpZiAoIW1faWRN
YXAuY29udGFpbnMocmVjb2duaXRpb25JZCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24gPSBtX2lkTWFwLmdldChyZWNvZ25pdGlv
bklkKTsKKyAgICByZWNvZ25pdGlvbi0+ZW5kQ2FsbGJhY2soKTsKK30KKworU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9sYXN0UmVjb2duaXRpb25JZCgwKQorICAgICwgbV9oYXNFdmVyQmVlblN0YXJ0ZWQoZmFsc2Up
Cit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0U3BlZWNoUmVjb2du
aXRpb25Qcm94eSh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjhiZDU2MTU0ZTZiZTgwYjY4M2JlZWU1NjQ3ZmYxN2U3Yzc3ZTBi
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHkuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5X2gKKyNkZWZpbmUgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRp
b25Qcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudDsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCwgcHVibGlj
IFdlYlNwZWVjaFJlY29nbml0aW9uUHJveHkgeworcHVibGljOgorICAgIC8vIENvbnN0cnVjdGlu
ZyBhIHByb3h5IG9iamVjdCB3aXRoIGEgMCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCBpcyBz
YWZlIGluCisgICAgLy8gaXRzZWxmLCBidXQgYXR0ZW1wdGluZyB0byBjYWxsIHN0YXJ0L3N0b3Av
YWJvcnQgb24gaXQgd2lsbCBjcmFzaC4KKyAgICBzdGF0aWMgUGFzc093blB0cjxTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudFByb3h5PiBjcmVhdGUoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsK
KworICAgIC8vIFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OgorICAgIHZpcnR1YWwg
dm9pZCBzdGFydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiosIGNvbnN0IFdlYkNvcmU6OlNw
ZWVjaEdyYW1tYXJMaXN0KiwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29sIGNvbnRpbnVvdXMpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KFdlYkNvcmU6OlNwZWVjaFJlY29n
bml0aW9uKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlIaWRkZW4oKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKikgT1ZFUlJJREU7CisKKyAgICAvLyBXZWJTcGVlY2hS
ZWNvZ25pdGlvblByb3h5OgorICAgIHZpcnR1YWwgdm9pZCBhdWRpb1N0YXJ0Q2FsbGJhY2soaW50
NjRfdCByZWNvZ25pdGlvbklkKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc291bmRTdGFy
dENhbGxiYWNrKGludDY0X3QgcmVjb2duaXRpb25JZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNwZWVjaFN0YXJ0Q2FsbGJhY2soaW50NjRfdCByZWNvZ25pdGlvbklkKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3BlZWNoRW5kQ2FsbGJhY2soaW50NjRfdCByZWNvZ25pdGlvbklk
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXVkaW9FbmRDYWxsYmFjayhpbnQ2NF90IHJl
Y29nbml0aW9uSWQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN1bHRDYWxsYmFjayhp
bnQ2NF90IHJlY29nbml0aW9uSWQsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Jiwg
dW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IG5vTWF0Y2hDYWxsYmFjayhpbnQ2NF90IHJlY29nbml0aW9uSWQsIGNvbnN0IFdlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc3VsdERlbGV0
ZWRDYWxsYmFjayhpbnQ2NF90IHJlY29nbml0aW9uSWQsIHVuc2lnbmVkIHJlc3VsdEluZGV4LCBj
b25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihpbnQ2NF90IHJlY29nbml0aW9u
SWQsIGNvbnN0IFdlYlN0cmluZyYgbXNnLCB1bnNpZ25lZCBzaG9ydCBjb2RlKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRDYWxsYmFjayhpbnQ2NF90IHJlY29nbml0aW9uSWQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbmRDYWxsYmFjayhpbnQ2NF90IHJlY29nbml0aW9u
SWQpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHkoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKKworICAgIFdlYlNwZWVjaFJlY29nbml0
aW9uQ2xpZW50KiBtX2NsaWVudDsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0
aW9uKiwgaW50NjRfdD4gbV9yZWNvZ25pdGlvbk1hcDsKKyAgICBIYXNoTWFwPGludDY0X3QsIFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKj4gbV9pZE1hcDsKKyAgICBpbnQ2NF90IG1fbGFzdFJl
Y29nbml0aW9uSWQ7CisgICAgYm9vbCBtX2hhc0V2ZXJCZWVuU3RhcnRlZDsKK307CisKK307IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3Jh
bW1hci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFtbWFyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yZmNjZDQwY2JjMWI0NTgxZDFhYzY2NGUwZGY0MzBhZDAwMDkzNWE2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3Jh
bW1hci5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJTcGVlY2hHcmFtbWFyLmgiCisKKyNpbmNsdWRlICJTcGVlY2hHcmFtbWFyLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgV2ViU3BlZWNoR3JhbW1hcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOwor
fQorCitXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFtbWFyKGNvbnN0IFBhc3NSZWZQdHI8
V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVlKQorICAgIDogbV9wcml2YXRlKHZhbHVlKQor
eworfQorCitXZWJTcGVlY2hHcmFtbWFyJiBXZWJTcGVlY2hHcmFtbWFyOjpvcGVyYXRvcj0oY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+JiB2YWx1ZSkKK3sKKyAg
ICBtX3ByaXZhdGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlVSTCBXZWJT
cGVlY2hHcmFtbWFyOjpzcmMoKSBjb25zdAoreworICAgIFdFQktJVF9BU1NFUlQobV9wcml2YXRl
LmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zcmMoKTsKK30KKworZmxvYXQgV2ViU3Bl
ZWNoR3JhbW1hcjo6d2VpZ2h0KCkgY29uc3QKK3sKKyAgICBXRUJLSVRfQVNTRVJUKG1fcHJpdmF0
ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2VpZ2h0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwN2Y5NTYzNjYyNjg0
ZmM2MzE5Y2ZlMjIwODIxZDNjNjNlYThiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHAKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdC5oIgorCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25BbHRlcm5h
dGl2ZS5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojphc3NpZ24oY29uc3Qg
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90
aGVyLm1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6YXNz
aWduKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0cmFuc2NyaXB0cywgY29uc3QgV2ViVmVj
dG9yPGZsb2F0PiYgY29uZmlkZW5jZXMsIGJvb2wgZmluYWwpCit7CisgICAgQVNTRVJUKHRyYW5z
Y3JpcHRzLnNpemUoKSA9PSBjb25maWRlbmNlcy5zaXplKCkpOworCisgICAgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlPiA+IGFsdGVybmF0aXZlcyh0
cmFuc2NyaXB0cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNjcmlw
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoV2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZTo6Y3JlYXRlKHRyYW5zY3JpcHRzW2ldLCBjb25maWRl
bmNlc1tpXSkpOworCisgICAgbV9wcml2YXRlID0gV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ6OmNyZWF0ZShhbHRlcm5hdGl2ZXMsIGZpbmFsKTsKK30KKwordm9pZCBXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdDo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQor
CitXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDExYWVlYmE3NTE5ZDdhMWI5YTg2ZTgyN2Nh
N2I2Y2FjM2FlNTZmODcuLmYxYjA1ZDRiOWZiYmYyYjJjNWE1OGZmYmE4MWRmZDI1OTE0MGZiYmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTEwNyw3
ICsxMDcsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENsaWVudEltcGwuaCIKLSNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHkuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgpAQCAt
MzYxLDYgKzM2MSw5IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBj
bGllbnQpCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAsIG1fc3BlZWNoSW5wdXRDbGll
bnQoU3BlZWNoSW5wdXRDbGllbnRJbXBsOjpjcmVhdGUoY2xpZW50KSkKICNlbmRpZgorI2lmIEVO
QUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50KFNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmNyZWF0ZShjbGllbnQgPyBjbGllbnQtPnNwZWVj
aFJlY29nbml0aW9uQ2xpZW50KCkgOiAwKSkKKyNlbmRpZgogICAgICwgbV9kZXZpY2VPcmllbnRh
dGlvbkNsaWVudFByb3h5KGFkb3B0UHRyKG5ldyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5
KGNsaWVudCA/IGNsaWVudC0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKSA6IDApKSkKICAgICAs
IG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25DbGllbnRQ
cm94eShjbGllbnQgPyBjbGllbnQtPmdlb2xvY2F0aW9uQ2xpZW50KCkgOiAwKSkpCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKQEAgLTM5NCw3ICszOTcsNyBAQCBXZWJWaWV3SW1wbDo6V2ViVmll
d0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogICAgIHByb3ZpZGVTcGVlY2hJbnB1dFRvKG1f
cGFnZS5nZXQoKSwgbV9zcGVlY2hJbnB1dENsaWVudC5nZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoU0NSSVBURURfU1BFRUNIKQotICAgIHByb3ZpZGVTcGVlY2hSZWNvZ25pdGlvblRvKG1fcGFn
ZS5nZXQoKSwgMCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIG1fc3BlZWNoUmVjb2du
aXRpb25DbGllbnQuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8
IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKICAgICBwcm92aWRlTm90aWZpY2F0aW9uKG1f
cGFnZS5nZXQoKSwgbm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDIyOTM4YWQ2YmQ2YzQ5NzVmNzRmZTM3ZTQx
NTQ4N2ZlZWNhMTIxNWIuLmYzZGRlNTNhYmU0MWIwZTczNGU0NjVkNGZlMDE3ODM3MGFkMzBjNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtODUsNiArODUs
NyBAQCBjbGFzcyBEcmFnU2Nyb2xsVGltZXI7CiBjbGFzcyBHZW9sb2NhdGlvbkNsaWVudFByb3h5
OwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogY2xhc3MgU3BlZWNoSW5wdXRDbGll
bnRJbXBsOworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTsKIGNsYXNzIFVzZXJN
ZWRpYUNsaWVudEltcGw7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2Vi
Q29tcG9zaXRvckltcGw7CkBAIC03MTQsNiArNzE1LDEwIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KElOUFVUX1NQRUVDSCkKICAgICBPd25QdHI8U3BlZWNoSW5wdXRDbGllbnRJbXBsPiBtX3NwZWVj
aElucHV0Q2xpZW50OwogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBP
d25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eT4gbV9zcGVlY2hSZWNvZ25pdGlvbkNs
aWVudDsKKyNlbmRpZgorCiAgICAgLy8gSWYgd2UgYXR0ZW1wdCB0byBmZXRjaCB0aGUgb24tc2Ny
ZWVuIEdyYXBoaWNzQ29udGV4dDNEIGJlZm9yZQogICAgIC8vIHRoZSBjb21wb3NpdG9yIGhhcyBi
ZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byBpbnN0YW50aWF0ZSBpdAogICAgIC8vIGVhcmx5LiBU
aGlzIG1lbWJlciBob2xkcyBvbiB0byB0aGUgR0MzRCBpbiB0aGlzIGNhc2UuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133043</attachid>
            <date>2012-03-21 08:10:25 -0700</date>
            <delta_ts>2012-03-23 07:50:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120321151024.patch</filename>
            <type>text/plain</type>
            <size>41642</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JiZjhkZmZmYzcxZmVm
MTlhYWY5NjlmNDY5ODhlOTgxNDVlY2E5ZC4uMzZlZGFkYzFjODNhYWY5ZDA1NjIzNjA5Njc5Zjlk
MGM2NDYzNDU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAzLTIxICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3Jp
cHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BlZWNoR3JhbW1hcjo6c3JjKCkgaXMgY2FsbGVkIHdpdGgg
YSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBiZWNhdXNlCisgICAgICAgIHRoZSBhdHRyaWJ1dGUg
c2V0dGVyIG5lZWRzIGl0LiBQcm92aWRlIGEgc3JjKCkgbWV0aG9kIHRoYXQgZG9lc24ndAorICAg
ICAgICB0YWtlIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIGludGVy
bmFsbHkuCisKKyAgICAgICAgUmVuYW1lIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojp2aXNpYmls
aXR5SGlkZGVuKCkgdG8KKyAgICAgICAgbm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIG1pbm9yIGZpeC4KKworICAgICAgICAqIE1vZHVsZXMv
c3BlZWNoL1NwZWVjaEdyYW1tYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI6
OnNyYyk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQu
aDoKKyAgICAgICAgKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlcjo6bm90aWZ5VmlzaWJpbGl0eUhpZGRlbik6CisK
IDIwMTItMDMtMjEgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVwZGF0ZSBMYXlvdXRVbml0IHVzYWdlIGluIGRlc2NlbmRhbnRzIG9mIFJlbmRlclJlcGxh
Y2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc1YmE4Mjk4MjU4NTE2YTUxZTE2OTdj
NjBmODAwZjk2NjczOTU2ZjkuLjY2Y2QwOWEyMDRjMjdjNjI4MjFiNjhiNmYxYTBiMDc0Y2ZkNzdk
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTItMDMt
MjEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBTcGVlY2gg
SmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJvbWl1bQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcGx1bWJpbmcgZm9yIHNwZWVjaCByZWNv
Z25pdGlvbi4KKworICAgICAgICBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5IGltcGxlbWVu
dHMgdGhlIFNwZWVjaFJlY29nbml0aW9uCisgICAgICAgIGludGVyZmFjZSwgcHJveHlpbmcgY2Fs
bHMgdG8gYSBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaW5lbnQgaW50ZXJmYWNlLAorICAgICAgICB3
aGljaCB3aWxsIGJlIGltcGxlbWVudGVkIGluIENocm9taXVtLgorCisgICAgICAgIFRoZSBwcm94
eSBhbHNvIHBhc3NlcyBhbG9uZyBhIHBvaW50ZXIgdG8gYSBXZWJTcGVlY2hSZWNvZ25pdGlvbgor
ICAgICAgICBvYmplY3QsIHdoaWNoIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIFNwZWVjaFJlY29n
bml0aW9uIHdoZXJlIHRoYSBjYWxsCisgICAgICAgIG9yaWdpbmF0ZWQsIGFuZCB0aGF0IHNob3Vs
ZCByZWNlaXZlIGNhbGxiYWNrcy4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICog
cHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaEdyYW1tYXI6On5XZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKiBwdWJs
aWMvV2ViU3BlZWNoUmVjb2duaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKiBwdWJs
aWMvV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50OjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50OjpzdG9wKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb25DbGllbnQ6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQ6OnVucmVnaXN0ZXJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojpub3RpZnlWaXNpYmlsaXR5SGlkZGVuKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6On5XZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6fldlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlld0NsaWVudC5oOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3Q2xpZW50OjpzcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogc3Jj
L1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6On5TcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eTo6YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5Ojpub3RpZnlWaXNpYmlsaXR5SGlkZGVuKToKKyAgICAgICAgKFdlYktpdDo6
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6U3BlZWNo
UmVjb2duaXRpb25DbGllbnRQcm94eSk6CisgICAgICAgICogc3JjL1NwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoR3JhbW1hci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1h
cjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hH
cmFtbWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6c3JjKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU3BlZWNoR3JhbW1hcjo6d2VpZ2h0KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoUmVj
b2duaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uOjpXZWJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjphdWRpb1N0YXJ0Q2FsbGJhY2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6c291bmRTdGFydENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0YXJ0Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6YXVkaW9FbmRDYWxs
YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpyZXN1bHRDYWxs
YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpub01hdGNoQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0RGVs
ZXRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmVy
cm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6c3Rh
cnRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjplbmRD
YWxsYmFjayk6CisgICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdDo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5o
OgorICAgICAgICAoV2ViS2l0KToKKwogMjAxMi0wMy0yMSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRl
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgQW5kcm9pZCBidWls
ZC1maXggd2hlbiB0aGUgcHJvcGVyIGZpeCByb2xsZWQgaW50byBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaAppbmRleCA2MjA4OGMxOGIwYzhj
YjAxZDM0MDdkMWQyNjZiODJjYjZkZDJmMmY5Li5lMDgzNThiYmYxM2VkMmZmZWM0Y2U2NjYyMjY2
OWZlYjlhMTRhMGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hHcmFtbWFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNo
R3JhbW1hci5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTcGVlY2hHcmFtbWFyPiBjcmVhdGUoY29uc3QgS1VSTCYgc3JjLCBkb3VibGUgd2VpZ2h0KTsK
IAogICAgIGNvbnN0IEtVUkwmIHNyYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3QgeyBy
ZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBLVVJMJiBzcmMoKSBjb25zdCB7IHJldHVybiBtX3Ny
YzsgfQogICAgIHZvaWQgc2V0U3JjKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIHNyYyk7CiAKICAgICBkb3VibGUgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV93ZWlnaHQ7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29n
bml0aW9uQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNv
Z25pdGlvbkNsaWVudC5oCmluZGV4IDQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBm
MWJiZDQuLjE0NGQxYzEwNGIxNTExMjdjNGNlMGY4ODM4MTQ3YWE1NzBjZDU1NDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25D
bGllbnQuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
KFNwZWVjaFJlY29nbml0aW9uKiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJp
bmcmIGxhbmcsIGJvb2wgY29udGludW91cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNw
ZWVjaFJlY29nbml0aW9uKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChTcGVlY2hSZWNv
Z25pdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgdW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKikg
PSAwOwogCiAgICAgdmlydHVhbCB+U3BlZWNoUmVjb2duaXRpb25DbGllbnQoKSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25Db250cm9sbGVyLmgKaW5kZXggZWY1YzE5MDc1MGU4NWUzOWU1YjFjYzI1NjgxM2RhMTg1YjY4
ODcxYi4uZDI3YzQxMTBiMzFkZTE4NTViY2YyY2MwYzM0NjA0OWQzZTlmNDIzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b25Db250cm9sbGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnQo
U3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCog
Z3JhbW1hcnMsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSB7IG1fY2xpZW50
LT5zdGFydChyZWNvZ25pdGlvbiwgZ3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOyB9CiAgICAg
dm9pZCBzdG9wKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+c3Rv
cChyZWNvZ25pdGlvbik7IH0KICAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNv
Z25pdGlvbikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9Ci0gICAgdm9pZCB2aXNp
YmlsaXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+dmlzaWJpbGl0eUhpZGRlbigpOyB9CisgICAgdm9p
ZCBub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+bm90aWZ5VmlzaWJpbGl0eUhp
ZGRlbigpOyB9CiAgICAgdm9pZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVj
b2duaXRpb24qIHJlY29nbml0aW9uKSB7IG1fY2xpZW50LT51bnJlZ2lzdGVyU3BlZWNoUmVjb2du
aXRpb24ocmVjb2duaXRpb24pOyB9CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxTcGVlY2hSZWNv
Z25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDM3NmY2ZDQxMTZjNjg1ZGM4MTc3NDI0NTBmODIz
M2M5ZDBiMGU2NzcuLjk4Njg2MjlkY2QzODNkZjI4NjViYWFhY2Y1YzlkNDFlZjQ3ODZiMWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI1Miw5ICsyNTIsMTMgQEAKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJTb2NrZXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJT
b2NrZXRDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFy
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRMaXN0ZW5lci5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaElucHV0UmVzdWx0LmgnLAorICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb24uaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViU3BlbGxDaGVja0NsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YlN0b3JhZ2VBcmVhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlci5oJywKQEAgLTQ3MSw2ICs0NzUsOCBAQAogICAgICAgICAgICAgICAgICdzcmMv
U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TcGVl
Y2hJbnB1dENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0
Q2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJlYVByb3h5LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckNocm9taXVtLmNwcCcsCkBAIC02NTgsNyAr
NjY0LDEwIEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2NrZXRJbXBsLmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU29saWRDb2xvckxheWVyLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTcGVlY2hHcmFtbWFyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hJbnB1
dFJlc3VsdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoUmVjb2duaXRpb24u
Y3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdlZmU0
MTI4NmM0NjRjYjg3YzE3ZDI5YmU4ZDc1NjM5MTIxY2FkMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaApAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTcGVlY2hHcmFtbWFyX2gKKyNkZWZpbmUgV2ViU3Bl
ZWNoR3JhbW1hcl9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5n
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFNwZWVjaEdyYW1tYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJTcGVlY2hHcmFtbWFyIHsKK3B1YmxpYzoKKyAgICBXZWJTcGVlY2hHcmFtbWFyKCkgeyB9Cisg
ICAgfldlYlNwZWVjaEdyYW1tYXIoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQg
V2ViVVJMIHNyYygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgd2VpZ2h0KCkgY29u
c3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorICAgIFdlYlNwZWVjaEdyYW1tYXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OlNwZWVjaEdyYW1tYXI+Jik7CisgICAgV2ViU3BlZWNoR3JhbW1hciYgb3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYpOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiBt
X3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNw
ZWVjaEdyYW1tYXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU3BlZWNoUmVjb2duaXRpb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNwZWVjaFJlY29nbml0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFmZTJiN2QwZDg1YjExZTE0ZTMxODRm
ZDUwMWU5ZmM5MGY4MDdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25faAorI2RlZmluZSBXZWJTcGVlY2hSZWNv
Z25pdGlvbl9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3BlZWNo
UmVjb2duaXRpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdDsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgV2ViU3BlZWNoUmVj
b2duaXRpb24geworcHVibGljOgorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlNw
ZWVjaFJlY29nbml0aW9uKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKik7CisjZW5kaWYKKwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhdWRpb1N0YXJ0Q2FsbGJhY2soKTsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc291bmRTdGFydENhbGxiYWNrKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNwZWVjaFN0YXJ0Q2FsbGJhY2soKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc3BlZWNoRW5k
Q2FsbGJhY2soKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXN1bHRDYWxsYmFjayhjb25zdCBXZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdCYsIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBub01hdGNoQ2FsbGJhY2soY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzdWx0RGVsZXRlZENhbGxiYWNrKHVu
c2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+JiByZXN1bHRIaXN0b3J5KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZXJyb3JDYWxs
YmFjayhjb25zdCBXZWJTdHJpbmcmIG1zZywgdW5zaWduZWQgc2hvcnQgY29kZSk7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHN0YXJ0Q2FsbGJhY2soKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
ZW5kQ2FsbGJhY2soKTsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlv
biogbV9zcGVlY2hSZWNvZ25pdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25DbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTU3Y2NlNmYyM2QwZWY2NzMwY2EwNTZlZDUxNTM2MjdiOWI4ZDBjZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnRfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaEdyYW1tYXI7CitjbGFzcyBXZWJTcGVlY2hS
ZWNvZ25pdGlvbjsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBzdGFydChXZWJTcGVlY2hSZWNvZ25pdGlvbiosIGNvbnN0IFdl
YlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFyPiYsIFdlYlN0cmluZyBsYW5ndWFnZSwgYm9vbCBjb250
aW51b3VzKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKFdlYlNwZWVjaFJlY29nbml0aW9uKikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoV2ViU3BlZWNoUmVjb2duaXRpb24qKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVy
U3BlZWNoUmVjb2duaXRpb24oV2ViU3BlZWNoUmVjb2duaXRpb24qKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlWaXNpYmlsaXR5SGlkZGVu
KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KCkgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlM2Y1NDMxMTljNjFhNmIzZGQxZTUzY2VmZDA1
OGUwNTkzNjk4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0X2gKKyNkZWZpbmUgV2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlN0cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0IHsKK3B1YmxpYzoK
KyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgpIHsgfQorICAgIH5XZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFz
c2lnbihjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNjcmlwdHMsIGNvbnN0IFdlYlZl
Y3RvcjxmbG9hdD4mIGNvbmZpZGVuY2VzLCBib29sIGZpbmFsKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgYXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Jik7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAppbmRleCBmMjkw
MzNjNzIzODAwNWM1ZWQ3MmRhYzMxYjgxODlhYWQ0ODMzODE3Li5jNzE2ZDkyZWM0YjFiNTlhZmNi
Zjc4NmFlYzg0ZmMyNDgxMmRlMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlld0NsaWVudC5oCkBAIC02OCw2ICs2OCw3IEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlv
blByZXNlbnRlcjsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50OwogY2xhc3MgV2ViU3RvcmFnZU5hbWVzcGFjZTsKIGNsYXNzIFdlYlVSTDsK
IGNsYXNzIFdlYlVSTFJlcXVlc3Q7CkBAIC0zMTYsNiArMzE3LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoCiAg
ICAgICAgIFdlYlNwZWVjaElucHV0TGlzdGVuZXIqKSB7IHJldHVybiAwOyB9CiAKKyAgICAvLyBB
Y2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3Igc3BlZWNoIHJlY29nbml0aW9uIHNlcnZpY2VzLgor
ICAgIHZpcnR1YWwgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIHNwZWVjaFJlY29nbml0aW9u
Q2xpZW50KCkgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gRGV2aWNlIE9yaWVudGF0aW9uIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBB
Y2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgZGV2aWNlIG9yaWVudGF0aW9uIHNlcnZpY2VzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDBiNjU3ZGIwNTFjNzE4MGM0Nzc1MTNl
YTg4NTRlYzAwNGIwNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAKQEAgLTAsMCArMSw5OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5LmgiCisKKyNpbmNsdWRlICJTcGVlY2hHcmFtbWFyTGlzdC5oIgorI2luY2x1
ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvbi5o
IgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6flNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoKQoreworfQor
CitQYXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+IFNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHk6OmNyZWF0ZShXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogY2xpZW50
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eShjbGllbnQpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzdGFy
dChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24sIGNvbnN0IFdlYkNvcmU6
OlNwZWVjaEdyYW1tYXJMaXN0KiBncmFtbWFyTGlzdCwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29s
IGNvbnRpbnVvdXMpCit7CisgICAgaWYgKCFtX3JlY29nbml0aW9uTWFwLmNvbnRhaW5zKHJlY29n
bml0aW9uKSkKKyAgICAgICAgbV9yZWNvZ25pdGlvbk1hcC5zZXQocmVjb2duaXRpb24sIGFkb3B0
UHRyKG5ldyBXZWJTcGVlY2hSZWNvZ25pdGlvbihyZWNvZ25pdGlvbikpKTsKKworICAgIG1faGFz
RXZlckJlZW5TdGFydGVkID0gdHJ1ZTsKKworICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFy
PiB3ZWJTcGVlY2hHcmFtbWFycyhncmFtbWFyTGlzdC0+bGVuZ3RoKCkpOworICAgIGZvciAodW5z
aWduZWQgbG9uZyBpID0gMDsgaSA8IGdyYW1tYXJMaXN0LT5sZW5ndGgoKTsgKytpKQorICAgICAg
ICB3ZWJTcGVlY2hHcmFtbWFyc1tpXSA9IGdyYW1tYXJMaXN0LT5pdGVtKGkpOworCisgICAgV2Vi
U3BlZWNoUmVjb2duaXRpb24qIHdlYlNwZWVjaFJlY29nbml0aW9uID0gbV9yZWNvZ25pdGlvbk1h
cC5nZXQocmVjb2duaXRpb24pOworICAgIG1fY2xpZW50LT5zdGFydCh3ZWJTcGVlY2hSZWNvZ25p
dGlvbiwgd2ViU3BlZWNoR3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOworfQorCit2b2lkIFNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OnN0b3AoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRp
b24qIHJlY29nbml0aW9uKQoreworICAgIEFTU0VSVChtX3JlY29nbml0aW9uTWFwLmNvbnRhaW5z
KHJlY29nbml0aW9uKSk7CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24qIHdlYlNwZWVjaFJlY29n
bml0aW9uID0gbV9yZWNvZ25pdGlvbk1hcC5nZXQocmVjb2duaXRpb24pOworICAgIG1fY2xpZW50
LT5zdG9wKHdlYlNwZWVjaFJlY29nbml0aW9uKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjphYm9ydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRp
b24pCit7CisgICAgQVNTRVJUKG1fcmVjb2duaXRpb25NYXAuY29udGFpbnMocmVjb2duaXRpb24p
KTsKKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbiogd2ViU3BlZWNoUmVjb2duaXRpb24gPSBtX3Jl
Y29nbml0aW9uTWFwLmdldChyZWNvZ25pdGlvbik7CisgICAgbV9jbGllbnQtPmFib3J0KHdlYlNw
ZWVjaFJlY29nbml0aW9uKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
Ojpub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkKK3sKKyAgICBpZiAobV9oYXNFdmVyQmVlblN0YXJ0
ZWQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCk7Cit9CisKK3Zv
aWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6dW5yZWdpc3RlclNwZWVjaFJlY29nbml0
aW9uKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikKK3sKKyAgICBpZiAo
IW1fcmVjb2duaXRpb25NYXAuY29udGFpbnMocmVjb2duaXRpb24pKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbiogd2ViU3BlZWNoUmVjb2duaXRpb24gPSBtX3Jl
Y29nbml0aW9uTWFwLmdldChyZWNvZ25pdGlvbik7CisgICAgbV9jbGllbnQtPnVucmVnaXN0ZXJT
cGVlY2hSZWNvZ25pdGlvbih3ZWJTcGVlY2hSZWNvZ25pdGlvbik7CisgICAgbV9yZWNvZ25pdGlv
bk1hcC5yZW1vdmUocmVjb2duaXRpb24pOworfQorCitTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KFdlYlNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2hhc0V2ZXJCZWVu
U3RhcnRlZChmYWxzZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTU4MWFkMzVjYWE1YzVmMWU5NTRmMDQ0ZjhjNGI3NzRkZTRlY2Fh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHkuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5X2gKKyNkZWZpbmUgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvbjsKK2NsYXNzIFdlYlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50OworY2xhc3MgV2ViU3RyaW5nOworCitjbGFzcyBTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5IDogcHVibGljIFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB+U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSgpOwor
CisgICAgLy8gQ29uc3RydWN0aW5nIGEgcHJveHkgb2JqZWN0IHdpdGggYSAwIFdlYlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50IGlzIHNhZmUgaW4KKyAgICAvLyBpdHNlbGYsIGJ1dCBhdHRlbXB0aW5n
IHRvIGNhbGwgc3RhcnQvc3RvcC9hYm9ydCBvbiBpdCB3aWxsIGNyYXNoLgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+IGNyZWF0ZShXZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCopOworCisgICAgLy8gV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25D
bGllbnQ6CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
KiwgY29uc3QgV2ViQ29yZTo6U3BlZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJpbmcmIGxhbmcs
IGJvb2wgY29udGludW91cykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoV2ViQ29y
ZTo6U3BlZWNoUmVjb2duaXRpb24qKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQo
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24qKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1bnJl
Z2lzdGVyU3BlZWNoUmVjb2duaXRpb24oV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24qKSBPVkVS
UklERTsgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG5ldmVyIGdldHMgY2FsbGVkLgorCitwcml2
YXRlOgorICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoV2ViU3BlZWNoUmVjb2duaXRp
b25DbGllbnQqKTsKKworICAgIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KiBtX2NsaWVudDsK
KyAgICBIYXNoTWFwPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKiwgT3duUHRyPFdlYlNwZWVj
aFJlY29nbml0aW9uPiA+IG1fcmVjb2duaXRpb25NYXA7CisgICAgYm9vbCBtX2hhc0V2ZXJCZWVu
U3RhcnRlZDsKK307CisKK307IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU3BlZWNoR3JhbW1hci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTcGVlY2hHcmFtbWFyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmNjZDQwY2JjMWI0NTgxZDFhYzY2
NGUwZGY0MzBhZDAwMDkzNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU3BlZWNoR3JhbW1hci5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hHcmFtbWFyLmgiCisKKyNpbmNs
dWRlICJTcGVlY2hHcmFtbWFyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViU3BlZWNoR3JhbW1hcjo6cmVzZXQoKQoreworICAg
IG1fcHJpdmF0ZS5yZXNldCgpOworfQorCitXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFt
bWFyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVlKQorICAg
IDogbV9wcml2YXRlKHZhbHVlKQoreworfQorCitXZWJTcGVlY2hHcmFtbWFyJiBXZWJTcGVlY2hH
cmFtbWFyOjpvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdy
YW1tYXI+JiB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYlVSTCBXZWJTcGVlY2hHcmFtbWFyOjpzcmMoKSBjb25zdAoreworICAgIFdF
QktJVF9BU1NFUlQobV9wcml2YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zcmMo
KTsKK30KKworZmxvYXQgV2ViU3BlZWNoR3JhbW1hcjo6d2VpZ2h0KCkgY29uc3QKK3sKKyAgICBX
RUJLSVRfQVNTRVJUKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2Vp
Z2h0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb24uY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMjQz
Y2NlYmU2ZmEyMWI2OGZjMzNhZDc1NWU0ZTBiMDA1YTVkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbi5jcHAKQEAgLTAs
MCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Bl
ZWNoUmVjb2duaXRpb24uaCIKKworI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uLmgiCisjaW5j
bHVkZSAiU3BlZWNoUmVjb2duaXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgiCisj
aW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViU3BlZWNoUmVjb2duaXRpb246OldlYlNwZWVjaFJlY29nbml0aW9uKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uKiBzcGVlY2hSZWNvZ25pdGlvbikKKyAgICA6IG1fc3BlZWNo
UmVjb2duaXRpb24oc3BlZWNoUmVjb2duaXRpb24pCit7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVj
b2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpCit7CisgICAgbV9zcGVlY2hSZWNvZ25pdGlv
bi0+YXVkaW9TdGFydENhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246
OnNvdW5kU3RhcnRDYWxsYmFjaygpCit7CisgICAgbV9zcGVlY2hSZWNvZ25pdGlvbi0+c291bmRT
dGFydENhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0
YXJ0Q2FsbGJhY2soKQoreworICAgIG1fc3BlZWNoUmVjb2duaXRpb24tPnNwZWVjaFN0YXJ0Q2Fs
bGJhY2soKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJh
Y2soKQoreworICAgIG1fc3BlZWNoUmVjb2duaXRpb24tPnNwZWVjaEVuZENhbGxiYWNrKCk7Cit9
CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmF1ZGlvRW5kQ2FsbGJhY2soKQoreworICAg
IG1fc3BlZWNoUmVjb2duaXRpb24tPmF1ZGlvRW5kQ2FsbGJhY2soKTsKK30KKwordm9pZCBXZWJT
cGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0Q2FsbGJhY2soY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVj
dG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkKK3sKKyAgICBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+IHJlc3VsdEhp
c3RvcnlWZWN0b3IocmVzdWx0SGlzdG9yeS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0SGlzdG9yeS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0SGlzdG9yeVZl
Y3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5W2ldKSk7CisKKyAgICBtX3NwZWVjaFJlY29nbml0
aW9uLT5yZXN1bHRDYWxsYmFjayhyZXN1bHQsIHJlc3VsdEluZGV4LCBXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246Om5vTWF0Y2hDYWxsYmFjayhjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0KQoreworICAgIG1fc3BlZWNoUmVjb2duaXRpb24t
Pm5vTWF0Y2hDYWxsYmFjayhyZXN1bHQpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9u
OjpyZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpCit7CisgICAg
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gPiByZXN1bHRI
aXN0b3J5VmVjdG9yKHJlc3VsdEhpc3Rvcnkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlc3VsdEhpc3Rvcnkuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdEhpc3RvcnlW
ZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ+ID4ocmVzdWx0SGlzdG9yeVtpXSkpOworCisgICAgbV9zcGVlY2hSZWNvZ25p
dGlvbi0+cmVzdWx0RGVsZXRlZENhbGxiYWNrKHJlc3VsdEluZGV4LCBXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2soY29uc3QgV2ViU3RyaW5n
JiBtc2csIHVuc2lnbmVkIHNob3J0IGNvZGUpCit7CisgICAgV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb25FcnJvcjo6Q29kZSBlcnJvckNvZGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvbkVycm9yOjpDb2RlPihjb2RlKTsKKyAgICBtX3NwZWVjaFJlY29nbml0aW9uLT5l
cnJvckNhbGxiYWNrKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uRXJyb3I6OmNyZWF0ZShlcnJv
ckNvZGUsIG1zZykpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uOjpzdGFydENhbGxi
YWNrKCkKK3sKKyAgICBtX3NwZWVjaFJlY29nbml0aW9uLT5zdGFydENhbGxiYWNrKCk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmVuZENhbGxiYWNrKCkKK3sKKyAgICBtX3NwZWVj
aFJlY29nbml0aW9uLT5lbmRDYWxsYmFjaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDdmOTU2MzY2MjY4NGZjNjMxOWNmZTIyMDgy
MWQzYzYzZWE4YmM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQuaCIKKworI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUuaCIKKyNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6YXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7
Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmFzc2lnbihjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNjcmlwdHMsIGNvbnN0IFdlYlZlY3RvcjxmbG9hdD4mIGNv
bmZpZGVuY2VzLCBib29sIGZpbmFsKQoreworICAgIEFTU0VSVCh0cmFuc2NyaXB0cy5zaXplKCkg
PT0gY29uZmlkZW5jZXMuc2l6ZSgpKTsKKworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZT4gPiBhbHRlcm5hdGl2ZXModHJhbnNjcmlwdHMuc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zY3JpcHRzLnNpemUoKTsgKytp
KQorICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
QWx0ZXJuYXRpdmU6OmNyZWF0ZSh0cmFuc2NyaXB0c1tpXSwgY29uZmlkZW5jZXNbaV0pKTsKKwor
ICAgIG1fcHJpdmF0ZSA9IFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpjcmVhdGUo
YWx0ZXJuYXRpdmVzLCBmaW5hbCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKworV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCAxMWFlZWJhNzUxOWQ3YTFiOWE4NmU4MjdjYTdiNmNhYzNhZTU2Zjg3
Li5mMWIwNWQ0YjlmYmJmMmIyYzVhNThmZmJhODFkZmQyNTkxNDBmYmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiU3BlZWNoUmVj
b2duaXRpb25DbGllbnQuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKQEAgLTM2MSw2ICszNjEsOSBA
QCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgLCBtX3NwZWVjaElucHV0Q2xpZW50KFNwZWVjaElucHV0
Q2xpZW50SW1wbDo6Y3JlYXRlKGNsaWVudCkpCiAjZW5kaWYKKyNpZiBFTkFCTEUoU0NSSVBURURf
U1BFRUNIKQorICAgICwgbV9zcGVlY2hSZWNvZ25pdGlvbkNsaWVudChTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpjcmVhdGUoY2xpZW50ID8gY2xpZW50LT5zcGVlY2hSZWNvZ25pdGlvbkNs
aWVudCgpIDogMCkpCisjZW5kaWYKICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94
eShhZG9wdFB0cihuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGll
bnQtPmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0aW9u
Q2xpZW50UHJveHkoYWRvcHRQdHIobmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50ID8g
Y2xpZW50LT5nZW9sb2NhdGlvbkNsaWVudCgpIDogMCkpKQogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCkBAIC0zOTQsNyArMzk3LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdD
bGllbnQqIGNsaWVudCkKICAgICBwcm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCksIG1f
c3BlZWNoSW5wdXRDbGllbnQuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVEX1NQ
RUVDSCkKLSAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDApOyAv
LyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgaW1wbGVtZW50YXRpb24uCisgICAgcHJvdmlkZVNwZWVj
aFJlY29nbml0aW9uVG8obV9wYWdlLmdldCgpLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmdl
dCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZ
X05PVElGSUNBVElPTlMpCiAgICAgcHJvdmlkZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0KCksIG5v
dGlmaWNhdGlvblByZXNlbnRlckltcGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCAyMjkzOGFkNmJkNmM0OTc1Zjc0ZmUzN2U0MTU0ODdmZWVjYTEyMTVi
Li5mM2RkZTUzYWJlNDFiMGU3MzRlNDY1ZDRmZTAxNzgzNzBhZDMwYzZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTg1LDYgKzg1LDcgQEAgY2xhc3MgRHJh
Z1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9jYXRpb25DbGllbnRQcm94eTsKIGNsYXNzIE5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdDsKIGNsYXNzIFNwZWVjaElucHV0Q2xpZW50SW1wbDsKK2NsYXNz
IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk7CiBjbGFzcyBVc2VyTWVkaWFDbGllbnRJbXBs
OwogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbXBs
OwpAQCAtNzE0LDYgKzcxNSwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gp
CiAgICAgT3duUHRyPFNwZWVjaElucHV0Q2xpZW50SW1wbD4gbV9zcGVlY2hJbnB1dENsaWVudDsK
ICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgT3duUHRyPFNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk+IG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CisjZW5kaWYK
KwogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGljc0Nv
bnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQgb24s
IHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIgaG9s
ZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133484</attachid>
            <date>2012-03-23 07:41:01 -0700</date>
            <delta_ts>2012-03-26 07:44:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120323144059.patch</filename>
            <type>text/plain</type>
            <size>43786</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU4NTE3MTI5MGRkZmEx
ZGRlZTA3ZWE2MWEyYjMzMDY1MmJhNGIwZi4uMDQwNmE0ZmFkZWNmOTYyZjBjMjYzNTdlMjExMDQ4
YjRiN2M0ZWY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAzLTIzICBIYW5z
IFdlbm5ib3JnICA8aHdlbm5ib3JnQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BlZWNoIEphdmFT
Y3JpcHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWNoR3JhbW1hcjo6c3JjKCkgaXMgY2FsbGVkIHdp
dGggYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBiZWNhdXNlCisgICAgICAgIHRoZSBhdHRyaWJ1
dGUgc2V0dGVyIG5lZWRzIGl0LiBQcm92aWRlIGEgc3JjKCkgbWV0aG9kIHRoYXQgZG9lc24ndAor
ICAgICAgICB0YWtlIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIGlu
dGVybmFsbHkuCisKKyAgICAgICAgUmVuYW1lIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojp2aXNp
YmlsaXR5SGlkZGVuKCkgdG8KKyAgICAgICAgbm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpLgorCisg
ICAgICAgIFJlbW92ZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dW5yZWdpc3RlclNwZWVjaFJl
Y29nbml0aW9uLAorICAgICAgICBpdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywganVzdCBtaW5vciB0d2Vha3MuCisKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVl
Y2hHcmFtbWFyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hHcmFtbWFyOjpzcmMpOgorICAg
ICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAg
IChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvbkNvbnRyb2xsZXI6Om5vdGlmeVZpc2liaWxpdHlIaWRkZW4pOgorCiAyMDEyLTAzLTIz
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIGNzc1RleHQgc2hv
dWxkIHVzZSBTdHJpbmdCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGZjNzc2
ZGM3ZTcyYzkyNGQyNDJhZWI4YjBmODk5YTUzM2Q2ZGZlN2YuLjkwNzMwZDFjZTNkYjc3ODg0NzU2
ZDJjMDc5NmFkYTI4ODQ5ODA1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTA1IEBACisyMDEyLTAzLTIzICBIYW5zIFdlbm5ib3JnICA8aHdlbm5ib3JnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21p
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBs
dW1iaW5nIGZvciBzcGVlY2ggcmVjb2duaXRpb24uCisKKyAgICAgICAgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eSBpbXBsZW1lbnRzIHRoZSBTcGVlY2hSZWNvZ25pdGlvbgorICAgICAgICBp
bnRlcmZhY2UsIHByb3h5aW5nIGNhbGxzIHRvIGEgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQg
aW50ZXJmYWNlLAorICAgICAgICB3aGljaCB3aWxsIGJlIGltcGxlbWVudGVkIGluIENocm9taXVt
LgorCisgICAgICAgIFRoZSBwcm94eSBhbHNvIHBhc3NlcyBhbG9uZyBhIHJlZmVyZW5jZSB0byBh
IFdlYlNwZWVjaFJlY29nbml0aW9uCisgICAgICAgIG9iamVjdCwgd2hpY2ggd3JhcHMgYSBwb2lu
dGVyIHRvIHRoZSBTcGVlY2hSZWNvZ25pdGlvbiBvYmplY3Qgd2hlcmUKKyAgICAgICAgdGhlIGNh
bGwgb3JpZ2luYXRlZC4gU3BlZWNoIHJlY29nbml0aW9uIHByb2dyZXNzLCByZXN1bHRzLCBhbmQg
ZXJyb3JzCisgICAgICAgIGFyZSByZXBvcnRlZCB2aWEgY2FsbGJhY2sgZnVuY3Rpb25zIG9uIHRo
aXMgb2JqZWN0LgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2Vi
U3BlZWNoR3JhbW1hci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoR3JhbW1hcjo6fldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVl
Y2hSZWNvZ25pdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXRpb246On5XZWJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpXZWJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChXZWJLaXQ6Om9wZXJhdG9yPCk6CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVj
b2duaXRpb25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudDo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dDo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojph
Ym9ydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojpub3Rp
ZnlWaXNpYmlsaXR5SGlkZGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRp
b25DbGllbnQ6On5XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogcHVibGlj
L1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6V2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdDo6fldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBwdWJsaWMv
V2ViVmlld0NsaWVudC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdDbGll
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpzcGVlY2hSZWNvZ25pdGlvbkNs
aWVudCk6CisgICAgICAgICogc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHk6On5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RhcnQpOgorICAgICAgICAo
V2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdl
YktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6YWJvcnQpOgorICAgICAgICAoV2Vi
S2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojpub3RpZnlWaXNpYmlsaXR5SGlkZGVu
KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6U3BlZWNo
UmVjb2duaXRpb25DbGllbnRQcm94eSk6CisgICAgICAgICogc3JjL1NwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoR3JhbW1hci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1h
cjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hH
cmFtbWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6c3JjKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU3BlZWNoR3JhbW1hcjo6d2VpZ2h0KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoUmVj
b2duaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
dGlvbjo6ZXF1YWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246Omxl
c3NUaGFuKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmF1ZGlvU3Rh
cnRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpzb3Vu
ZFN0YXJ0Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6
c3BlZWNoU3RhcnRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0
aW9uOjpzcGVlY2hFbmRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uOjphdWRpb0VuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb246OnJlc3VsdENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb246Om5vTWF0Y2hDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJl
Y29nbml0aW9uOjpyZXN1bHREZWxldGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pdGlvbjo6ZXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaFJlY29nbml0aW9uOjpzdGFydENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoUmVjb2duaXRpb246OmVuZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNo
UmVjb2duaXRpb246OldlYlNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPik6Cisg
ICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dDo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6
OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9w
ZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KToKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6V2ViVmlld0ltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAo
V2ViS2l0KToKKwogMjAxMi0wMy0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBDaHJvbWl1bSBERVBTIHJvbGwgcjEyNzkxMzpyMTI4NDI2LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCmluZGV4IDYyMDg4YzE4YjBj
OGNiMDFkMzQwN2QxZDI2NmI4MmNiNmRkMmYyZjkuLmUwODM1OGJiZjEzZWQyZmZlYzRjZTY2NjIy
NjY5ZmViOWExNGEwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaEdyYW1tYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hHcmFtbWFyLmgKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNwZWVjaEdyYW1tYXI+IGNyZWF0ZShjb25zdCBLVVJMJiBzcmMsIGRvdWJsZSB3ZWlnaHQp
OwogCiAgICAgY29uc3QgS1VSTCYgc3JjKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdCB7
IHJldHVybiBtX3NyYzsgfQorICAgIGNvbnN0IEtVUkwmIHNyYygpIGNvbnN0IHsgcmV0dXJuIG1f
c3JjOyB9CiAgICAgdm9pZCBzZXRTcmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgc3JjKTsKIAogICAgIGRvdWJsZSB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3dlaWdo
dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb25DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uQ2xpZW50LmgKaW5kZXggNDYyNTU4MDdmMWMxNjg2MzRjOWM0MGI2ZmUxMTdmNjhi
MGYxYmJkNC4uZDU5YzVjOWFlNjE3ZTdlYWExYTFkMjUyNWFkZmNjMDA2MGQyZDMwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlv
bkNsaWVudC5oCkBAIC00MSw4ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnQoU3BlZWNoUmVjb2duaXRpb24qLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCosIGNvbnN0IFN0
cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3Ao
U3BlZWNoUmVjb2duaXRpb24qKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KFNwZWVjaFJl
Y29nbml0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5SGlkZGVuKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVj
b2duaXRpb24qKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVZpc2liaWxpdHlIaWRkZW4o
KSA9IDA7CiAKICAgICB2aXJ0dWFsIH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb25Db250cm9sbGVyLmgKaW5kZXggZWY1YzE5MDc1MGU4NWUzOWU1YjFjYzI1NjgxM2Rh
MTg1YjY4ODcxYi4uOTlhZWE4NjhjZDRkMTQ1Mzg5ZmY2NDg3YTQ1ZDg2OGE3ZmM1Zjg3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb25Db250cm9sbGVyLmgKQEAgLTQxLDggKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c3RhcnQoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFy
TGlzdCogZ3JhbW1hcnMsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSB7IG1f
Y2xpZW50LT5zdGFydChyZWNvZ25pdGlvbiwgZ3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOyB9
CiAgICAgdm9pZCBzdG9wKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVu
dC0+c3RvcChyZWNvZ25pdGlvbik7IH0KICAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9u
KiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9Ci0gICAgdm9p
ZCB2aXNpYmlsaXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+dmlzaWJpbGl0eUhpZGRlbigpOyB9Ci0g
ICAgdm9pZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qIHJl
Y29nbml0aW9uKSB7IG1fY2xpZW50LT51bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24ocmVjb2du
aXRpb24pOyB9CisgICAgdm9pZCBub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+
bm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpOyB9CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxTcGVl
Y2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZShTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCop
OwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggYjJjYzI5ODZmNmNmMGQyZWE3ZWZlMDRmMTgxZDdj
YTkzZGI3ZDkyYS4uYTgxODk4NzRkOGJkZWM1OWQxZDZkMTgxZWJkN2EyN2U5NTc4MzMxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjU1LDkgKzI1NSwxMyBAQAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlNvY2tldC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNv
Y2tldENsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaEdyYW1tYXIu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hJbnB1dExpc3RlbmVyLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRSZXN1bHQuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvbi5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTcGVsbENoZWNrQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
U3RvcmFnZUFyZWEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmgnLApAQCAtNDc0LDYgKzQ3OCw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9T
b2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVj
aElucHV0Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoSW5wdXRD
bGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VBcmVhUHJveHkuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9TdG9yYWdlRXZlbnREaXNwYXRjaGVyQ2hyb21pdW0uY3BwJywKQEAgLTY2Myw3ICs2
NjksMTAgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YlNwZWVjaEdyYW1tYXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaElucHV0
UmVzdWx0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbi5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VmZTQx
Mjg2YzQ2NGNiODdjMTdkMjliZThkNzU2MzkxMjFjYWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoR3JhbW1hci5oCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaEdyYW1tYXJfaAorI2RlZmluZSBXZWJTcGVl
Y2hHcmFtbWFyX2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2luY2x1ZGUg
InBsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcu
aCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgU3BlZWNoR3JhbW1hcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlNwZWVjaEdyYW1tYXIgeworcHVibGljOgorICAgIFdlYlNwZWVjaEdyYW1tYXIoKSB7IH0KKyAg
ICB+V2ViU3BlZWNoR3JhbW1hcigpIHsgcmVzZXQoKTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCBX
ZWJVUkwgc3JjKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBmbG9hdCB3ZWlnaHQoKSBjb25z
dDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViU3BlZWNoR3JhbW1hcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6U3BlZWNoR3JhbW1hcj4mKTsKKyAgICBXZWJTcGVlY2hHcmFtbWFyJiBvcGVyYXRvcj0o
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+Jik7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3Bl
ZWNoR3JhbW1hcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJTcGVlY2hSZWNvZ25pdGlvbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U3BlZWNoUmVjb2duaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTQxYzVhYmMyN2IwNmJjZmMxZTI5NjFl
MjliYjU1MjI3MGMxNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb24uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25faAorI2RlZmluZSBXZWJTcGVlY2hSZWNv
Z25pdGlvbl9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ7Citj
bGFzcyBXZWJTdHJpbmc7CisKKy8vIFdyYXBwZXIgYXJvdW5kIGEgU3BlZWNoUmVjb2duaXRpb24g
cG9pbnRlci4KK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uIHsKK3B1YmxpYzoKKyAgICB+V2Vi
U3BlZWNoUmVjb2duaXRpb24oKSB7IHJlc2V0KCk7IH0KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlv
bigpIHsgfQorCisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24oY29uc3QgV2ViU3BlZWNoUmVjb2du
aXRpb24mIG90aGVyKSB7IGFzc2lnbihvdGhlcik7IH0KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlv
biYgb3BlcmF0b3I9KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGFzc2lnbihvdGhlcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNz
aWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJik7CisKKyAgICAvLyBDb21wYXJpc29uIGZ1
bmN0aW9ucyBhcmUgcHJvdmlkZWQgc28gdGhhdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiBvYmplY3Rz
CisgICAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIGhhc2ggbWFwLgorICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCBlcXVhbHMoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mKSBjb25zdDsKKyAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgbGVzc1RoYW4oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mKSBjb25z
dDsKKworICAgIC8vIFNwZWVjaFJlY29nbml0aW9uIGZ1bmN0aW9uczoKKyAgICAvLyBUaGVzZSBj
b3JyZXNwb25kIHRvIHRoZSBhdWRpb3N0YXJ0LCBzb3VuZHN0YXJ0LCByZXN1bHQsIG5vbWF0Y2gs
IGV0Yy4KKyAgICAvLyBldmVudHMgYXMgc3BlY2lmaWVkIGluIHRoZSBTcGVlY2ggSmF2YVNjcmlw
dCBBUEkuIFdoZW4gc3BlZWNoIHJlY29nbml0aW9uCisgICAgLy8gaXMgc3RhcnRlZCAodmlhIGEg
Y2FsbCB0byBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6c3RhcnQpLAorICAgIC8vIHRoZSBl
bWJlZGRlciB3aWxsIGNhbGwgYmFjayB2aWEgdGhlc2UgbWV0aG9kcyB0byByZXBvcnQgcHJvZ3Jl
c3MsCisgICAgLy8gcmVzdWx0cywgb3IgZXJyb3JzLiBUaGUgY2FsbHMgYXJlIGZvcndhcmRlZCB0
byB0aGUgd3JhcHBlZAorICAgIC8vIFNwZWVjaFJlY29nbml0aW9uIG9iamVjdCwgd2hpY2ggd2ls
bCBmaXJlIHRoZSBldmVudHMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGF1ZGlvU3RhcnRDYWxs
YmFjaygpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzb3VuZFN0YXJ0Q2FsbGJhY2soKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc3BlZWNoU3RhcnRDYWxsYmFjaygpOworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzcGVlY2hFbmRDYWxsYmFjaygpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
dWRpb0VuZENhbGxiYWNrKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc3VsdENhbGxiYWNr
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiwgdW5zaWduZWQgbG9uZyByZXN1bHRJ
bmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0
SGlzdG9yeSk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIG5vTWF0Y2hDYWxsYmFjayhjb25zdCBX
ZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXN1
bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpOworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBlcnJvckNhbGxiYWNrKGNvbnN0IFdlYlN0cmluZyYgbXNnLCB1bnNpZ25lZCBz
aG9ydCBjb2RlKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc3RhcnRDYWxsYmFjaygpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBlbmRDYWxsYmFjaygpOworCisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uPiYpOworICAgIFdlYlNwZWVjaFJlY29nbml0aW9uJiBv
cGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2Vi
Q29yZTo6U3BlZWNoUmVjb2duaXRpb24+IG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mIGEsIGNvbnN0IFdlYlNwZWVjaFJl
Y29nbml0aW9uJiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhiKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiYgYSwgY29uc3QgV2ViU3Bl
ZWNoUmVjb2duaXRpb24mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJiBhLCBjb25zdCBXZWJT
cGVlY2hSZWNvZ25pdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5sZXNzVGhhbihiKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjNhMjE4NTFlOTY2YjgyMjA2Yjgw
MGI4ZWFlMDk3YzZjNzk2NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudF9oCisjZGVmaW5l
IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNv
bW1vbi5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNo
R3JhbW1hcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uOworCitjbGFzcyBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGNvcnJl
c3BvbmQgdG8gdGhlIHN0YXJ0LCBzdG9wIGFuZCBhYm9ydCBmdW5jdGlvbnMgaW4gdGhlCisgICAg
Ly8gSmF2YVNjcmlwdCBTcGVlY2ggQVBJLiBUaGUgZW1iZWRkZXIgc2hvdWxkIHVzZSB0aGUgV2Vi
U3BlZWNoUmVjb2duaXRpb24KKyAgICAvLyBvYmplY3QgdG8gcmVwb3J0IG9uIHByb2dyZXNzLCBy
ZXN1bHRzIGFuZCBlcnJvcnMuCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KGNvbnN0IFdlYlNwZWVj
aFJlY29nbml0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaEdyYW1tYXI+JiwgY29uc3Qg
V2ViU3RyaW5nJiBsYW5ndWFnZSwgYm9vbCBjb250aW51b3VzKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdG9wKGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZSBQYWdlIGJl
Y29tZXMgaGlkZGVuLCBhbmQgc2hvdWxkIGNhdXNlIGFueQorICAgIC8vIG9uZ29pbmcgc3BlZWNo
IHJlY29nbml0aW9uIHRvIGJlIGFib3J0ZWQuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVZpc2li
aWxpdHlIaWRkZW4oKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQoKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2duaXRpb25D
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUzZjU0MzExOWM2MWE2YjNk
ZDFlNTNjZWZkMDU4ZTA1OTM2OThkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHRfaAorI2RlZmlu
ZSBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJD
b21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQg
eworcHVibGljOgorICAgIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyB9CisgICAgfldl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0cmFuc2NyaXB0cywg
Y29uc3QgV2ViVmVjdG9yPGZsb2F0PiYgY29uZmlkZW5jZXMsIGJvb2wgZmluYWwpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQm
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdD4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZh
dGVQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
d0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5o
CmluZGV4IGYyOTAzM2M3MjM4MDA1YzVlZDcyZGFjMzFiODE4OWFhZDQ4MzM4MTcuLmM3MTZkOTJl
YzRiMWI1OWFmY2JmNzg2YWVjODRmYzI0ODEyZGUzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKQEAgLTY4LDYgKzY4LDcgQEAgY2xhc3MgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgV2ViUmFuZ2U7CiBjbGFzcyBXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOworY2xhc3MgV2Vi
U3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CiBjbGFzcyBXZWJTdG9yYWdlTmFtZXNwYWNlOwogY2xh
c3MgV2ViVVJMOwogY2xhc3MgV2ViVVJMUmVxdWVzdDsKQEAgLTMxNiw2ICszMTcsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29u
dHJvbGxlcigKICAgICAgICAgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopIHsgcmV0dXJuIDA7IH0K
IAorICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRkZXIgQVBJIGZvciBzcGVlY2ggcmVjb2duaXRpb24g
c2VydmljZXMuCisgICAgdmlydHVhbCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogc3BlZWNo
UmVjb2duaXRpb25DbGllbnQoKSB7IHJldHVybiAwOyB9CisKICAgICAvLyBEZXZpY2UgT3JpZW50
YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRkZXIgQVBJIGZvciBkZXZpY2Ugb3JpZW50YXRpb24g
c2VydmljZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Nw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkOWZjNGM5Y2NmM2M3
NTVkZTIyZDRiZDU5ZTk4YjBjMmMxZWFkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcApAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCIKKworI2luY2x1ZGUgIlNwZWVjaEdyYW1tYXJMaXN0
LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb24uaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hH
cmFtbWFyLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb24uaCIKKyNpbmNsdWRlICJX
ZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp+U3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eSgpCit7Cit9CisKK1Bhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eT4g
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKFdlYlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5KGNsaWVudCkpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OnN0YXJ0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29uc3QgU3Bl
ZWNoR3JhbW1hckxpc3QqIGdyYW1tYXJMaXN0LCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29u
dGludW91cykKK3sKKyAgICBtX2hhc0V2ZXJCZWVuU3RhcnRlZCA9IHRydWU7CisKKyAgICBXZWJW
ZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4gd2ViU3BlZWNoR3JhbW1hcnMoZ3JhbW1hckxpc3QtPmxl
bmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBncmFtbWFyTGlzdC0+
bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgd2ViU3BlZWNoR3JhbW1hcnNbaV0gPSBncmFtbWFyTGlz
dC0+aXRlbShpKTsKKworICAgIG1fY2xpZW50LT5zdGFydChXZWJTcGVlY2hSZWNvZ25pdGlvbihy
ZWNvZ25pdGlvbiksIHdlYlNwZWVjaEdyYW1tYXJzLCBsYW5nLCBjb250aW51b3VzKTsKK30KKwor
dm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpzdG9wKFNwZWVjaFJlY29nbml0aW9u
KiByZWNvZ25pdGlvbikKK3sKKyAgICBtX2NsaWVudC0+c3RvcChXZWJTcGVlY2hSZWNvZ25pdGlv
bihyZWNvZ25pdGlvbikpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OmFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikKK3sKKyAgICBtX2NsaWVudC0+
YWJvcnQoV2ViU3BlZWNoUmVjb2duaXRpb24ocmVjb2duaXRpb24pKTsKK30KKwordm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojpub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkKK3sKKyAg
ICBpZiAobV9oYXNFdmVyQmVlblN0YXJ0ZWQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlWaXNp
YmlsaXR5SGlkZGVuKCk7Cit9CisKK1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHkoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIGNsaWVu
dCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1faGFzRXZlckJlZW5TdGFydGVkKGZh
bHNlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mODA0NGJjZTg4N2VmZWY4NGUxOGFkOTA4NWQxY2E0ODc5ZDgwMGU3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHlfaAorI2RlZmluZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVj
b2duaXRpb25DbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OworY2xhc3MgV2ViU3RyaW5n
OworCitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5IDogcHVibGljIFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+U3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eSgpOworCisgICAgLy8gQ29uc3RydWN0aW5nIGEgcHJveHkgb2JqZWN0IHdp
dGggYSAwIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50IGlzIHNhZmUgaW4KKyAgICAvLyBpdHNl
bGYsIGJ1dCBhdHRlbXB0aW5nIHRvIGNhbGwgc3RhcnQvc3RvcC9hYm9ydCBvbiBpdCB3aWxsIGNy
YXNoLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+
IGNyZWF0ZShXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCopOworCisgICAgLy8gV2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb25DbGllbnQ6CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uKiwgY29uc3QgV2ViQ29yZTo6U3BlZWNoR3JhbW1hckxpc3QqLCBj
b25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHN0b3AoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24qKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24qKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpIE9WRVJSSURFOworCitw
cml2YXRlOgorICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQqKTsKKworICAgIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBib29sIG1faGFzRXZlckJlZW5TdGFydGVkOworfTsKKworfTsgLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFtbWFyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJmY2NkNDBjYmMxYjQ1ODFkMWFjNjY0ZTBkZjQzMGFkMDAwOTM1YTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFtbWFyLmNwcApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YlNwZWVjaEdyYW1tYXIuaCIKKworI2luY2x1ZGUgIlNwZWVjaEdyYW1tYXIuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJTcGVl
Y2hHcmFtbWFyOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK1dlYlNw
ZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIoY29uc3QgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
cGVlY2hHcmFtbWFyPiYgdmFsdWUpCisgICAgOiBtX3ByaXZhdGUodmFsdWUpCit7Cit9CisKK1dl
YlNwZWVjaEdyYW1tYXImIFdlYlNwZWVjaEdyYW1tYXI6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVlKQoreworICAgIG1fcHJpdmF0
ZSA9IHZhbHVlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViVVJMIFdlYlNwZWVjaEdyYW1t
YXI6OnNyYygpIGNvbnN0Cit7CisgICAgV0VCS0lUX0FTU0VSVChtX3ByaXZhdGUuZ2V0KCkpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPnNyYygpOworfQorCitmbG9hdCBXZWJTcGVlY2hHcmFtbWFy
Ojp3ZWlnaHQoKSBjb25zdAoreworICAgIFdFQktJVF9BU1NFUlQobV9wcml2YXRlLmdldCgpKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNv
Z25pdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25p
dGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM3MzA0ZGE2YmVkODUxM2ZlNWI4MDczMTBmNTViMmQ3Yjhl
NjBkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNw
ZWVjaFJlY29nbml0aW9uLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvbi5oIgorCisjaW5jbHVkZSAi
U3BlZWNoUmVjb2duaXRpb24uaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgi
CisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3QuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUu
cmVzZXQoKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6YXNzaWduKGNvbnN0IFdl
YlNwZWVjaFJlY29nbml0aW9uJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3By
aXZhdGU7Cit9CisKK2Jvb2wgV2ViU3BlZWNoUmVjb2duaXRpb246OmVxdWFscyhjb25zdCBXZWJT
cGVlY2hSZWNvZ25pdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3ByaXZhdGUu
Z2V0KCkgPT0gb3RoZXIubV9wcml2YXRlLmdldCgpKTsKK30KKworYm9vbCBXZWJTcGVlY2hSZWNv
Z25pdGlvbjo6bGVzc1RoYW4oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpIDwgb3RoZXIubV9wcml2YXRlLmdldCgp
KTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6YXVkaW9TdGFydENhbGxiYWNrKCkK
K3sKKyAgICBtX3ByaXZhdGUtPmF1ZGlvU3RhcnRDYWxsYmFjaygpOworfQorCit2b2lkIFdlYlNw
ZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2soKQoreworICAgIG1fcHJpdmF0ZS0+
c291bmRTdGFydENhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OnNw
ZWVjaFN0YXJ0Q2FsbGJhY2soKQoreworICAgIG1fcHJpdmF0ZS0+c3BlZWNoU3RhcnRDYWxsYmFj
aygpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uOjpzcGVlY2hFbmRDYWxsYmFjaygp
Cit7CisgICAgbV9wcml2YXRlLT5zcGVlY2hFbmRDYWxsYmFjaygpOworfQorCit2b2lkIFdlYlNw
ZWVjaFJlY29nbml0aW9uOjphdWRpb0VuZENhbGxiYWNrKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF1
ZGlvRW5kQ2FsbGJhY2soKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0
Q2FsbGJhY2soY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWdu
ZWQgbG9uZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0PiA+IHJlc3VsdEhpc3RvcnlWZWN0b3IocmVzdWx0SGlzdG9yeS5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0SGlzdG9yeS5zaXplKCk7ICsraSkK
KyAgICAgICAgcmVzdWx0SGlzdG9yeVZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8UGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5W2ldKSk7CisKKyAgICBt
X3ByaXZhdGUtPnJlc3VsdENhbGxiYWNrKHJlc3VsdCwgcmVzdWx0SW5kZXgsIFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0TGlzdDo6Y3JlYXRlKHJlc3VsdEhpc3RvcnlWZWN0b3IpKTsKK30KKwordm9p
ZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6bm9NYXRjaENhbGxiYWNrKGNvbnN0IFdlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0JiByZXN1bHQpCit7CisgICAgbV9wcml2YXRlLT5ub01hdGNoQ2FsbGJh
Y2socmVzdWx0KTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0RGVsZXRl
ZENhbGxiYWNrKHVuc2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFZlY3RvcjxSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3RvcihyZXN1bHRIaXN0
b3J5LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRIaXN0b3J5LnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVuZChzdGF0aWNfY2Fz
dDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3VsdEhpc3RvcnlbaV0p
KTsKKworICAgIG1fcHJpdmF0ZS0+cmVzdWx0RGVsZXRlZENhbGxiYWNrKHJlc3VsdEluZGV4LCBT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7
Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2soY29uc3QgV2Vi
U3RyaW5nJiBtc2csIHVuc2lnbmVkIHNob3J0IGNvZGUpCit7CisgICAgU3BlZWNoUmVjb2duaXRp
b25FcnJvcjo6Q29kZSBlcnJvckNvZGUgPSBzdGF0aWNfY2FzdDxTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yOjpDb2RlPihjb2RlKTsKKyAgICBtX3ByaXZhdGUtPmVycm9yQ2FsbGJhY2soU3BlZWNoUmVj
b2duaXRpb25FcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwgbXNnKSk7Cit9CisKK3ZvaWQgV2ViU3Bl
ZWNoUmVjb2duaXRpb246OnN0YXJ0Q2FsbGJhY2soKQoreworICAgIG1fcHJpdmF0ZS0+c3RhcnRD
YWxsYmFjaygpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygp
Cit7CisgICAgbV9wcml2YXRlLT5lbmRDYWxsYmFjaygpOworfQorCitXZWJTcGVlY2hSZWNvZ25p
dGlvbjo6V2ViU3BlZWNoUmVjb2duaXRpb24oY29uc3QgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvbj4mIHNwZWVjaFJlY29nbml0aW9uKQorICAgIDogbV9wcml2YXRlKHNwZWVjaFJlY29nbml0
aW9uKQoreworfQorCitXZWJTcGVlY2hSZWNvZ25pdGlvbiYgV2ViU3BlZWNoUmVjb2duaXRpb246
Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiYgc3BlZWNoUmVj
b2duaXRpb24pCit7CisgICAgbV9wcml2YXRlID0gc3BlZWNoUmVjb2duaXRpb247CisgICAgcmV0
dXJuICp0aGlzOworfQorCitXZWJTcGVlY2hSZWNvZ25pdGlvbjo6b3BlcmF0b3IgUGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvbj4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwN2Y5NTYzNjYyNjg0ZmM2MzE5Y2ZlMjIwODIxZDNjNjNlYThiYzkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorCisjaW5jbHVkZSAiU3BlZWNo
UmVjb2duaXRpb25BbHRlcm5hdGl2ZS5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0Ojphc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIG90aGVyKQorewor
ICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdDo6YXNzaWduKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0cmFuc2Ny
aXB0cywgY29uc3QgV2ViVmVjdG9yPGZsb2F0PiYgY29uZmlkZW5jZXMsIGJvb2wgZmluYWwpCit7
CisgICAgQVNTRVJUKHRyYW5zY3JpcHRzLnNpemUoKSA9PSBjb25maWRlbmNlcy5zaXplKCkpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZl
PiA+IGFsdGVybmF0aXZlcyh0cmFuc2NyaXB0cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHJhbnNjcmlwdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFsdGVybmF0aXZlcy5h
cHBlbmQoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZTo6Y3JlYXRlKHRyYW5z
Y3JpcHRzW2ldLCBjb25maWRlbmNlc1tpXSkpOworCisgICAgbV9wcml2YXRlID0gV2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmNyZWF0ZShhbHRlcm5hdGl2ZXMsIGZpbmFsKTsKK30K
Kwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6cmVzZXQoKQoreworICAgIG1fcHJp
dmF0ZS5yZXNldCgpOworfQorCitXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4oKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGM0N2ZkZGFh
ZWU2ZTVmYTUwMjBjYTU5MjAxZWY2ZTlmY2I3ZjQzMTguLjdiMmMyNWUwYzY5OTYzYmI1ZTRjY2Uz
MzIwNjBlMWM3ZGE0OWFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTcGVlY2hJbnB1dENs
aWVudEltcGwuaCIKLSNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgorI2luY2x1
ZGUgIlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0
b3IuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRvdWNocGFkRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oIgpAQCAtMzYxLDYgKzM2MSw5IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3
SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAg
ICAsIG1fc3BlZWNoSW5wdXRDbGllbnQoU3BlZWNoSW5wdXRDbGllbnRJbXBsOjpjcmVhdGUoY2xp
ZW50KSkKICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgLCBtX3NwZWVj
aFJlY29nbml0aW9uQ2xpZW50KFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmNyZWF0ZShj
bGllbnQgPyBjbGllbnQtPnNwZWVjaFJlY29nbml0aW9uQ2xpZW50KCkgOiAwKSkKKyNlbmRpZgog
ICAgICwgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5KGFkb3B0UHRyKG5ldyBEZXZpY2VP
cmllbnRhdGlvbkNsaWVudFByb3h5KGNsaWVudCA/IGNsaWVudC0+ZGV2aWNlT3JpZW50YXRpb25D
bGllbnQoKSA6IDApKSkKICAgICAsIG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eShhZG9wdFB0cihu
ZXcgR2VvbG9jYXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQtPmdlb2xvY2F0aW9uQ2xp
ZW50KCkgOiAwKSkpCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTM5NCw3ICszOTcsNyBA
QCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogICAgIHBy
b3ZpZGVTcGVlY2hJbnB1dFRvKG1fcGFnZS5nZXQoKSwgbV9zcGVlY2hJbnB1dENsaWVudC5nZXQo
KSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQotICAgIHByb3ZpZGVTcGVl
Y2hSZWNvZ25pdGlvblRvKG1fcGFnZS5nZXQoKSwgMCk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVh
bCBpbXBsZW1lbnRhdGlvbi4KKyAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2Uu
Z2V0KCksIG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKICAgICBw
cm92aWRlTm90aWZpY2F0aW9uKG1fcGFnZS5nZXQoKSwgbm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDIyOTM4
YWQ2YmQ2YzQ5NzVmNzRmZTM3ZTQxNTQ4N2ZlZWNhMTIxNWIuLmYzZGRlNTNhYmU0MWIwZTczNGU0
NjVkNGZlMDE3ODM3MGFkMzBjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaApAQCAtODUsNiArODUsNyBAQCBjbGFzcyBEcmFnU2Nyb2xsVGltZXI7CiBjbGFzcyBH
ZW9sb2NhdGlvbkNsaWVudFByb3h5OwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Owog
Y2xhc3MgU3BlZWNoSW5wdXRDbGllbnRJbXBsOworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eTsKIGNsYXNzIFVzZXJNZWRpYUNsaWVudEltcGw7CiBjbGFzcyBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0OwogY2xhc3MgV2ViQ29tcG9zaXRvckltcGw7CkBAIC03MTQsNiArNzE1LDEwIEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBPd25QdHI8U3BlZWNoSW5w
dXRDbGllbnRJbXBsPiBtX3NwZWVjaElucHV0Q2xpZW50OwogI2VuZGlmCisjaWYgRU5BQkxFKFND
UklQVEVEX1NQRUVDSCkKKyAgICBPd25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eT4g
bV9zcGVlY2hSZWNvZ25pdGlvbkNsaWVudDsKKyNlbmRpZgorCiAgICAgLy8gSWYgd2UgYXR0ZW1w
dCB0byBmZXRjaCB0aGUgb24tc2NyZWVuIEdyYXBoaWNzQ29udGV4dDNEIGJlZm9yZQogICAgIC8v
IHRoZSBjb21wb3NpdG9yIGhhcyBiZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byBpbnN0YW50aWF0
ZSBpdAogICAgIC8vIGVhcmx5LiBUaGlzIG1lbWJlciBob2xkcyBvbiB0byB0aGUgR0MzRCBpbiB0
aGlzIGNhc2UuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133811</attachid>
            <date>2012-03-26 07:44:39 -0700</date>
            <delta_ts>2012-03-29 07:27:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120326154437.patch</filename>
            <type>text/plain</type>
            <size>51083</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMjQ3YWY1YmU5YWEzMTRiZjFkODBhODVjMGUyZTZlMTBhZGNiNDhmLi42
YWY1ZjlkMTM5NmVlNjE4MWM3ODhjODAxZDE0NWVjNTc1MjIzYzQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTItMDMtMjYgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJvbWl1
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUg
U3BlZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpLCBldGMuIHRvIHVzZSAiZXZl
bnQgc3R5bGUiCisgICAgICAgIG5hbWVzLCBpLmUuIGRpZFN0YXJ0QXVkaW8oKSwgZXRjLgorCisg
ICAgICAgIFNwZWVjaEdyYW1tYXI6OnNyYygpIGlzIGNhbGxlZCB3aXRoIGEgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgYmVjYXVzZQorICAgICAgICB0aGUgYXR0cmlidXRlIHNldHRlciBuZWVkcyBp
dC4gUHJvdmlkZSBhIHNyYygpIG1ldGhvZCB0aGF0IGRvZXNuJ3QKKyAgICAgICAgdGFrZSBhIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCBpbnRlcm5hbGx5LgorCisgICAg
ICAgIFJlbmFtZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dmlzaWJpbGl0eUhpZGRlbigpIHRv
CisgICAgICAgIG5vdGlmeVZpc2liaWxpdHlIaWRkZW4oKS4KKworICAgICAgICBSZW1vdmUgU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnQ6OnVucmVnaXN0ZXJTcGVlY2hSZWNvZ25pdGlvbiwKKyAgICAg
ICAgaXQgaXMgbm90IG5lZWRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGp1c3QgbWlub3Ig
dHdlYWtzLgorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoR3JhbW1hcjo6c3JjKToKKyAgICAgICAgKiBNb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvbjo6ZGlkU3RhcnRBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkU3RhcnRTb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlv
bjo6ZGlkU3RhcnRTcGVlY2gpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246
OmRpZEVuZFNwZWVjaCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlk
RW5kU291bmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvbjo6ZGlkRW5kQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb246OmRpZFJlY2VpdmVSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb246OmRpZFJlY2VpdmVOb01hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29n
bml0aW9uOjpkaWREZWxldGVSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb246OmRpZFJlY2VpdmVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmRp
ZEVuZCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaDoKKyAg
ICAgICAgKFNwZWVjaFJlY29nbml0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudC5oOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb25DbGllbnQp
OgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyOjpub3RpZnlW
aXNpYmlsaXR5SGlkZGVuKToKKwogMjAxMi0wMy0yNSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW1NoYWRvdyBET01dIEFkZCBSZWlmaWVkIERPTSBUcmVlIHRy
YXZlcnNhbCBpbnRlcm5hbCBBUElzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3N2Q5
MzgzYzMzNGFlMDBiMDg5NmJhZjE4OWZiYTMxZTg4NDk2OGFkLi45YzJlZDk2YTE2Mzc0NGM5MTkw
ZmI1ZjRhNmY0Mjg5NDdmZmFhZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEwNiBAQAorMjAxMi0wMy0yNiAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFNwZWVjaCBKYXZhU2NyaXB0IEFQSTogUGx1bWJpbmcgZm9yIENocm9taXVt
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTY2Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBwbHVt
YmluZyBmb3Igc3BlZWNoIHJlY29nbml0aW9uLgorCisgICAgICAgIFNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHkgaW1wbGVtZW50cyB0aGUgU3BlZWNoUmVjb2duaXRpb24KKyAgICAgICAgaW50
ZXJmYWNlLCBwcm94eWluZyBjYWxscyB0byBhIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50IGlu
dGVyZmFjZSwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bS4K
KworICAgICAgICBUaGUgcHJveHkgYWxzbyBwYXNzZXMgYWxvbmcgYSByZWZlcmVuY2UgdG8gYSBX
ZWJTcGVlY2hSZWNvZ25pdGlvbgorICAgICAgICBvYmplY3QsIHdoaWNoIHdyYXBzIGEgcG9pbnRl
ciB0byB0aGUgU3BlZWNoUmVjb2duaXRpb24gb2JqZWN0IHdoZXJlCisgICAgICAgIHRoZSBjYWxs
IG9yaWdpbmF0ZWQuIFNwZWVjaCByZWNvZ25pdGlvbiBwcm9ncmVzcywgcmVzdWx0cywgYW5kIGVy
cm9ycworICAgICAgICBhcmUgcmVwb3J0ZWQgdmlhIGNhbGxiYWNrIGZ1bmN0aW9ucyBvbiB0aGlz
IG9iamVjdC4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlNw
ZWVjaEdyYW1tYXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoR3JhbW1hcjo6V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aEdyYW1tYXI6On5XZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNo
UmVjb2duaXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml0aW9uOjp+V2ViU3BlZWNoUmVjb2duaXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6V2ViU3BlZWNoUmVjb2duaXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdl
YktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoV2ViS2l0OjpvcGVyYXRvcjwpOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGll
bnQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6
OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6YWJv
cnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6bm90aWZ5
VmlzaWJpbGl0eUhpZGRlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50Ojp+V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQpOgorICAgICAgICAqIHB1YmxpYy9X
ZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OldlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ6On5XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICogcHVibGljL1dl
YlZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3Q2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6c3BlZWNoUmVjb2duaXRpb25DbGll
bnQpOgorICAgICAgICAqIHNyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5Ojp+U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdl
YktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJL
aXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmFib3J0KToKKyAgICAgICAgKFdlYktp
dDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6bm90aWZ5VmlzaWJpbGl0eUhpZGRlbik6
CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHkpOgorICAgICAgICAqIHNyYy9TcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eSk6CisgICAgICAgICogc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaEdyYW1tYXI6
OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6V2ViU3BlZWNoR3Jh
bW1hcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaEdyYW1tYXI6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaEdyYW1tYXI6OnNyYyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaEdyYW1tYXI6OndlaWdodCk6CisgICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29n
bml0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTcGVlY2hSZWNvZ25pdGlvbjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvbjo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRp
b246OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpsZXNz
VGhhbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1
ZGlvKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFN0YXJ0U291
bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRTcGVl
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNo
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZFNvdW5kKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZEF1ZGlvKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2VpdmVSZXN1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2gp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRGVsZXRlUmVzdWx0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2VpdmVFcnJv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6V2ViU3BlZWNoUmVjb2duaXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQdHI8U3BlZWNo
UmVjb2duaXRpb24+KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0Ojphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdDo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdDo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdD4pOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorCiAyMDEyLTAzLTI1ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJzIHdpdGggYW5p
bWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBhcmUgbm90IHZp
c2libGUgeWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFy
LmgKaW5kZXggNjIwODhjMThiMGM4Y2IwMWQzNDA3ZDFkMjY2YjgyY2I2ZGQyZjJmOS4uZTA4MzU4
YmJmMTNlZDJmZmVjNGNlNjY2MjI2NjlmZWI5YTE0YTBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hcj4gY3JlYXRlKGNvbnN0IEtVUkwm
IHNyYywgZG91YmxlIHdlaWdodCk7CiAKICAgICBjb25zdCBLVVJMJiBzcmMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgS1VSTCYgc3Jj
KCkgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KICAgICB2b2lkIHNldFNyYyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzcmMpOwogCiAgICAgZG91YmxlIHdlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2VpZ2h0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKaW5kZXggMWIzYWIzMjU0ODU3MjAxYTY0ZTRi
ODNhNTNiN2JjMTVjMTY5YWUwMC4uMmE3NjY5ZTk2ZDMxZDc0M2JmMWVlYTdkYjEwZjk1NTNhMzI2
NDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVj
b2duaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJl
Y29nbml0aW9uLmNwcApAQCAtNjIsNTggKzYyLDYzIEBAIHZvaWQgU3BlZWNoUmVjb2duaXRpb246
OmFib3J0KCkKICAgICBtX2NvbnRyb2xsZXItPmFib3J0KHRoaXMpOyAvLyBGSVhNRTogU3BlYyBz
aG91bGQgc2F5IHdoYXQgdG8gZG8gaWYgd2UgYXJlIG5vdCBzdGFydGVkLgogfQogCi12b2lkIFNw
ZWVjaFJlY29nbml0aW9uOjphdWRpb1N0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkU3RhcnRBdWRpbygpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIHNob3VsZCBz
cGVjaWZ5IHdoZXRoZXIgdGhlc2UgZXZlbnRzIGNhbiBidWJibGUgYW5kIGFyZSBjYW5jZWxhYmxl
LgogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYXVkaW9zdGFy
dEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQog
Ci12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRTb3VuZCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zb3VuZHN0YXJ0RXZlbnQsIC8qY2FuQnViYmxlPSovZmFs
c2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246
OnNwZWVjaFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRT
cGVlY2goKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3BlZWNoc3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFs
c2UpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJhY2soKQor
dm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKCkKIHsKICAgICBkaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaGVuZEV2ZW50LCAvKmNhbkJ1YmJs
ZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29n
bml0aW9uOjphdWRpb0VuZENhbGxiYWNrKCkKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVu
ZFNvdW5kKCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnNvdW5kZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNl
KSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZEF1ZGlvKCkKIHsKICAgICBk
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmF1ZGlvZW5kRXZlbnQsIC8q
Y2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3Bl
ZWNoUmVjb2duaXRpb246OnJlc3VsdENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRp
b25SZXN1bHQ+IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCit2b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7CiAgICAgZGlzcGF0Y2hF
dmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1bHQocmVzdWx0LCByZXN1bHRJ
bmRleCwgcmVzdWx0SGlzdG9yeSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpub01h
dGNoQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQor
dm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2goUGFzc1JlZlB0cjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQogewogICAgIGRpc3BhdGNoRXZlbnQoU3BlZWNo
UmVjb2duaXRpb25FdmVudDo6Y3JlYXRlTm9NYXRjaChyZXN1bHQpKTsKIH0KIAotdm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKHVuc2lnbmVkIHJlc3VsdEluZGV4
LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkK
K3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCh1bnNpZ25lZCByZXN1bHRJ
bmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3Rv
cnkpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVS
ZXN1bHREZWxldGVkKHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5KSk7CiB9CiAKLXZvaWQgU3Bl
ZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlv
bkVycm9yPiBlcnJvcikKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2VpdmVFcnJvcihQ
YXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGVycm9yKQogewogICAgIGRpc3BhdGNo
RXZlbnQoU3BlZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlRXJyb3IoZXJyb3IpKTsKIH0KIAot
dm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29n
bml0aW9uOjpkaWRTdGFydCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9
Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygpCit2
b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmQoKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8q
Y2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaAppbmRleCAzOWUwMDg2ZjBkOTRjZDM4ZjdhMTI4MDRi
YjU3ZjNkZTc3NWYyMDNjLi4zZmMyNDQxNjZlMzM4YzNiMGY2MmNmY2YwMmYwOGI4NWE1ZDU1NzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uLmgKQEAgLTY0LDE3ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydCgpOwogCiAg
ICAgLy8gQ2FsbGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4KLSAgICB2b2lkIGF1
ZGlvU3RhcnRDYWxsYmFjaygpOwotICAgIHZvaWQgc291bmRTdGFydENhbGxiYWNrKCk7Ci0gICAg
dm9pZCBzcGVlY2hTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzcGVlY2hFbmRDYWxsYmFjaygp
OwotICAgIHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOwotICAgIHZvaWQgcmVzdWx0Q2FsbGJhY2so
UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVkIGxvbmcgcmVzdWx0
SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0
b3J5KTsKLSAgICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0
aW9uUmVzdWx0Pik7Ci0gICAgdm9pZCByZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVz
dWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRI
aXN0b3J5KTsKLSAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvbkVycm9yPik7Ci0gICAgdm9pZCBzdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBlbmRDYWxs
YmFjaygpOworICAgIHZvaWQgZGlkU3RhcnRBdWRpbygpOworICAgIHZvaWQgZGlkU3RhcnRTb3Vu
ZCgpOworICAgIHZvaWQgZGlkU3RhcnRTcGVlY2goKTsKKyAgICB2b2lkIGRpZEVuZFNwZWVjaCgp
OworICAgIHZvaWQgZGlkRW5kU291bmQoKTsKKyAgICB2b2lkIGRpZEVuZEF1ZGlvKCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+
LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9u
UmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTm9NYXRjaChQ
YXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7CisgICAgdm9pZCBkaWREZWxldGVS
ZXN1bHQodW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVFcnJvcihQYXNz
UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+KTsKKyAgICB2b2lkIGRpZFN0YXJ0KCk7Cisg
ICAgdm9pZCBkaWRFbmQoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dC5oCmluZGV4IDQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBmMWJiZDQuLmQ1OWM1
YzlhZTYxN2U3ZWFhMWExZDI1MjVhZGZjYzAwNjBkMmQzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaApAQCAt
NDEsOCArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KFNwZWVjaFJlY29n
bml0aW9uKiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJv
b2wgY29udGludW91cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNwZWVjaFJlY29nbml0
aW9uKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiopID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkgPSAwOwogCiAgICAg
dmlydHVhbCB+U3BlZWNoUmVjb2duaXRpb25DbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oCmluZGV4IGVmNWMxOTA3NTBlODVlMzllNWIxY2MyNTY4MTNkYTE4NWI2ODg3MWIuLjk5
YWVhODY4Y2Q0ZDE0NTM4OWZmNjQ4N2E0NWQ4NjhhN2ZjNWY4NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oCkBAIC00MSw4ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KFNwZWVjaFJl
Y29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqIGdyYW1tYXJz
LCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgeyBtX2NsaWVudC0+c3RhcnQo
cmVjb2duaXRpb24sIGdyYW1tYXJzLCBsYW5nLCBjb250aW51b3VzKTsgfQogICAgIHZvaWQgc3Rv
cChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pIHsgbV9jbGllbnQtPnN0b3AocmVjb2du
aXRpb24pOyB9CiAgICAgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24p
IHsgbV9jbGllbnQtPmFib3J0KHJlY29nbml0aW9uKTsgfQotICAgIHZvaWQgdmlzaWJpbGl0eUhp
ZGRlbigpIHsgbV9jbGllbnQtPnZpc2liaWxpdHlIaWRkZW4oKTsgfQotICAgIHZvaWQgdW5yZWdp
c3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBt
X2NsaWVudC0+dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKHJlY29nbml0aW9uKTsgfQorICAg
IHZvaWQgbm90aWZ5VmlzaWJpbGl0eUhpZGRlbigpIHsgbV9jbGllbnQtPm5vdGlmeVZpc2liaWxp
dHlIaWRkZW4oKTsgfQogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyPiBjcmVhdGUoU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKICAgICBzdGF0aWMg
Y29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCmluZGV4IGIyY2MyOTg2ZjZjZjBkMmVhN2VmZTA0ZjE4MWQ3Y2E5M2RiN2Q5MmEuLmE4
MTg5ODc0ZDhiZGVjNTlkMWQ2ZDE4MWViZDdhMjdlOTU3ODMzMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKQEAgLTI1NSw5ICsyNTUsMTMgQEAKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJTb2NrZXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXRDbGllbnQuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRMaXN0ZW5lci5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlNwZWVjaElucHV0UmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViU3BlZWNoUmVjb2duaXRpb24uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlbGxD
aGVja0NsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VBcmVhLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oJywK
QEAgLTQ3NCw2ICs0NzgsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvU29ja2V0U3RyZWFtSGFu
ZGxlSW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TcGVlY2hJbnB1dENsaWVudElt
cGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1wbC5oJywK
KyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9TdG9yYWdlQXJlYVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlckNocm9taXVtLmNwcCcsCkBAIC02NjMsNyArNjY5LDEwIEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJTb2NrZXRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViU29saWRDb2xvckxheWVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENv
bG9yTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hHcmFtbWFy
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hJbnB1dFJlc3VsdC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoUmVjb2duaXRpb24uY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYlN0b3JhZ2VBcmVhSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VF
dmVudERpc3BhdGNoZXJJbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdlZmU0MTI4NmM0NjRjYjg3YzE3
ZDI5YmU4ZDc1NjM5MTIxY2FkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTcGVlY2hHcmFtbWFyX2gKKyNkZWZpbmUgV2ViU3BlZWNoR3JhbW1hcl9oCisK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQ
cml2YXRlUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaEdy
YW1tYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFy
IHsKK3B1YmxpYzoKKyAgICBXZWJTcGVlY2hHcmFtbWFyKCkgeyB9CisgICAgfldlYlNwZWVjaEdy
YW1tYXIoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHNyYygpIGNv
bnN0OworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgd2VpZ2h0KCkgY29uc3Q7CisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAg
IFdlYlNwZWVjaEdyYW1tYXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdy
YW1tYXI+Jik7CisgICAgV2ViU3BlZWNoR3JhbW1hciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYpOworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiBtX3ByaXZhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaEdyYW1tYXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXRpb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODIyZjlmMTRmZjFhMzBhYTc5NWRjZDAxYTc5MTU2NTg4MDRhYTAy
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNw
ZWVjaFJlY29nbml0aW9uLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlNwZWVjaFJlY29nbml0aW9uX2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVjb2duaXRpb25faAorCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUHJp
dmF0ZVB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworY2xhc3MgV2ViU3RyaW5n
OworCisvLyBXcmFwcGVyIGFyb3VuZCBhIFNwZWVjaFJlY29nbml0aW9uIHBvaW50ZXIuCitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pdGlvbiB7CitwdWJsaWM6CisgICAgfldlYlNwZWVjaFJlY29nbml0
aW9uKCkgeyByZXNldCgpOyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24oKSB7IH0KKworICAg
IFdlYlNwZWVjaFJlY29nbml0aW9uKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJiBvdGhlcikg
eyBhc3NpZ24ob3RoZXIpOyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24mIG9wZXJhdG9yPShj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiYgb3RoZXIpCisgICAgeworICAgICAgICBhc3NpZ24o
b3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJT
cGVlY2hSZWNvZ25pdGlvbiYpOworCisgICAgLy8gQ29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHNvIHRoYXQgV2ViU3BlZWNoUmVjb2duaXRpb24gb2JqZWN0cworICAgIC8vIGNhbiBi
ZSBzdG9yZWQgaW4gYSBoYXNoIG1hcC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJikgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBib29s
IGxlc3NUaGFuKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJikgY29uc3Q7CisKKyAgICAvLyBT
cGVlY2hSZWNvZ25pdGlvbiBmdW5jdGlvbnM6CisgICAgLy8gVGhlc2UgYXJlIHVzZWQgYnkgdGhl
IGVtYmVkZGVyIHRvIHJlcG9ydCBwcm9ncmVzcywgcmVzdWx0cywgb3IgZXJyb3JzCisgICAgLy8g
d2hlbiBzcGVlY2ggcmVjb2duaXRpb24gaGFzIGJlZW4gc3RhcnRlZCAodmlhCisgICAgLy8gV2Vi
U3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OnN0YXJ0KS4gVGhlIGNhbGxzIGFyZSBmb3J3YXJkZWQg
dG8gdGhlCisgICAgLy8gd3JhcHBlZCBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50LgorICAgIC8vCisg
ICAgLy8gVGhlc2UgbWV0aG9kcyBjb3JyZXNwb25kIHRvIHRoZSBldmVudHMgZGVzY3JpYmVkIGlu
IHRoZSBzcGVjOgorICAgIC8vIGh0dHA6Ly9zcGVlY2gtamF2YXNjcmlwdC1hcGktc3BlYy5nb29n
bGVjb2RlLmNvbS9naXQvc3BlZWNoYXBpLmh0bWwjc3BlZWNocmVjby1ldmVudHMKKworICAgIC8v
IFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBlbWJlZGRlciBoYXMgc3RhcnRlZCB0byBjYXB0dXJlIGF1
ZGlvLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkaWRTdGFydEF1ZGlvKCk7CisKKyAgICAvLyBU
byBiZSBjYWxsZWQgd2hlbiBzb21lIHNvdW5kLCBwb3NzaWJseSBzcGVlY2gsIGhhcyBiZWVuIGRl
dGVjdGVkLgorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZFN0
YXJ0QXVkaW8uCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFN0YXJ0U291bmQoKTsKKworICAg
IC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNwZWVjaCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAvLyBU
aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhZnRlciBkaWRTdGFydFNvdW5kLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBkaWRTdGFydFNwZWVjaCgpOworCisgICAgLy8gVG8gYmUgY2FsbGVk
IHdoZW4gc3BlZWNoIGlzIG5vIGxvbmdlciBkZXRlY3RlZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgZGlkRW5kU3BlZWNoKCk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiBzb3VuZCBpcyBu
byBsb25nZXIgZGV0ZWN0ZWQuCisgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQg
YWZ0ZXIgZGlkRW5kU3BlZWNoLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkaWRFbmRTb3VuZCgp
OworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gYXVkaW8gY2FwdHVyZSBoYXMgc3RvcHBlZC4K
KyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhZnRlciBkaWRFbmRTb3VuZC4K
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkRW5kQXVkaW8oKTsKKworICAgIC8vIFRvIGJlIGNh
bGxlZCB3aGVuIHRoZSBzcGVlY2ggcmVjb2duaXplciByZXR1cm5zIGEgcmVzdWx0LgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBkaWRSZWNlaXZlUmVzdWx0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0JiwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSk7CisKKyAgICAvLyBUbyBi
ZSBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIHJlY29nbml6ZXIgcmV0dXJucyBhIGZpbmFsIHJlc3Vs
dCB3aXRoIG5vCisgICAgLy8gcmVjb2duaXppb24gaHlwb3RoZXNpcy4KKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgZGlkUmVjZWl2ZU5vTWF0Y2goY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQmKTsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pemVyIG5lZWRzIHRv
IGRlbGV0ZSBvbmUgb2YgdGhlIHByZXZpb3VzbHkKKyAgICAvLyByZXR1cm5lZCBpbnRlcmltIHJl
c3VsdHMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZERlbGV0ZVJlc3VsdCh1bnNpZ25lZCBy
ZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYg
cmVzdWx0SGlzdG9yeSk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiBhIHNwZWVjaCByZWNv
Z25pdGlvbiBlcnJvciBvY2N1cnMuCisgICAgLy8gRklYTUU6IEludHJvZHVjZSBhbiBlbnVtIGZv
ciB0aGUgZXJyb3IgY29kZS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkUmVjZWl2ZUVycm9y
KGNvbnN0IFdlYlN0cmluZyYgbXNnLCB1bnNpZ25lZCBzaG9ydCBjb2RlKTsKKworICAgIC8vIFRv
IGJlIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pemVyIGhhcyBiZWd1biB0byBsaXN0ZW4gdG8gdGhl
IGF1ZGlvIHdpdGgKKyAgICAvLyB0aGUgaW50ZW50aW9uIG9mIHJlY29nbml6aW5nLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBkaWRTdGFydCgpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4g
dGhlIHJlY29nbml0aW9uIHNlc3Npb24gaGFzIGVuZGVkLiBUaGlzIG11c3QgYWx3YXlzIGJlCisg
ICAgLy8gY2FsbGVkLCBubyBtYXR0ZXIgdGhlIHJlYXNvbiBmb3IgdGhlIGVuZC4KKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgZGlkRW5kKCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJTcGVlY2hSZWNvZ25pdGlvbihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb24+Jik7CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb24mIG9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+Jik7CisgICAg
b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uPigpIGNv
bnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVl
Y2hSZWNvZ25pdGlvbj4gbV9wcml2YXRlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiYgYSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24m
IGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uJiBhLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25p
dGlvbiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mIGEsIGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uJiBiKQoreworICAgIHJldHVybiBhLmxlc3NUaGFuKGIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2M2EyMTg1MWU5NjZiODIyMDZiODAwYjhlYWUwOTdj
NmM3OTY0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKKyNkZWZpbmUgV2ViU3BlZWNo
UmVjb2duaXRpb25DbGllbnRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVj
dG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOwor
Y2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb247CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgY29ycmVzcG9uZCB0byB0
aGUgc3RhcnQsIHN0b3AgYW5kIGFib3J0IGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAvLyBKYXZhU2Ny
aXB0IFNwZWVjaCBBUEkuIFRoZSBlbWJlZGRlciBzaG91bGQgdXNlIHRoZSBXZWJTcGVlY2hSZWNv
Z25pdGlvbgorICAgIC8vIG9iamVjdCB0byByZXBvcnQgb24gcHJvZ3Jlc3MsIHJlc3VsdHMgYW5k
IGVycm9ycy4KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b24mLCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4mLCBjb25zdCBXZWJTdHJpbmcm
IGxhbmd1YWdlLCBib29sIGNvbnRpbnVvdXMpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3AoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb24mKSB7
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhYm9ydChj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIHdoZW4gdGhlIFBhZ2UgYmVjb21lcyBoaWRk
ZW4sIGFuZCBzaG91bGQgY2F1c2UgYW55CisgICAgLy8gb25nb2luZyBzcGVlY2ggcmVjb2duaXRp
b24gdG8gYmUgYWJvcnRlZC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5VmlzaWJpbGl0eUhpZGRl
bigpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTNmNTQzMTE5YzYxYTZiM2RkMWU1M2NlZmQw
NThlMDU5MzY5OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaApAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCisjZGVmaW5lIFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0X2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCB7CitwdWJsaWM6
CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoKSB7IH0KKyAgICB+V2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
c3NpZ24oY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHRyYW5zY3JpcHRzLCBjb25zdCBXZWJW
ZWN0b3I8ZmxvYXQ+JiBjb25maWRlbmNlcywgYm9vbCBmaW5hbCk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGFzc2lnbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisg
ICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0PigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKaW5kZXggZjI5
MDMzYzcyMzgwMDVjNWVkNzJkYWMzMWI4MTg5YWFkNDgzMzgxNy4uYzcxNmQ5MmVjNGIxYjU5YWZj
YmY3ODZhZWM4NGZjMjQ4MTJkZTM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZpZXdDbGllbnQuaApAQCAtNjgsNiArNjgsNyBAQCBjbGFzcyBXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXI7CiBjbGFzcyBXZWJSYW5nZTsKIGNsYXNzIFdlYlNwZWVjaElucHV0Q29udHJv
bGxlcjsKIGNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CitjbGFzcyBXZWJTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudDsKIGNsYXNzIFdlYlN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBXZWJVUkw7
CiBjbGFzcyBXZWJVUkxSZXF1ZXN0OwpAQCAtMzE2LDYgKzMxNyw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFdlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250cm9sbGVyKAog
ICAgICAgICBXZWJTcGVlY2hJbnB1dExpc3RlbmVyKikgeyByZXR1cm4gMDsgfQogCisgICAgLy8g
QWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIHNwZWVjaCByZWNvZ25pdGlvbiBzZXJ2aWNlcy4K
KyAgICB2aXJ0dWFsIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KiBzcGVlY2hSZWNvZ25pdGlv
bkNsaWVudCgpIHsgcmV0dXJuIDA7IH0KKwogICAgIC8vIERldmljZSBPcmllbnRhdGlvbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8g
QWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGRldmljZSBvcmllbnRhdGlvbiBzZXJ2aWNlcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQ5ZmM0YzljY2YzYzc1NWRlMjJkNGJk
NTllOThiMGMyYzFlYWQwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eS5oIgorCisjaW5jbHVkZSAiU3BlZWNoR3JhbW1hckxpc3QuaCIKKyNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvbi5oIgorI2luY2x1ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIK
KyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvbi5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk6On5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KCkKK3sK
K30KKworUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5PiBTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudFByb3h5OjpjcmVhdGUoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIGNs
aWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50
UHJveHkoY2xpZW50KSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6
c3RhcnQoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFy
TGlzdCogZ3JhbW1hckxpc3QsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKQor
eworICAgIG1faGFzRXZlckJlZW5TdGFydGVkID0gdHJ1ZTsKKworICAgIFdlYlZlY3RvcjxXZWJT
cGVlY2hHcmFtbWFyPiB3ZWJTcGVlY2hHcmFtbWFycyhncmFtbWFyTGlzdC0+bGVuZ3RoKCkpOwor
ICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGdyYW1tYXJMaXN0LT5sZW5ndGgoKTsg
KytpKQorICAgICAgICB3ZWJTcGVlY2hHcmFtbWFyc1tpXSA9IGdyYW1tYXJMaXN0LT5pdGVtKGkp
OworCisgICAgbV9jbGllbnQtPnN0YXJ0KFdlYlNwZWVjaFJlY29nbml0aW9uKHJlY29nbml0aW9u
KSwgd2ViU3BlZWNoR3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOworfQorCit2b2lkIFNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHk6OnN0b3AoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0
aW9uKQoreworICAgIG1fY2xpZW50LT5zdG9wKFdlYlNwZWVjaFJlY29nbml0aW9uKHJlY29nbml0
aW9uKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6YWJvcnQoU3Bl
ZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKQoreworICAgIG1fY2xpZW50LT5hYm9ydChXZWJT
cGVlY2hSZWNvZ25pdGlvbihyZWNvZ25pdGlvbikpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHk6Om5vdGlmeVZpc2liaWxpdHlIaWRkZW4oKQoreworICAgIGlmIChtX2hh
c0V2ZXJCZWVuU3RhcnRlZCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeVZpc2liaWxpdHlIaWRk
ZW4oKTsKK30KKworU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6U3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCogY2xpZW50KQorICAgIDog
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9oYXNFdmVyQmVlblN0YXJ0ZWQoZmFsc2UpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4
MDQ0YmNlODg3ZWZlZjg0ZTE4YWQ5MDg1ZDFjYTQ4NzlkODAwZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eV9oCisjZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHlfaAorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNz
IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6U3BlZWNoUmVj
b2duaXRpb25DbGllbnQgeworcHVibGljOgorICAgIH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5KCk7CisKKyAgICAvLyBDb25zdHJ1Y3RpbmcgYSBwcm94eSBvYmplY3Qgd2l0aCBhIDAgV2Vi
U3BlZWNoUmVjb2duaXRpb25DbGllbnQgaXMgc2FmZSBpbgorICAgIC8vIGl0c2VsZiwgYnV0IGF0
dGVtcHRpbmcgdG8gY2FsbCBzdGFydC9zdG9wL2Fib3J0IG9uIGl0IHdpbGwgY3Jhc2guCisgICAg
c3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eT4gY3JlYXRlKFdl
YlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Kik7CisKKyAgICAvLyBXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudDoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoV2ViQ29yZTo6U3BlZWNoUmVj
b2duaXRpb24qLCBjb25zdCBXZWJDb3JlOjpTcGVlY2hHcmFtbWFyTGlzdCosIGNvbnN0IFN0cmlu
ZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlWaXNpYmlsaXR5SGlkZGVuKCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dCopOworCisgICAgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQqIG1fY2xpZW50OworICAgIGJv
b2wgbV9oYXNFdmVyQmVlblN0YXJ0ZWQ7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3JhbW1hci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZjY2Q0
MGNiYzFiNDU4MWQxYWM2NjRlMGRmNDMwYWQwMDA5MzVhNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoR3Jh
bW1hci5oIgorCisjaW5jbHVkZSAiU3BlZWNoR3JhbW1hci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlNwZWVjaEdyYW1tYXI6
OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKworV2ViU3BlZWNoR3JhbW1h
cjo6V2ViU3BlZWNoR3JhbW1hcihjb25zdCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1t
YXI+JiB2YWx1ZSkKKyAgICA6IG1fcHJpdmF0ZSh2YWx1ZSkKK3sKK30KKworV2ViU3BlZWNoR3Jh
bW1hciYgV2ViU3BlZWNoR3JhbW1hcjo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYgdmFsdWUpCit7CisgICAgbV9wcml2YXRlID0gdmFsdWU7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJVUkwgV2ViU3BlZWNoR3JhbW1hcjo6c3JjKCkg
Y29uc3QKK3sKKyAgICBXRUJLSVRfQVNTRVJUKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+c3JjKCk7Cit9CisKK2Zsb2F0IFdlYlNwZWVjaEdyYW1tYXI6OndlaWdodCgp
IGNvbnN0Cit7CisgICAgV0VCS0lUX0FTU0VSVChtX3ByaXZhdGUuZ2V0KCkpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPndlaWdodCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lNmUxODIxMGEwM2IwODQ1ZGE0NGFkMzc4YTU0OTYzN2UwMWUyMGRmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2du
aXRpb24uY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uLmgiCisKKyNpbmNsdWRlICJTcGVlY2hSZWNv
Z25pdGlvbi5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uRXJyb3IuaCIKKyNpbmNsdWRl
ICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0TGlzdC5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBX
ZWJTcGVlY2hSZWNvZ25pdGlvbjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOwor
fQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uOjphc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVj
b2duaXRpb24mIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30K
KworYm9vbCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZXF1YWxzKGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBv
dGhlci5tX3ByaXZhdGUuZ2V0KCkpOworfQorCitib29sIFdlYlNwZWVjaFJlY29nbml0aW9uOjps
ZXNzVGhhbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtX3ByaXZhdGUuZ2V0KCkgPCBvdGhlci5tX3ByaXZhdGUuZ2V0KCkpOworfQorCit2
b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1ZGlvKCkKK3sKKyAgICBtX3ByaXZh
dGUtPmRpZFN0YXJ0QXVkaW8oKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlk
U3RhcnRTb3VuZCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRTdGFydFNvdW5kKCk7Cit9CisKK3Zv
aWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFN0YXJ0U3BlZWNoKCkKK3sKKyAgICBtX3ByaXZh
dGUtPmRpZFN0YXJ0U3BlZWNoKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmRp
ZEVuZFNwZWVjaCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmRTcGVlY2goKTsKK30KKwordm9p
ZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU291bmQoKQoreworICAgIG1fcHJpdmF0ZS0+
ZGlkRW5kU291bmQoKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kQXVk
aW8oKQoreworICAgIG1fcHJpdmF0ZS0+ZGlkRW5kQXVkaW8oKTsKK30KKwordm9pZCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0
b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFZl
Y3RvcjxSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3Rv
cihyZXN1bHRIaXN0b3J5LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1
bHRIaXN0b3J5LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVu
ZChzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3Vs
dEhpc3RvcnlbaV0pKTsKKworICAgIG1fcHJpdmF0ZS0+ZGlkUmVjZWl2ZVJlc3VsdChyZXN1bHQs
IHJlc3VsdEluZGV4LCBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRI
aXN0b3J5VmVjdG9yKSk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2Vp
dmVOb01hdGNoKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiByZXN1bHQpCit7Cisg
ICAgbV9wcml2YXRlLT5kaWRSZWNlaXZlTm9NYXRjaChyZXN1bHQpOworfQorCit2b2lkIFdlYlNw
ZWVjaFJlY29nbml0aW9uOjpkaWREZWxldGVSZXN1bHQodW5zaWduZWQgcmVzdWx0SW5kZXgsIGNv
bnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3Rvcnkp
Cit7CisgICAgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gPiByZXN1bHRI
aXN0b3J5VmVjdG9yKHJlc3VsdEhpc3Rvcnkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlc3VsdEhpc3Rvcnkuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdEhpc3RvcnlW
ZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ+ID4ocmVzdWx0SGlzdG9yeVtpXSkpOworCisgICAgbV9wcml2YXRlLT5kaWREZWxldGVSZXN1
bHQocmVzdWx0SW5kZXgsIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdDo6Y3JlYXRlKHJlc3Vs
dEhpc3RvcnlWZWN0b3IpKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVj
ZWl2ZUVycm9yKGNvbnN0IFdlYlN0cmluZyYgbXNnLCB1bnNpZ25lZCBzaG9ydCBjb2RlKQorewor
ICAgIFNwZWVjaFJlY29nbml0aW9uRXJyb3I6OkNvZGUgZXJyb3JDb2RlID0gc3RhdGljX2Nhc3Q8
U3BlZWNoUmVjb2duaXRpb25FcnJvcjo6Q29kZT4oY29kZSk7CisgICAgbV9wcml2YXRlLT5kaWRS
ZWNlaXZlRXJyb3IoU3BlZWNoUmVjb2duaXRpb25FcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwgbXNn
KSk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmRpZFN0YXJ0KCkKK3sKKyAgICBt
X3ByaXZhdGUtPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb246OmRp
ZEVuZCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmQoKTsKK30KKworV2ViU3BlZWNoUmVjb2du
aXRpb246OldlYlNwZWVjaFJlY29nbml0aW9uKGNvbnN0IFBhc3NSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb24+JiBzcGVlY2hSZWNvZ25pdGlvbikKKyAgICA6IG1fcHJpdmF0ZShzcGVlY2hSZWNvZ25p
dGlvbikKK3sKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb24mIFdlYlNwZWVjaFJlY29nbml0aW9u
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4mIHNwZWVjaFJl
Y29nbml0aW9uKQoreworICAgIG1fcHJpdmF0ZSA9IHNwZWVjaFJlY29nbml0aW9uOworICAgIHJl
dHVybiAqdGhpczsKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb246Om9wZXJhdG9yIFBhc3NSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb24+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdl
dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MDdmOTU2MzY2MjY4NGZjNjMxOWNmZTIyMDgyMWQzYzYzZWE4YmM5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKworI2luY2x1ZGUgIlNwZWVj
aFJlY29nbml0aW9uQWx0ZXJuYXRpdmUuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdDo6YXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiBvdGhlcikKK3sK
KyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQ6OmFzc2lnbihjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNj
cmlwdHMsIGNvbnN0IFdlYlZlY3RvcjxmbG9hdD4mIGNvbmZpZGVuY2VzLCBib29sIGZpbmFsKQor
eworICAgIEFTU0VSVCh0cmFuc2NyaXB0cy5zaXplKCkgPT0gY29uZmlkZW5jZXMuc2l6ZSgpKTsK
KworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2
ZT4gPiBhbHRlcm5hdGl2ZXModHJhbnNjcmlwdHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRyYW5zY3JpcHRzLnNpemUoKTsgKytpKQorICAgICAgICBhbHRlcm5hdGl2ZXMu
YXBwZW5kKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU6OmNyZWF0ZSh0cmFu
c2NyaXB0c1tpXSwgY29uZmlkZW5jZXNbaV0pKTsKKworICAgIG1fcHJpdmF0ZSA9IFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpjcmVhdGUoYWx0ZXJuYXRpdmVzLCBmaW5hbCk7Cit9
CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OnJlc2V0KCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQoKTsKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjNDdmZGRh
YWVlNmU1ZmE1MDIwY2E1OTIwMWVmNmU5ZmNiN2Y0MzE4Li43YjJjMjVlMGM2OTk2M2JiNWU0Y2Nl
MzMyMDYwZTFjN2RhNDlhZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU3BlZWNoSW5wdXRD
bGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaCIKKyNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUb3VjaHBhZEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUuaCIKQEAgLTM2MSw2ICszNjEsOSBAQCBXZWJWaWV3SW1wbDo6V2ViVmll
d0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAg
ICAgLCBtX3NwZWVjaElucHV0Q2xpZW50KFNwZWVjaElucHV0Q2xpZW50SW1wbDo6Y3JlYXRlKGNs
aWVudCkpCiAjZW5kaWYKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorICAgICwgbV9zcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpjcmVhdGUo
Y2xpZW50ID8gY2xpZW50LT5zcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIDogMCkpCisjZW5kaWYK
ICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgRGV2aWNl
T3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQtPmRldmljZU9yaWVudGF0aW9u
Q2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHkoYWRvcHRQdHIo
bmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50ID8gY2xpZW50LT5nZW9sb2NhdGlvbkNs
aWVudCgpIDogMCkpKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0zOTQsNyArMzk3LDcg
QEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICBw
cm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCksIG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0
KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBwcm92aWRlU3Bl
ZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDApOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJl
YWwgaW1wbGVtZW50YXRpb24uCisgICAgcHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8obV9wYWdl
LmdldCgpLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmdldCgpKTsKICNlbmRpZgogI2lmIEVO
QUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAg
cHJvdmlkZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0KCksIG5vdGlmaWNhdGlvblByZXNlbnRlcklt
cGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAyMjkz
OGFkNmJkNmM0OTc1Zjc0ZmUzN2U0MTU0ODdmZWVjYTEyMTViLi5mM2RkZTUzYWJlNDFiMGU3MzRl
NDY1ZDRmZTAxNzgzNzBhZDMwYzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKQEAgLTg1LDYgKzg1LDcgQEAgY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3Mg
R2VvbG9jYXRpb25DbGllbnRQcm94eTsKIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsK
IGNsYXNzIFNwZWVjaElucHV0Q2xpZW50SW1wbDsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk7CiBjbGFzcyBVc2VyTWVkaWFDbGllbnRJbXBsOwogY2xhc3MgV2ViQWNjZXNzaWJp
bGl0eU9iamVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbXBsOwpAQCAtNzE0LDYgKzcxNSwxMCBA
QCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgT3duUHRyPFNwZWVjaElu
cHV0Q2xpZW50SW1wbD4gbV9zcGVlY2hJbnB1dENsaWVudDsKICNlbmRpZgorI2lmIEVOQUJMRShT
Q1JJUFRFRF9TUEVFQ0gpCisgICAgT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+
IG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIGF0dGVt
cHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGljc0NvbnRleHQzRCBiZWZvcmUKICAgICAv
LyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQgb24sIHdlIG5lZWQgdG8gaW5zdGFudGlh
dGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIgaG9sZHMgb24gdG8gdGhlIEdDM0QgaW4g
dGhpcyBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134578</attachid>
            <date>2012-03-29 07:27:24 -0700</date>
            <delta_ts>2012-03-30 07:11:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120329152722.patch</filename>
            <type>text/plain</type>
            <size>55952</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZjA2MzNhNTczMWViNWQ0ZTZmYTRiYTRlZWY1Y2U3NTdmYzM3Y2QxLi5j
NGY5YjljNjU3MzNmYmU3YmU1ZTkxNTk0MzdkNjI4NzFmMGI0MjBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDcgQEAKKzIwMTItMDMtMjkgIEhhbnMgV2VubmJvcmcgIDxod2VubmJvcmdAZ29vZ2xl
LmNvbT4KKworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJv
bWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVl
Y2hHcmFtbWFyOjpzcmMoKSBpcyBjYWxsZWQgd2l0aCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGJlY2F1c2UKKyAgICAgICAgdGhlIGF0dHJpYnV0ZSBzZXR0ZXIgbmVlZHMgaXQuIFByb3ZpZGUg
YSBzcmMoKSBtZXRob2QgdGhhdCBkb2Vzbid0CisgICAgICAgIHRha2UgYSBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgaW50ZXJuYWxseS4KKworICAgICAgICBSZW5hbWUg
U3BlZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpLCBldGMuIHRvIHVzZSBldmVu
dCBzdHlsZQorICAgICAgICBuYW1lcywgaS5lLiBkaWRTdGFydEF1ZGlvKCksIGV0Yy4KKworICAg
ICAgICBSZW1vdmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6Om5vdGlmeVZpc2liaWxpdHlIaWRk
ZW4oKS4gVGhlIGVtYmVkZGVyCisgICAgICAgIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSB2aXNpYmls
aXR5LgorCisgICAgICAgIFJlbW92ZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dW5yZWdpc3Rl
clNwZWVjaFJlY29nbml0aW9uLAorICAgICAgICBpdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywganVzdCBtaW5vciB0d2Vha3MuCisKKyAgICAgICAgKiBNb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hHcmFtbWFyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hHcmFtbWFyOjpz
cmMpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNwZWVjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRTb3VuZCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRBdWRpbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZUVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5oOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb24pOgorICAg
ICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAg
IChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmg6CisKIDIwMTItMDMtMjkgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMTI1MDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDUwZTc4NjRiYWU1
MTBhZWFkOWUzY2NhZGU0ZWQ5ZTNmNmYxYjBjODYuLmYxMjE1NTQ3MjFhOWQxMGQ4ZjI1NWRlOTA5
YWNiOWZkMjA1YWViMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEy
IEBACisyMDEyLTAzLTI5ICBIYW5zIFdlbm5ib3JnICA8aHdlbm5ib3JnQGdvb2dsZS5jb20+CisK
KyAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBsdW1iaW5n
IGZvciBzcGVlY2ggcmVjb2duaXRpb24uCisKKyAgICAgICAgU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eSBpbXBsZW1lbnRzIHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudAorICAgICAgICBp
bnRlcmZhY2UsIHByb3h5aW5nIGNhbGxzIHRocm91Z2ggdG8gV2ViU3BlZWNoUmVjb2duaXplciwg
d2hpY2gKKyAgICAgICAgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bS4KKworICAgICAg
ICBXZWJTcGVlY2hSZWNvZ25pemVyJ3Mgc3RhcnQoKSwgc3RvcCgpIGFuZCBhYm9ydCgpIG1ldGhv
ZCB0YWtlIGEKKyAgICAgICAgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQgb2JqZWN0IHRoYXQg
aXMgdXNlZCBieSB0aGUgZW1iZWRkZXIKKyAgICAgICAgdG8gcmVwb3J0IG9uIHByb2dyZXNzLCBy
ZXN1bHRzLCBldGMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9X
ZWJTcGVlY2hHcmFtbWFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNwZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hHcmFtbWFyOjp+V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgICogcHVibGljL1dlYlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6fldlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGll
bnQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYktpdDo6
b3BlcmF0b3I8KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0
ZXJzLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25Q
YXJhbWV0ZXJzKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp+V2ViU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQpOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyLmg6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXplcjo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml6ZXI6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplcjo6fldl
YlNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlld0NsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdDbGllbnQ6OnNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAqIHNyYy9TcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp+U3BlZWNoUmVj
b2duaXRpb25DbGllbnRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eTo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSk6CisgICAgICAgICogc3JjL1Nw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNo
R3JhbW1hci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoR3JhbW1hcjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFt
bWFyOjpXZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1h
cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6c3JjKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6d2VpZ2h0KToKKyAgICAgICAgKiBz
cmMvV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjpyZXNldCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Ojphc3NpZ24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6ZXF1YWxzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6Omxlc3NUaGFuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFN0YXJ0QXVkaW8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6ZGlkU3RhcnRT
b3VuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjpkaWRT
dGFydFNwZWVjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
OjpkaWRFbmRTcGVlY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudDo6ZGlkRW5kU291bmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudDo6ZGlkRW5kQXVkaW8pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50OjpkaWRSZWNlaXZlTm9NYXRjaCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjpkaWREZWxldGVSZXN1bHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZUVycm9yKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFN0YXJ0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZEVuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjpXZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dDo6b3BlcmF0b3IgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4pOgorICAgICAgICAqIHNy
Yy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVyczo6
V2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzOjpncmFtbWFycyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVyczo6bGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnM6OmNvbnRpbnVvdXMpOgorICAgICAgICAq
IHNyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmFzc2ln
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpyZXNldCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGVyYXRvciBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OldlYlZp
ZXdJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6
CisKIDIwMTItMDMtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBbQ2hyb21pdW1dIE1vdmUgQVBJcyByZWxhdGVkIHRvIFJlc291cmNlSGFuZGxlIGludG8gUGxh
dGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdy
YW1tYXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaApp
bmRleCA2MjA4OGMxOGIwYzhjYjAxZDM0MDdkMWQyNjZiODJjYjZkZDJmMmY5Li5lMDgzNThiYmYx
M2VkMmZmZWM0Y2U2NjYyMjY2OWZlYjlhMTRhMGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTcGVlY2hHcmFtbWFyPiBjcmVhdGUoY29uc3QgS1VSTCYgc3Jj
LCBkb3VibGUgd2VpZ2h0KTsKIAogICAgIGNvbnN0IEtVUkwmIHNyYyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KikgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KKyAgICBjb25zdCBLVVJMJiBzcmMoKSBj
b25zdCB7IHJldHVybiBtX3NyYzsgfQogICAgIHZvaWQgc2V0U3JjKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIHNyYyk7CiAKICAgICBkb3VibGUgd2VpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV93ZWlnaHQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcAppbmRleCAxYjNhYjMyNTQ4NTcyMDFhNjRlNGI4M2E1
M2I3YmMxNWMxNjlhZTAwLi4yYTc2NjllOTZkMzFkNzQzYmYxZWVhN2RiMTBmOTU1M2EzMjY0Mzhm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25p
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2du
aXRpb24uY3BwCkBAIC02Miw1OCArNjIsNjMgQEAgdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6YWJv
cnQoKQogICAgIG1fY29udHJvbGxlci0+YWJvcnQodGhpcyk7IC8vIEZJWE1FOiBTcGVjIHNob3Vs
ZCBzYXkgd2hhdCB0byBkbyBpZiB3ZSBhcmUgbm90IHN0YXJ0ZWQuCiB9CiAKLXZvaWQgU3BlZWNo
UmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29nbml0aW9u
OjpkaWRTdGFydEF1ZGlvKCkKIHsKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgc2hvdWxkIHNwZWNp
Znkgd2hldGhlciB0aGVzZSBldmVudHMgY2FuIGJ1YmJsZSBhbmQgYXJlIGNhbmNlbGFibGUuCiAg
ICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hdWRpb3N0YXJ0RXZl
bnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZv
aWQgU3BlZWNoUmVjb2duaXRpb246OnNvdW5kU3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpkaWRTdGFydFNvdW5kKCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnNvdW5kc3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwg
LypjYW5jZWxhYmxlPSovZmFsc2UpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3Bl
ZWNoU3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNwZWVj
aCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zcGVl
Y2hzdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkp
OwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzcGVlY2hFbmRDYWxsYmFjaygpCit2b2lk
IFNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRTcGVlY2goKQogewogICAgIGRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3BlZWNoZW5kRXZlbnQsIC8qY2FuQnViYmxlPSov
ZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRp
b246OmF1ZGlvRW5kQ2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU291
bmQoKQoreworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc291
bmRlbmRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsK
K30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kQXVkaW8oKQogewogICAgIGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYXVkaW9lbmRFdmVudCwgLypjYW5C
dWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsKIH0KIAotdm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbjo6cmVzdWx0Q2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdD4gcmVzdWx0LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVj
aFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkKK3ZvaWQgU3BlZWNoUmVjb2du
aXRpb246OmRpZFJlY2VpdmVSZXN1bHQoUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dD4gcmVzdWx0LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkKIHsKICAgICBkaXNwYXRjaEV2ZW50
KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6OmNyZWF0ZVJlc3VsdChyZXN1bHQsIHJlc3VsdEluZGV4
LCByZXN1bHRIaXN0b3J5KSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246Om5vTWF0Y2hD
YWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiByZXN1bHQpCit2b2lk
IFNwZWVjaFJlY29nbml0aW9uOjpkaWRSZWNlaXZlTm9NYXRjaChQYXNzUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0PiByZXN1bHQpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNv
Z25pdGlvbkV2ZW50OjpjcmVhdGVOb01hdGNoKHJlc3VsdCkpOwogfQogCi12b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjpyZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgsIFBh
c3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KQordm9p
ZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRGVsZXRlUmVzdWx0KHVuc2lnbmVkIHJlc3VsdEluZGV4
LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkK
IHsKICAgICBkaXNwYXRjaEV2ZW50KFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6OmNyZWF0ZVJlc3Vs
dERlbGV0ZWQocmVzdWx0SW5kZXgsIHJlc3VsdEhpc3RvcnkpKTsKIH0KIAotdm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbjo6ZXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJy
b3I+IGVycm9yKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZUVycm9yKFBhc3NS
ZWZQdHI8U3BlZWNoUmVjb2duaXRpb25FcnJvcj4gZXJyb3IpCiB7CiAgICAgZGlzcGF0Y2hFdmVu
dChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVFcnJvcihlcnJvcikpOwogfQogCi12b2lk
IFNwZWVjaFJlY29nbml0aW9uOjpzdGFydENhbGxiYWNrKCkKK3ZvaWQgU3BlZWNoUmVjb2duaXRp
b246OmRpZFN0YXJ0KCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLnN0YXJ0RXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2Zh
bHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246OmVuZENhbGxiYWNrKCkKK3ZvaWQg
U3BlZWNoUmVjb2duaXRpb246OmRpZEVuZCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5lbmRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5j
ZWxhYmxlPSovZmFsc2UpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5oCmluZGV4IDM5ZTAwODZmMGQ5NGNkMzhmN2ExMjgwNGJiNTdm
M2RlNzc1ZjIwM2MuLjNmYzI0NDE2NmUzMzhjM2IwZjYyY2ZjZjAyZjA4Yjg1YTVkNTU3MDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24u
aApAQCAtNjQsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0KCk7CiAKICAgICAv
LyBDYWxsZWQgYnkgdGhlIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50LgotICAgIHZvaWQgYXVkaW9T
dGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzb3VuZFN0YXJ0Q2FsbGJhY2soKTsKLSAgICB2b2lk
IHNwZWVjaFN0YXJ0Q2FsbGJhY2soKTsKLSAgICB2b2lkIHNwZWVjaEVuZENhbGxiYWNrKCk7Ci0g
ICAgdm9pZCBhdWRpb0VuZENhbGxiYWNrKCk7Ci0gICAgdm9pZCByZXN1bHRDYWxsYmFjayhQYXNz
UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRl
eCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3Rvcnkp
OwotICAgIHZvaWQgbm9NYXRjaENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+KTsKLSAgICB2b2lkIHJlc3VsdERlbGV0ZWRDYWxsYmFjayh1bnNpZ25lZCByZXN1bHRJ
bmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3Rv
cnkpOwotICAgIHZvaWQgZXJyb3JDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9u
RXJyb3I+KTsKLSAgICB2b2lkIHN0YXJ0Q2FsbGJhY2soKTsKLSAgICB2b2lkIGVuZENhbGxiYWNr
KCk7CisgICAgdm9pZCBkaWRTdGFydEF1ZGlvKCk7CisgICAgdm9pZCBkaWRTdGFydFNvdW5kKCk7
CisgICAgdm9pZCBkaWRTdGFydFNwZWVjaCgpOworICAgIHZvaWQgZGlkRW5kU3BlZWNoKCk7Cisg
ICAgdm9pZCBkaWRFbmRTb3VuZCgpOworICAgIHZvaWQgZGlkRW5kQXVkaW8oKTsKKyAgICB2b2lk
IGRpZFJlY2VpdmVSZXN1bHQoUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVu
c2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVOb01hdGNoKFBhc3NS
ZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KTsKKyAgICB2b2lkIGRpZERlbGV0ZVJlc3Vs
dCh1bnNpZ25lZCByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dExpc3Q+IHJlc3VsdEhpc3RvcnkpOworICAgIHZvaWQgZGlkUmVjZWl2ZUVycm9yKFBhc3NSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb25FcnJvcj4pOworICAgIHZvaWQgZGlkU3RhcnQoKTsKKyAgICB2
b2lkIGRpZEVuZCgpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgK
aW5kZXggNDYyNTU4MDdmMWMxNjg2MzRjOWM0MGI2ZmUxMTdmNjhiMGYxYmJkNC4uMjliYjlmNjZi
MmMxNjQ4MDQ5OWEyMjA1NjUwOTkyNjBkZGVjMzM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCkBAIC00MSw4
ICs0MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoU3BlZWNoUmVjb2duaXRp
b24qLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCosIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBj
b250aW51b3VzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoU3BlZWNoUmVjb2duaXRpb24q
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5SGlkZGVuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyLmgKaW5kZXggZWY1YzE5MDc1MGU4NWUzOWU1YjFjYzI1NjgxM2RhMTg1YjY4ODcx
Yi4uNTBiYzVhNDJmZWNmNDgzYjA3NjYxOWNmNDFhZGMzODUxNGQ3NmU4NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25D
b250cm9sbGVyLmgKQEAgLTQxLDggKzQxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnQoU3Bl
ZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCogZ3Jh
bW1hcnMsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSB7IG1fY2xpZW50LT5z
dGFydChyZWNvZ25pdGlvbiwgZ3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMpOyB9CiAgICAgdm9p
ZCBzdG9wKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+c3RvcChy
ZWNvZ25pdGlvbik7IH0KICAgICB2b2lkIGFib3J0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25p
dGlvbikgeyBtX2NsaWVudC0+YWJvcnQocmVjb2duaXRpb24pOyB9Ci0gICAgdm9pZCB2aXNpYmls
aXR5SGlkZGVuKCkgeyBtX2NsaWVudC0+dmlzaWJpbGl0eUhpZGRlbigpOyB9Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24oU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9u
KSB7IG1fY2xpZW50LT51bnJlZ2lzdGVyU3BlZWNoUmVjb2duaXRpb24ocmVjb2duaXRpb24pOyB9
CiAKICAgICBzdGF0aWMgUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXI+IGNy
ZWF0ZShTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCopOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIHN1cHBsZW1lbnROYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXgg
YjAzNWM3MGViYzc1ZjIwNWI2MzAzYWU3Y2U2MTQyZGU0ZThiZGU4Zi4uODU4ZTBhYjg3NDdhYzhk
ZTVlYjdkZjJiYzI0Zjc4YTNlOTE1NDgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApA
QCAtMjU3LDkgKzI1NywxNCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2hhcmVkV29y
a2VyUmVwb3NpdG9yeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNvY2tldC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNvY2tldENsaWVudC5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJTcGVlY2hJbnB1dExpc3RlbmVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3Bl
ZWNoSW5wdXRSZXN1bHQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJlY29n
bml0aW9uUGFyYW1ldGVycy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVj
b2duaXplci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWxsQ2hlY2tDbGllbnQu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlQXJlYS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCcsCkBAIC00NzgsNiAr
NDgzLDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1NvY2tldFN0cmVhbUhhbmRsZUludGVybmFs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoSW5wdXRDbGllbnRJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9TcGVlY2hJbnB1dENsaWVudEltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3Rv
cmFnZUFyZWFQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXJDaHJvbWl1bS5jcHAnLApAQCAtNjY2LDcgKzY3MywxMSBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViU29ja2V0SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvbGlkQ29s
b3JMYXllci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU29saWRDb2xvckxheWVySW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoR3JhbW1hci5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoSW5wdXRSZXN1bHQuY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMuY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTdG9yYWdlQXJlYUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlN0b3JhZ2VBcmVhSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VFdmVu
dERpc3BhdGNoZXJJbXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTcGVlY2hHcmFtbWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI2ZTk2YzU4ZjUzZDVhYjFiM2JmZjUx
ZTQ0NzA0NjMxZWRkODUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJTcGVlY2hHcmFtbWFyX2gKKyNkZWZpbmUgV2ViU3BlZWNoR3JhbW1hcl9oCisK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQ
cml2YXRlUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaEdy
YW1tYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFy
IHsKK3B1YmxpYzoKKyAgICBXZWJTcGVlY2hHcmFtbWFyKCkgeyB9CisgICAgfldlYlNwZWVjaEdy
YW1tYXIoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHNyYygpIGNv
bnN0OworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgd2VpZ2h0KCkgY29uc3Q7CisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAg
IFdlYlNwZWVjaEdyYW1tYXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdy
YW1tYXI+Jik7CisgICAgV2ViU3BlZWNoR3JhbW1hciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYpOworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiBtX3ByaXZhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaEdyYW1tYXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJmZDM1ZGNiZjNiYTU5MzQ1OGZkOGNmYjJm
MDdhZjBjOWVjNzcxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgKQEAgLTAsMCArMSwxMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50X2gKKyNkZWZpbmUgV2Vi
U3BlZWNoUmVjb2duaXRpb25DbGllbnRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9u
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTcGVlY2hSZWNv
Z25pdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0OworY2xhc3MgV2ViU3RyaW5nOworCisvLyBBIGNsaWVudCBmb3IgcmVwb3J0
aW5nIHByb2dyZXNzIG9uIHNwZWVjaCByZWNvZ25pdGlvbi4KK2NsYXNzIFdlYlNwZWVjaFJlY29n
bml0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+V2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQo
KSB7IHJlc2V0KCk7IH0KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCgpIHsgfQorCisg
ICAgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25D
bGllbnQmIG90aGVyKSB7IGFzc2lnbihvdGhlcik7IH0KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGFzc2lnbihvdGhlcik7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50Jik7CisKKyAg
ICAvLyBDb21wYXJpc29uIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgc28gdGhhdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudCBvYmplY3RzCisgICAgLy8gY2FuIGJlIHN0b3JlZCBpbiBhIGhhc2gg
bWFwLgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQmKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbGVzc1RoYW4oY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQmKSBjb25zdDsKKworICAgIC8vIFRoZXNlIG1l
dGhvZHMgY29ycmVzcG9uZCB0byB0aGUgZXZlbnRzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYzoKKyAg
ICAvLyBodHRwOi8vc3BlZWNoLWphdmFzY3JpcHQtYXBpLXNwZWMuZ29vZ2xlY29kZS5jb20vZ2l0
L3NwZWVjaGFwaS5odG1sI3NwZWVjaHJlY28tZXZlbnRzCisKKyAgICAvLyBUbyBiZSBjYWxsZWQg
d2hlbiB0aGUgZW1iZWRkZXIgaGFzIHN0YXJ0ZWQgdG8gY2FwdHVyZSBhdWRpby4KKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgZGlkU3RhcnRBdWRpbygpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdo
ZW4gc29tZSBzb3VuZCwgcG9zc2libHkgc3BlZWNoLCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAv
LyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhZnRlciBkaWRTdGFydEF1ZGlvLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBkaWRTdGFydFNvdW5kKCk7CisKKyAgICAvLyBUbyBiZSBjYWxs
ZWQgd2hlbiBzcGVlY2ggaGFzIGJlZW4gZGV0ZWN0ZWQuCisgICAgLy8gVGhpcyBpcyBleHBlY3Rl
ZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlkU3RhcnRTb3VuZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgZGlkU3RhcnRTcGVlY2goKTsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNwZWVjaCBp
cyBubyBsb25nZXIgZGV0ZWN0ZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZEVuZFNwZWVj
aCgpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gc291bmQgaXMgbm8gbG9uZ2VyIGRldGVj
dGVkLgorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZEVuZFNw
ZWVjaC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkRW5kU291bmQoKTsKKworICAgIC8vIFRv
IGJlIGNhbGxlZCB3aGVuIGF1ZGlvIGNhcHR1cmUgaGFzIHN0b3BwZWQuCisgICAgLy8gVGhpcyBp
cyBleHBlY3RlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlkRW5kU291bmQuCisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGRpZEVuZEF1ZGlvKCk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUg
c3BlZWNoIHJlY29nbml6ZXIgcmV0dXJucyBhIHJlc3VsdC4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgZGlkUmVjZWl2ZVJlc3VsdChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYsIHVu
c2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdD4mIHJlc3VsdEhpc3RvcnkpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4g
dGhlIHNwZWVjaCByZWNvZ25pemVyIHJldHVybnMgYSBmaW5hbCByZXN1bHQgd2l0aCBubworICAg
IC8vIHJlY29nbml6aW9uIGh5cG90aGVzaXMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFJl
Y2VpdmVOb01hdGNoKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Jik7CisKKyAgICAv
LyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXplciBuZWVkcyB0byBkZWxldGUgb25lIG9m
IHRoZSBwcmV2aW91c2x5CisgICAgLy8gcmV0dXJuZWQgaW50ZXJpbSByZXN1bHRzLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBkaWREZWxldGVSZXN1bHQodW5zaWduZWQgcmVzdWx0SW5kZXgsIGNv
bnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHJlc3VsdEhpc3Rvcnkp
OworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gYSBzcGVlY2ggcmVjb2duaXRpb24gZXJyb3Ig
b2NjdXJzLgorICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgYW4gZW51bSBmb3IgdGhlIGVycm9yIGNv
ZGUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFJlY2VpdmVFcnJvcihjb25zdCBXZWJTdHJp
bmcmIG1lc3NhZ2UsIHVuc2lnbmVkIHNob3J0IGNvZGUpOworCisgICAgLy8gVG8gYmUgY2FsbGVk
IHdoZW4gdGhlIHJlY29nbml6ZXIgaGFzIGJlZ3VuIHRvIGxpc3RlbiB0byB0aGUgYXVkaW8gd2l0
aAorICAgIC8vIHRoZSBpbnRlbnRpb24gb2YgcmVjb2duaXppbmcuCisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGRpZFN0YXJ0KCk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb2du
aXRpb24gc2Vzc2lvbiBoYXMgZW5kZWQuIFRoaXMgbXVzdCBhbHdheXMgYmUKKyAgICAvLyBjYWxs
ZWQsIG5vIG1hdHRlciB0aGUgcmVhc29uIGZvciB0aGUgZW5kLgorICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBkaWRFbmQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvbj4mKTsKKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCYgb3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbj4mKTsKKyAg
ICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+KCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OlNw
ZWVjaFJlY29nbml0aW9uPiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50JiBhLCBjb25zdCBXZWJTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudCYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQmIGEsIGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50JiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudCYgYSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQmIGIpCit7CisgICAg
cmV0dXJuIGEubGVzc1RoYW4oYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gU3BlZWNoUmVjb2duaXRpb25DbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNmZjZTYyZGMwZjUyMmVjODQ4NzA4NmQ4MmNhYmEyNzE2Nzg3M2QwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNo
UmVjb2duaXRpb25QYXJhbWV0ZXJzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzX2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVj
b2duaXRpb25QYXJhbWV0ZXJzX2gKKworI2luY2x1ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIKKyNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0
b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaEdyYW1tYXI7CisK
K2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVycyB7CitwdWJsaWM6CisgICAgV2Vi
U3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzKGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFt
bWFyPiYsIGNvbnN0IFdlYlN0cmluZyYgbGFuZ3VhZ2UsIGJvb2wgY29udGludW91cyk7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFyPiYgZ3JhbW1h
cnMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGNvbnN0IFdlYlN0cmluZyYgbGFuZ3VhZ2Uo
KSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgY29udGludW91cygpIGNvbnN0OworCitw
cml2YXRlOgorICAgIFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFyPiBtX2dyYW1tYXJzOworICAg
IFdlYlN0cmluZyBtX2xhbmd1YWdlOworICAgIGJvb2wgbV9jb250aW51b3VzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
ZXRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUzZjU0MzExOWM2MWE2YjNk
ZDFlNTNjZWZkMDU4ZTA1OTM2OThkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHRfaAorI2RlZmlu
ZSBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJD
b21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQg
eworcHVibGljOgorICAgIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyB9CisgICAgfldl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0cmFuc2NyaXB0cywg
Y29uc3QgV2ViVmVjdG9yPGZsb2F0PiYgY29uZmlkZW5jZXMsIGJvb2wgZmluYWwpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQm
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdD4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZh
dGVQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Bl
ZWNoUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNo
UmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjYWJhNzI3ODBlOGE2MGQyMWZmNjBjMDE5OGU2ZWI4
NmY3MmMwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTcGVlY2hSZWNvZ25pemVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViU3BlZWNoUmVjb2duaXplcl9oCisjZGVmaW5lIFdlYlNwZWVjaFJlY29nbml6ZXJfaAor
CisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOworY2xhc3MgV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQ7CisKKy8vIEludGVyZmFjZSBmb3Igc3BlZWNoIHJlY29nbml0aW9uLCB0byBi
ZSBpbXBsZW1lbnRlZCBieSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVy
IHsKK3B1YmxpYzoKKyAgICAvLyBTdGFydCBzcGVlY2ggcmVjb2duaXRpb24gdXNpbmcgdGhlIHNw
ZWNpZmllZCBwYXJhbWV0ZXJzLiBOb3RpZmljYXRpb25zIG9uIHByb2dyZXNzLCByZXN1bHRzLCBh
bmQgZXJyb3JzIHdpbGwgYmUgc2VudCB0byB0aGUgY2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBz
dGFydChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMmLCBjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudCYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICAvLyBTdG9wIHNwZWVjaCByZWNvZ25pdGlvbiwgcmV0dXJuaW5nIGFueSByZXN1bHRzIGZv
ciB0aGUgYXVkaW8gcmVjb3JkZWQgc28gZmFyLiBOb3RpZmljYXRpb25zIGFuZCBlcnJvcnMgYXJl
IHNlbnQgdG8gdGhlIGNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcChjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudCYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICAvLyBBYm9ydCBzcGVlY2ggcmVjb2duaXRpb24sIGRpc2NhcmRpbmcgYW55IHJlY29yZGVk
IGF1ZGlvLiBOb3RpZmljYXRpb25zIGFuZCBlcnJvcnMgYXJlIHNlbnQgdG8gdGhlIGNsaWVudC4K
KyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQm
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+V2ViU3BlZWNoUmVjb2duaXplcigpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pemVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAppbmRleCBmMjkwMzNjNzIzODAwNWM1ZWQ3
MmRhYzMxYjgxODlhYWQ0ODMzODE3Li5iOGZlOWQwYzVmNjE1MzYxOTIxYzcxMDVhYTBlMDA1MDlk
MmM2NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCkBAIC02OCw2ICs2OCw3IEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNs
YXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwogY2xhc3MgV2Vi
U3BlZWNoSW5wdXRMaXN0ZW5lcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBX
ZWJTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVVJMUmVxdWVzdDsK
QEAgLTMxNiw2ICszMTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcigKICAgICAgICAgV2ViU3BlZWNoSW5wdXRM
aXN0ZW5lciopIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRkZXIgQVBJ
IGZvciBzcGVlY2ggcmVjb2duaXRpb24gc2VydmljZXMuCisgICAgdmlydHVhbCBXZWJTcGVlY2hS
ZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gRGV2
aWNlIE9yaWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBBY2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgZGV2aWNlIG9y
aWVudGF0aW9uIHNlcnZpY2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTMz
ZDA1OTk2NjNiN2M2MTVjMWM0ODNmZGUyMmM1YmIxODA5MmI0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5j
cHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCisKKyNpbmNsdWRlICJTcGVlY2hH
cmFtbWFyTGlzdC5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uLmgiCisjaW5jbHVkZSAi
V2ViU3BlZWNoR3JhbW1hci5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzLmgiCisjaW5jbHVk
ZSAiV2ViU3BlZWNoUmVjb2duaXplci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp+U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eSgpCit7Cit9CisKK1Bhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eT4gU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKFdlYlNwZWVjaFJlY29nbml6ZXIqIHJl
Y29nbml6ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5KHJlY29nbml6ZXIpKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dFByb3h5OjpzdGFydChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24sIGNvbnN0IFNwZWVj
aEdyYW1tYXJMaXN0KiBncmFtbWFyTGlzdCwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29sIGNvbnRp
bnVvdXMpCit7CisgICAgV2ViVmVjdG9yPFdlYlNwZWVjaEdyYW1tYXI+IHdlYlNwZWVjaEdyYW1t
YXJzKGdyYW1tYXJMaXN0LT5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAw
OyBpIDwgZ3JhbW1hckxpc3QtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIHdlYlNwZWVjaEdyYW1t
YXJzW2ldID0gZ3JhbW1hckxpc3QtPml0ZW0oaSk7CisKKyAgICBtX3JlY29nbml6ZXItPnN0YXJ0
KFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVycyh3ZWJTcGVlY2hHcmFtbWFycywgbGFuZywg
Y29udGludW91cyksIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KHJlY29nbml0aW9uKSk7Cit9
CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RvcChTcGVlY2hSZWNvZ25p
dGlvbiogcmVjb2duaXRpb24pCit7CisgICAgbV9yZWNvZ25pemVyLT5zdG9wKFdlYlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50KHJlY29nbml0aW9uKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eTo6YWJvcnQoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKQorewor
ICAgIG1fcmVjb2duaXplci0+YWJvcnQoV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQocmVjb2du
aXRpb24pKTsKK30KKworU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6U3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyKQorICAgIDog
bV9yZWNvZ25pemVyKHJlY29nbml6ZXIpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczZmUwOGQ2MTFlODYwNGI5ZTAyZjU1NTAxNTBl
Zjc0MDhmOTBiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eV9oCisjZGVmaW5lIFNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHlfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db21w
aWxlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXplcjsKK2Ns
YXNzIFdlYlN0cmluZzsKKworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSA6IHB1
YmxpYyBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgflNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoKTsKKworICAgIC8vIENvbnN0cnVjdGluZyBhIHBy
b3h5IG9iamVjdCB3aXRoIGEgMCBXZWJTcGVlY2hSZWNvZ25pemVyIGlzIHNhZmUgaW4KKyAgICAv
LyBpdHNlbGYsIGJ1dCBhdHRlbXB0aW5nIHRvIGNhbGwgc3RhcnQvc3RvcC9hYm9ydCBvbiBpdCB3
aWxsIGNyYXNoLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50
UHJveHk+IGNyZWF0ZShXZWJTcGVlY2hSZWNvZ25pemVyKik7CisKKyAgICAvLyBXZWJDb3JlOjpT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudDoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoV2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb24qLCBjb25zdCBXZWJDb3JlOjpTcGVlY2hHcmFtbWFyTGlzdCosIGNv
bnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhYm9ydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURFOwor
Citwcml2YXRlOgorICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoV2ViU3BlZWNoUmVj
b2duaXplciopOworCisgICAgV2ViU3BlZWNoUmVjb2duaXplciogbV9yZWNvZ25pemVyOworfTsK
KworfTsgLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
cGVlY2hHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaEdy
YW1tYXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmY2NkNDBjYmMxYjQ1ODFkMWFjNjY0ZTBkZjQzMGFkMDAw
OTM1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
cGVlY2hHcmFtbWFyLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIKKworI2luY2x1ZGUgIlNwZWVjaEdy
YW1tYXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJTcGVlY2hHcmFtbWFyOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJl
c2V0KCk7Cit9CisKK1dlYlNwZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIoY29uc3QgUGFz
c1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYgdmFsdWUpCisgICAgOiBtX3ByaXZhdGUo
dmFsdWUpCit7Cit9CisKK1dlYlNwZWVjaEdyYW1tYXImIFdlYlNwZWVjaEdyYW1tYXI6Om9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVl
KQoreworICAgIG1fcHJpdmF0ZSA9IHZhbHVlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
VVJMIFdlYlNwZWVjaEdyYW1tYXI6OnNyYygpIGNvbnN0Cit7CisgICAgV0VCS0lUX0FTU0VSVCht
X3ByaXZhdGUuZ2V0KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnNyYygpOworfQorCitmbG9h
dCBXZWJTcGVlY2hHcmFtbWFyOjp3ZWlnaHQoKSBjb25zdAoreworICAgIFdFQktJVF9BU1NFUlQo
bV9wcml2YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWlnaHQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJmNTcy
NjlkNjhhYTIxZjc1YTJiNWE0OGZiN2I1OGE0NTIyY2JmMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmNwcApA
QCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgorCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b24uaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dExpc3QuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnQ6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsK
K30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6YXNzaWduKGNvbnN0IFdlYlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5t
X3ByaXZhdGU7Cit9CisKK2Jvb2wgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmVxdWFscyhj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtX3ByaXZhdGUuZ2V0KCkgPT0gb3RoZXIubV9wcml2YXRlLmdldCgpKTsKK30KKworYm9v
bCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6bGVzc1RoYW4oY29uc3QgV2ViU3BlZWNoUmVj
b2duaXRpb25DbGllbnQmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAobV9wcml2YXRlLmdl
dCgpIDwgb3RoZXIubV9wcml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudDo6ZGlkU3RhcnRBdWRpbygpCit7CisgICAgbV9wcml2YXRlLT5kaWRTdGFydEF1
ZGlvKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFN0YXJ0U291
bmQoKQoreworICAgIG1fcHJpdmF0ZS0+ZGlkU3RhcnRTb3VuZCgpOworfQorCit2b2lkIFdlYlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50OjpkaWRTdGFydFNwZWVjaCgpCit7CisgICAgbV9wcml2YXRl
LT5kaWRTdGFydFNwZWVjaCgpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
OjpkaWRFbmRTcGVlY2goKQoreworICAgIG1fcHJpdmF0ZS0+ZGlkRW5kU3BlZWNoKCk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZEVuZFNvdW5kKCkKK3sKKyAgICBt
X3ByaXZhdGUtPmRpZEVuZFNvdW5kKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25D
bGllbnQ6OmRpZEVuZEF1ZGlvKCkKK3sKKyAgICBtX3ByaXZhdGUtPmRpZEVuZEF1ZGlvKCk7Cit9
CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFJlY2VpdmVSZXN1bHQoY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1
bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVz
dWx0SGlzdG9yeSkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
PiA+IHJlc3VsdEhpc3RvcnlWZWN0b3IocmVzdWx0SGlzdG9yeS5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0SGlzdG9yeS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVz
dWx0SGlzdG9yeVZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5W2ldKSk7CisKKyAgICBtX3ByaXZhdGUtPmRp
ZFJlY2VpdmVSZXN1bHQocmVzdWx0LCByZXN1bHRJbmRleCwgU3BlZWNoUmVjb2duaXRpb25SZXN1
bHRMaXN0OjpjcmVhdGUocmVzdWx0SGlzdG9yeVZlY3RvcikpOworfQorCit2b2lkIFdlYlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50OjpkaWRSZWNlaXZlTm9NYXRjaChjb25zdCBXZWJTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdCYgcmVzdWx0KQoreworICAgIG1fcHJpdmF0ZS0+ZGlkUmVjZWl2ZU5vTWF0
Y2gocmVzdWx0KTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6ZGlkRGVs
ZXRlUmVzdWx0KHVuc2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFZlY3RvcjxSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3RvcihyZXN1bHRIaXN0
b3J5LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRIaXN0b3J5LnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVuZChzdGF0aWNfY2Fz
dDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3VsdEhpc3RvcnlbaV0p
KTsKKworICAgIG1fcHJpdmF0ZS0+ZGlkRGVsZXRlUmVzdWx0KHJlc3VsdEluZGV4LCBTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFJlY2VpdmVFcnJvcihjb25zdCBX
ZWJTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIHNob3J0IGNvZGUpCit7CisgICAgU3BlZWNoUmVj
b2duaXRpb25FcnJvcjo6Q29kZSBlcnJvckNvZGUgPSBzdGF0aWNfY2FzdDxTcGVlY2hSZWNvZ25p
dGlvbkVycm9yOjpDb2RlPihjb2RlKTsKKyAgICBtX3ByaXZhdGUtPmRpZFJlY2VpdmVFcnJvcihT
cGVlY2hSZWNvZ25pdGlvbkVycm9yOjpjcmVhdGUoZXJyb3JDb2RlLCBtZXNzYWdlKSk7Cit9CisK
K3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6OmRpZFN0YXJ0KCkKK3sKKyAgICBtX3By
aXZhdGUtPmRpZFN0YXJ0KCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6
OmRpZEVuZCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmQoKTsKK30KKworV2ViU3BlZWNoUmVj
b2duaXRpb25DbGllbnQ6OldlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50KGNvbnN0IFBhc3NSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb24+JiBzcGVlY2hSZWNvZ25pdGlvbikKKyAgICA6IG1fcHJpdmF0
ZShzcGVlY2hSZWNvZ25pdGlvbikKK3sKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb25DbGllbnQm
IFdlYlNwZWVjaFJlY29nbml0aW9uQ2xpZW50OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvbj4mIHNwZWVjaFJlY29nbml0aW9uKQoreworICAgIG1fcHJpdmF0ZSA9
IHNwZWVjaFJlY29nbml0aW9uOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViU3BlZWNoUmVj
b2duaXRpb25DbGllbnQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVj
aFJlY29nbml0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjYjg5ZmVmNzY4
ZDg4NDEzOTBhODZlMWQzMzhiMzdmNTI1NTc0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMuY3BwCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
U3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnM6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1l
dGVycyhjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4mIGdyYW1tYXJzLCBjb25zdCBX
ZWJTdHJpbmcmIGxhbmd1YWdlLCBib29sIGNvbnRpbnVvdXMpCisgICAgOiBtX2dyYW1tYXJzKGdy
YW1tYXJzKQorICAgICwgbV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fY29udGludW91cyhj
b250aW51b3VzKQoreworfQorCitjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4mIFdl
YlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVyczo6Z3JhbW1hcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2dyYW1tYXJzOworfQorCitjb25zdCBXZWJTdHJpbmcmIFdlYlNwZWVjaFJlY29nbml0
aW9uUGFyYW1ldGVyczo6bGFuZ3VhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhbmd1YWdl
OworfQorCitib29sIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVyczo6Y29udGludW91cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGludW91czsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA3Zjk1NjM2NjI2ODRmYzYzMTlj
ZmUyMjA4MjFkM2M2M2VhOGJjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0LmgiCisKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlLmgi
CisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmFzc2lnbihjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdCYgb3RoZXIpCit7CisgICAgbV9wcml2YXRlID0gb3RoZXIubV9w
cml2YXRlOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojphc3NpZ24oY29u
c3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHRyYW5zY3JpcHRzLCBjb25zdCBXZWJWZWN0b3I8Zmxv
YXQ+JiBjb25maWRlbmNlcywgYm9vbCBmaW5hbCkKK3sKKyAgICBBU1NFUlQodHJhbnNjcmlwdHMu
c2l6ZSgpID09IGNvbmZpZGVuY2VzLnNpemUoKSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4gYWx0ZXJuYXRpdmVzKHRyYW5zY3Jp
cHRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2NyaXB0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChXZWJDb3JlOjpTcGVlY2hSZWNv
Z25pdGlvbkFsdGVybmF0aXZlOjpjcmVhdGUodHJhbnNjcmlwdHNbaV0sIGNvbmZpZGVuY2VzW2ld
KSk7CisKKyAgICBtX3ByaXZhdGUgPSBXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6
Y3JlYXRlKGFsdGVybmF0aXZlcywgZmluYWwpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0OjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK1dlYlNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGVyYXRvciBQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMWIzYWI1ODlkNmY3YzRlN2FiZGMxMTE0NDlkMjdhODFi
ZWYyMzEyNS4uZDU5MzkzYjM5YzMyZGQ4YzM5ZGQxNzkzZjNjMGRmZmQ1YTlkODlkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTA2LDcgKzEwNiw3
IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIlNwZWVjaElucHV0Q2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAjaW5jbHVkZSAiVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCkBAIC0zNjMs
NiArMzYzLDkgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVu
dCkKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgICwgbV9zcGVlY2hJbnB1dENsaWVudChT
cGVlY2hJbnB1dENsaWVudEltcGw6OmNyZWF0ZShjbGllbnQpKQogI2VuZGlmCisjaWYgRU5BQkxF
KFNDUklQVEVEX1NQRUVDSCkKKyAgICAsIG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQoU3BlZWNo
UmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKGNsaWVudCA/IGNsaWVudC0+c3BlZWNoUmVj
b2duaXplcigpIDogMCkpCisjZW5kaWYKICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQ
cm94eShhZG9wdFB0cihuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBj
bGllbnQtPmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0
aW9uQ2xpZW50UHJveHkoYWRvcHRQdHIobmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50
ID8gY2xpZW50LT5nZW9sb2NhdGlvbkNsaWVudCgpIDogMCkpKQogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCkBAIC0zOTYsNyArMzk5LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZp
ZXdDbGllbnQqIGNsaWVudCkKICAgICBwcm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCks
IG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVE
X1NQRUVDSCkKLSAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDAp
OyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgaW1wbGVtZW50YXRpb24uCisgICAgcHJvdmlkZVNw
ZWVjaFJlY29nbml0aW9uVG8obV9wYWdlLmdldCgpLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVH
QUNZX05PVElGSUNBVElPTlMpCiAgICAgcHJvdmlkZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0KCks
IG5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAppbmRleCAzMDgyZDRlMDEzNWFmZWRiYTI1MzA4OTRjZTYwMDNiZTQyYjg1
MWFkLi41MzIzYzMxNzAxNWNhMDQ3YWY1NGU4YjRjYWY1NGExZjU5OTU1YmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTg1LDYgKzg1LDcgQEAgY2xhc3Mg
RHJhZ1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9jYXRpb25DbGllbnRQcm94eTsKIGNsYXNzIE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdDsKIGNsYXNzIFNwZWVjaElucHV0Q2xpZW50SW1wbDsKK2Ns
YXNzIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk7CiBjbGFzcyBVc2VyTWVkaWFDbGllbnRJ
bXBsOwogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJ
bXBsOwpAQCAtNzE4LDYgKzcxOSwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlBVVF9TUEVF
Q0gpCiAgICAgT3duUHRyPFNwZWVjaElucHV0Q2xpZW50SW1wbD4gbV9zcGVlY2hJbnB1dENsaWVu
dDsKICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgT3duUHRyPFNwZWVj
aFJlY29nbml0aW9uQ2xpZW50UHJveHk+IG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CisjZW5k
aWYKKwogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGlj
c0NvbnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQg
b24sIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIg
aG9sZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134803</attachid>
            <date>2012-03-30 07:11:44 -0700</date>
            <delta_ts>2012-04-02 06:23:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120330151143.patch</filename>
            <type>text/plain</type>
            <size>55418</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MTZiYTZhZmYwNWY5OWJhMDg3YTI3ZWI5OTIzZTk4YjVlZmQ5MWMxLi43
NjQxODJjNDBiY2E2YmZkZDY5ZmU2MjgxYzlhNTM4NzA2MTA3N2RlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDcgQEAKKzIwMTItMDMtMzAgIEhhbnMgV2VubmJvcmcgIDxod2VubmJvcmdAZ29vZ2xl
LmNvbT4KKworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJv
bWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVl
Y2hHcmFtbWFyOjpzcmMoKSBpcyBjYWxsZWQgd2l0aCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGJlY2F1c2UKKyAgICAgICAgdGhlIGF0dHJpYnV0ZSBzZXR0ZXIgbmVlZHMgaXQuIFByb3ZpZGUg
YSBzcmMoKSBtZXRob2QgdGhhdCBkb2Vzbid0CisgICAgICAgIHRha2UgYSBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgaW50ZXJuYWxseS4KKworICAgICAgICBSZW5hbWUg
U3BlZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpLCBldGMuIHRvIHVzZSBldmVu
dCBzdHlsZQorICAgICAgICBuYW1lcywgaS5lLiBkaWRTdGFydEF1ZGlvKCksIGV0Yy4KKworICAg
ICAgICBSZW1vdmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6Om5vdGlmeVZpc2liaWxpdHlIaWRk
ZW4oKS4gVGhlIGVtYmVkZGVyCisgICAgICAgIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSB2aXNpYmls
aXR5LgorCisgICAgICAgIFJlbW92ZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dW5yZWdpc3Rl
clNwZWVjaFJlY29nbml0aW9uLAorICAgICAgICBpdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywganVzdCBtaW5vciB0d2Vha3MuCisKKyAgICAgICAgKiBNb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hHcmFtbWFyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hHcmFtbWFyOjpz
cmMpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1ZGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNvdW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNwZWVjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRTb3VuZCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRBdWRpbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZUVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5oOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb24pOgorICAg
ICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAg
IChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25Db250cm9sbGVyLmg6CisKIDIwMTItMDMtMzAgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFdlYkF1ZGlvIGNoYW5u
ZWxTaXplIGlzc3VlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQ2NDI1NTNlYzRiMTcw
NGNiODhiMTRmZmUyMTkwMmU3YTk4NmU4ZDQuLjc2OTk2Y2ZjMzUzN2IyNjRjYWVhY2ZlYmIwOGZl
YmNmMDliNDgyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDEyLTAzLTMwICBIYW5zIFdlbm5ib3JnICA8aHdlbm5ib3JnQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBsdW1iaW5nIGZv
ciBzcGVlY2ggcmVjb2duaXRpb24uCisKKyAgICAgICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eSBpbXBsZW1lbnRzIHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudAorICAgICAgICBpbnRl
cmZhY2UsIHByb3h5aW5nIGNhbGxzIHRocm91Z2ggdG8gV2ViU3BlZWNoUmVjb2duaXplciwgd2hp
Y2gKKyAgICAgICAgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBDaHJvbWl1bS4KKworICAgICAgICBX
ZWJTcGVlY2hSZWNvZ25pemVyJ3Mgc3RhcnQoKSwgc3RvcCgpIGFuZCBhYm9ydCgpIG1ldGhvZHMg
dGFrZSBhCisgICAgICAgIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQgb2JqZWN0IHRoYXQgaXMg
dXNlZCBieSB0aGUgZW1iZWRkZXIKKyAgICAgICAgdG8gcmVwb3J0IG9uIHByb2dyZXNzLCByZXN1
bHRzLCBldGMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJT
cGVlY2hHcmFtbWFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVl
Y2hHcmFtbWFyOjp+V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgICogcHVibGljL1dlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6fldlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXplckNsaWVudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcjwp
OgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMp
OgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6On5XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6
CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXIuaDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXplcjo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pemVyOjpzdG9wKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplcjo6YWJv
cnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyOjp+V2ViU3BlZWNoUmVj
b2duaXplcik6CisgICAgICAgICogcHVibGljL1dlYlZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJWaWV3Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0NsaWVudDo6c3BlZWNoUmVjb2duaXplcik6CisgICAgICAgICogc3JjL1NwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6On5TcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eTo6c3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
OjpzdG9wKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6
YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KToKKyAgICAgICAgKiBzcmMvU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHkpOgorICAgICAgICAqIHNyYy9XZWJTcGVlY2hHcmFtbWFyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hH
cmFtbWFyOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaEdyYW1tYXI6OldlYlNw
ZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpzcmMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjp3ZWlnaHQpOgorICAgICAgICAqIHNyYy9XZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpyZXNldCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmFzc2lnbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmVxdWFscyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Omxlc3NUaGFuKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnRBdWRpbyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0U291bmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNwZWVjaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZFNwZWVjaCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZFNvdW5kKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kQXVkaW8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRSZWNlaXZl
UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlk
UmVjZWl2ZU5vTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50OjpkaWREZWxldGVSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50OjpkaWRSZWNlaXZlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OmRpZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpvcGVyYXRvciBQYXNzUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uPik6CisgICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVy
cy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzOjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtZXRlcnM6OmdyYW1t
YXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbWV0ZXJzOjps
YW5ndWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1ldGVy
czo6Y29udGludW91cyk6CisgICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdDo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQ6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ+KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKwogMjAxMi0wMy0yOSAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTI1
NzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFt
bWFyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFyLmgKaW5k
ZXggNjIwODhjMThiMGM4Y2IwMWQzNDA3ZDFkMjY2YjgyY2I2ZGQyZjJmOS4uZTA4MzU4YmJmMTNl
ZDJmZmVjNGNlNjY2MjI2NjlmZWI5YTE0YTBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hcj4gY3JlYXRlKGNvbnN0IEtVUkwmIHNyYywg
ZG91YmxlIHdlaWdodCk7CiAKICAgICBjb25zdCBLVVJMJiBzcmMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgS1VSTCYgc3JjKCkgY29u
c3QgeyByZXR1cm4gbV9zcmM7IH0KICAgICB2b2lkIHNldFNyYyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBzcmMpOwogCiAgICAgZG91YmxlIHdlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2VpZ2h0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKaW5kZXggMWIzYWIzMjU0ODU3MjAxYTY0ZTRiODNhNTNi
N2JjMTVjMTY5YWUwMC4uMmE3NjY5ZTk2ZDMxZDc0M2JmMWVlYTdkYjEwZjk1NTNhMzI2NDM4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0
aW9uLmNwcApAQCAtNjIsNTggKzYyLDYzIEBAIHZvaWQgU3BlZWNoUmVjb2duaXRpb246OmFib3J0
KCkKICAgICBtX2NvbnRyb2xsZXItPmFib3J0KHRoaXMpOyAvLyBGSVhNRTogU3BlYyBzaG91bGQg
c2F5IHdoYXQgdG8gZG8gaWYgd2UgYXJlIG5vdCBzdGFydGVkLgogfQogCi12b2lkIFNwZWVjaFJl
Y29nbml0aW9uOjphdWRpb1N0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6
ZGlkU3RhcnRBdWRpbygpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIHNob3VsZCBzcGVjaWZ5
IHdoZXRoZXIgdGhlc2UgZXZlbnRzIGNhbiBidWJibGUgYW5kIGFyZSBjYW5jZWxhYmxlLgogICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYXVkaW9zdGFydEV2ZW50
LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lk
IFNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNv
Z25pdGlvbjo6ZGlkU3RhcnRTb3VuZCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5zb3VuZHN0YXJ0RXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8q
Y2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246OnNwZWVj
aFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRTcGVlY2go
KQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3BlZWNo
c3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsK
IH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJhY2soKQordm9pZCBT
cGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaGVuZEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2Zh
bHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9u
OjphdWRpb0VuZENhbGxiYWNrKCkKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZFNvdW5k
KCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNvdW5k
ZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7Cit9
CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZEF1ZGlvKCkKIHsKICAgICBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmF1ZGlvZW5kRXZlbnQsIC8qY2FuQnVi
YmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVj
b2duaXRpb246OnJlc3VsdENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ+IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCit2b2lkIFNwZWVjaFJlY29nbml0
aW9uOjpkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+
IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChT
cGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1bHQocmVzdWx0LCByZXN1bHRJbmRleCwg
cmVzdWx0SGlzdG9yeSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpub01hdGNoQ2Fs
bGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQordm9pZCBT
cGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2goUGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdD4gcmVzdWx0KQogewogICAgIGRpc3BhdGNoRXZlbnQoU3BlZWNoUmVjb2du
aXRpb25FdmVudDo6Y3JlYXRlTm9NYXRjaChyZXN1bHQpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNv
Z25pdGlvbjo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKHVuc2lnbmVkIHJlc3VsdEluZGV4LCBQYXNz
UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkKK3ZvaWQg
U3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCh1bnNpZ25lZCByZXN1bHRJbmRleCwg
UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7
CiAgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1bHRE
ZWxldGVkKHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5KSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVj
b2duaXRpb246OmVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9y
PiBlcnJvcikKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2VpdmVFcnJvcihQYXNzUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGVycm9yKQogewogICAgIGRpc3BhdGNoRXZlbnQo
U3BlZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlRXJyb3IoZXJyb3IpKTsKIH0KIAotdm9pZCBT
cGVlY2hSZWNvZ25pdGlvbjo6c3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29nbml0aW9u
OjpkaWRTdGFydCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxz
ZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygpCit2b2lkIFNw
ZWVjaFJlY29nbml0aW9uOjpkaWRFbmQoKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2Vs
YWJsZT0qL2ZhbHNlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoUmVjb2duaXRpb24uaAppbmRleCAzOWUwMDg2ZjBkOTRjZDM4ZjdhMTI4MDRiYjU3ZjNk
ZTc3NWYyMDNjLi4zZmMyNDQxNjZlMzM4YzNiMGY2MmNmY2YwMmYwOGI4NWE1ZDU1NzAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmgK
QEAgLTY0LDE3ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydCgpOwogCiAgICAgLy8g
Q2FsbGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4KLSAgICB2b2lkIGF1ZGlvU3Rh
cnRDYWxsYmFjaygpOwotICAgIHZvaWQgc291bmRTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBz
cGVlY2hTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzcGVlY2hFbmRDYWxsYmFjaygpOwotICAg
IHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOwotICAgIHZvaWQgcmVzdWx0Q2FsbGJhY2soUGFzc1Jl
ZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgs
IFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsK
LSAgICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVz
dWx0Pik7Ci0gICAgdm9pZCByZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5k
ZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5
KTsKLSAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVy
cm9yPik7Ci0gICAgdm9pZCBzdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBlbmRDYWxsYmFjaygp
OworICAgIHZvaWQgZGlkU3RhcnRBdWRpbygpOworICAgIHZvaWQgZGlkU3RhcnRTb3VuZCgpOwor
ICAgIHZvaWQgZGlkU3RhcnRTcGVlY2goKTsKKyAgICB2b2lkIGRpZEVuZFNwZWVjaCgpOworICAg
IHZvaWQgZGlkRW5kU291bmQoKTsKKyAgICB2b2lkIGRpZEVuZEF1ZGlvKCk7CisgICAgdm9pZCBk
aWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+LCB1bnNp
Z25lZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
TGlzdD4gcmVzdWx0SGlzdG9yeSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTm9NYXRjaChQYXNzUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7CisgICAgdm9pZCBkaWREZWxldGVSZXN1bHQo
dW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRM
aXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVFcnJvcihQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uRXJyb3I+KTsKKyAgICB2b2lkIGRpZFN0YXJ0KCk7CisgICAgdm9p
ZCBkaWRFbmQoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCmlu
ZGV4IDQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBmMWJiZDQuLjI5YmI5ZjY2YjJj
MTY0ODA0OTlhMjIwNTY1MDk5MjYwZGRlYzMzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaApAQCAtNDEsOCAr
NDEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KFNwZWVjaFJlY29nbml0aW9u
KiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29u
dGludW91cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNwZWVjaFJlY29nbml0aW9uKikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKikgPSAwOwogCiAg
ICAgdmlydHVhbCB+U3BlZWNoUmVjb2duaXRpb25DbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlci5oCmluZGV4IGVmNWMxOTA3NTBlODVlMzllNWIxY2MyNTY4MTNkYTE4NWI2ODg3MWIu
LjUwYmM1YTQyZmVjZjQ4M2IwNzY2MTljZjQxYWRjMzg1MTRkNzZlODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29u
dHJvbGxlci5oCkBAIC00MSw4ICs0MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KFNwZWVj
aFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqIGdyYW1t
YXJzLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgeyBtX2NsaWVudC0+c3Rh
cnQocmVjb2duaXRpb24sIGdyYW1tYXJzLCBsYW5nLCBjb250aW51b3VzKTsgfQogICAgIHZvaWQg
c3RvcChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pIHsgbV9jbGllbnQtPnN0b3AocmVj
b2duaXRpb24pOyB9CiAgICAgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRp
b24pIHsgbV9jbGllbnQtPmFib3J0KHJlY29nbml0aW9uKTsgfQotICAgIHZvaWQgdmlzaWJpbGl0
eUhpZGRlbigpIHsgbV9jbGllbnQtPnZpc2liaWxpdHlIaWRkZW4oKTsgfQotICAgIHZvaWQgdW5y
ZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikg
eyBtX2NsaWVudC0+dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKHJlY29nbml0aW9uKTsgfQog
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyPiBjcmVh
dGUoU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBzdXBwbGVtZW50TmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGIw
MzVjNzBlYmM3NWYyMDViNjMwM2FlN2NlNjE0MmRlNGU4YmRlOGYuLjcxY2UwNzkyZDNkNmY0MTAw
NWRlZDY3NzlkM2RmZmQxM2EzMzhlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTI1Nyw5ICsyNTcsMTQgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtl
clJlcG9zaXRvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXRDbGllbnQuaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
U3BlZWNoSW5wdXRMaXN0ZW5lci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVj
aElucHV0UmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXRpb25QYXJhbXMuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVy
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlbGxDaGVja0NsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYlN0b3JhZ2VBcmVhLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oJywKQEAgLTQ3OCw2ICs0ODMsOCBA
QAogICAgICAgICAgICAgICAgICdzcmMvU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9TcGVlY2hJbnB1dENsaWVudEltcGwuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAn
c3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9TdG9yYWdlQXJlYVByb3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlQXJl
YVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckNo
cm9taXVtLmNwcCcsCkBAIC02NjYsNyArNjczLDExIEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTb2NrZXRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU29saWRDb2xvckxheWVy
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hHcmFtbWFyLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTcGVlY2hJbnB1dFJlc3VsdC5jcHAnLAorICAgICAgICAgICAgICAgICdz
cmMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJT
dG9yYWdlQXJlYUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VBcmVh
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJ
bXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
cGVlY2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hH
cmFtbWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI2ZTk2YzU4ZjUzZDVhYjFiM2JmZjUxZTQ0NzA0NjMxZWRk
ODUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNwZWVjaEdyYW1tYXIuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJT
cGVlY2hHcmFtbWFyX2gKKyNkZWZpbmUgV2ViU3BlZWNoR3JhbW1hcl9oCisKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgi
CisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
VVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaEdyYW1tYXI7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyIHsKK3B1YmxpYzoK
KyAgICBXZWJTcGVlY2hHcmFtbWFyKCkgeyB9CisgICAgfldlYlNwZWVjaEdyYW1tYXIoKSB7IHJl
c2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHNyYygpIGNvbnN0OworICAgIFdF
QktJVF9FWFBPUlQgZmxvYXQgd2VpZ2h0KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlNwZWVjaEdy
YW1tYXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+Jik7Cisg
ICAgV2ViU3BlZWNoR3JhbW1hciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpTcGVlY2hHcmFtbWFyPiYpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0
ZVB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaEdyYW1tYXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUGFy
YW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGIyZDY1NTcyNDdmNzM0ZjFjYjIxMjgxODQ2YTkxNDFjZDQ0ZDRk
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNw
ZWVjaFJlY29nbml0aW9uUGFyYW1zLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXNfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25p
dGlvblBhcmFtc19oCisKKyNpbmNsdWRlICJXZWJTcGVlY2hHcmFtbWFyLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOworCitjbGFzcyBX
ZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyB7CitwdWJsaWM6CisgICAgV2ViU3BlZWNoUmVjb2du
aXRpb25QYXJhbXMoY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaEdyYW1tYXI+JiwgY29uc3QgV2Vi
U3RyaW5nJiBsYW5ndWFnZSwgYm9vbCBjb250aW51b3VzKTsKKworICAgIGNvbnN0IFdlYlZlY3Rv
cjxXZWJTcGVlY2hHcmFtbWFyPiYgZ3JhbW1hcnMoKSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJz
OyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFu
Z3VhZ2U7IH0KKyAgICBib29sIGNvbnRpbnVvdXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVv
dXM7IH0KKworcHJpdmF0ZToKKyAgICBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4gbV9ncmFt
bWFyczsKKyAgICBXZWJTdHJpbmcgbV9sYW5ndWFnZTsKKyAgICBib29sIG1fY29udGludW91czsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2du
aXRpb25QYXJhbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUzZjU0MzExOWM2
MWE2YjNkZDFlNTNjZWZkMDU4ZTA1OTM2OThkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHRfaAor
I2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdF9oCisKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQgeworcHVibGljOgorICAgIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyB9Cisg
ICAgfldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkgeyByZXNldCgpOyB9CisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0cmFuc2Ny
aXB0cywgY29uc3QgV2ViVmVjdG9yPGZsb2F0PiYgY29uZmlkZW5jZXMsIGJvb2wgZmluYWwpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdD4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdl
YlByaXZhdGVQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IG1fcHJpdmF0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2du
aXRpb25SZXN1bHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViU3BlZWNoUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U3BlZWNoUmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxYjZkYTUwZTdmMjk3OWE5ODdiMDMwZGYz
OGFmYjJkNDQ2MWY3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXplcl9oCisjZGVmaW5lIFdlYlNwZWVjaFJlY29nbml6
ZXJfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZv
cm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOworY2xhc3MgV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDsKKworLy8gSW50ZXJmYWNlIGZvciBzcGVlY2ggcmVjb2duaXRpb24s
IHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBlbWJlZGRlci4KK2NsYXNzIFdlYlNwZWVjaFJlY29n
bml6ZXIgeworcHVibGljOgorICAgIC8vIFN0YXJ0IHNwZWVjaCByZWNvZ25pdGlvbiB1c2luZyB0
aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuIE5vdGlmaWNhdGlvbnMgb24gcHJvZ3Jlc3MsIHJlc3Vs
dHMsIGFuZCBlcnJvcnMgd2lsbCBiZSBzZW50IHRvIHRoZSBjbGllbnQuCisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgY29uc3QgV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudCYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICAvLyBTdG9wIHNwZWVjaCByZWNvZ25pdGlvbiwgcmV0dXJuaW5nIGFueSByZXN1bHRzIGZv
ciB0aGUgYXVkaW8gcmVjb3JkZWQgc28gZmFyLiBOb3RpZmljYXRpb25zIGFuZCBlcnJvcnMgYXJl
IHNlbnQgdG8gdGhlIGNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcChjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwor
ICAgIC8vIEFib3J0IHNwZWVjaCByZWNvZ25pdGlvbiwgZGlzY2FyZGluZyBhbnkgcmVjb3JkZWQg
YXVkaW8uIE5vdGlmaWNhdGlvbnMgYW5kIGVycm9ycyBhcmUgc2VudCB0byB0aGUgY2xpZW50Lgor
ICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50Jikg
eyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgfldlYlNwZWVjaFJlY29nbml6ZXIoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzZkYWU1MmE3MGNhYTUwM2UzNGJiMmJjZDk4NDRkMzNhNDNjNGFhNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudF9oCisjZGVmaW5lIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnRf
aAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvbjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworY2xhc3MgV2Vi
U3RyaW5nOworCisvLyBBIGNsaWVudCBmb3IgcmVwb3J0aW5nIHByb2dyZXNzIG9uIHNwZWVjaCBy
ZWNvZ25pdGlvbi4KK2NsYXNzIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQgeworcHVibGljOgor
ICAgIH5XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KCkgeyByZXNldCgpOyB9CisgICAgV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudCgpIHsgfQorCisgICAgV2ViU3BlZWNoUmVjb2duaXplckNsaWVu
dChjb25zdCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50JiBvdGhlcikgeyBhc3NpZ24ob3RoZXIp
OyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQmIG90aGVyKQorICAgIHsKKyAgICAgICAgYXNzaWduKG90aGVy
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudCYpOworCisgICAgLy8gQ29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHNvIHRoYXQgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCBvYmplY3RzCisgICAgLy8g
Y2FuIGJlIHN0b3JlZCBpbiBhIGhhc2ggbWFwLgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVh
bHMoY29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYpIGNvbnN0OworICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBsZXNzVGhhbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50JikgY29u
c3Q7CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGNvcnJlc3BvbmQgdG8gdGhlIGV2ZW50cyBkZXNj
cmliZWQgaW4gdGhlIHNwZWM6CisgICAgLy8gaHR0cDovL3NwZWVjaC1qYXZhc2NyaXB0LWFwaS1z
cGVjLmdvb2dsZWNvZGUuY29tL2dpdC9zcGVlY2hhcGkuaHRtbCNzcGVlY2hyZWNvLWV2ZW50cwor
CisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gdGhlIGVtYmVkZGVyIGhhcyBzdGFydGVkIHRvIGNh
cHR1cmUgYXVkaW8uCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFN0YXJ0QXVkaW8oKTsKKwor
ICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNvbWUgc291bmQsIHBvc3NpYmx5IHNwZWVjaCwgaGFz
IGJlZW4gZGV0ZWN0ZWQuCisgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgYWZ0
ZXIgZGlkU3RhcnRBdWRpby4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkU3RhcnRTb3VuZCgp
OworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gc3BlZWNoIGhhcyBiZWVuIGRldGVjdGVkLgor
ICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZFN0YXJ0U291bmQu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFN0YXJ0U3BlZWNoKCk7CisKKyAgICAvLyBUbyBi
ZSBjYWxsZWQgd2hlbiBzcGVlY2ggaXMgbm8gbG9uZ2VyIGRldGVjdGVkLgorICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBkaWRFbmRTcGVlY2goKTsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNv
dW5kIGlzIG5vIGxvbmdlciBkZXRlY3RlZC4KKyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJl
IGNhbGxlZCBhZnRlciBkaWRFbmRTcGVlY2guCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZEVu
ZFNvdW5kKCk7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiBhdWRpbyBjYXB0dXJlIGhhcyBz
dG9wcGVkLgorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZEVu
ZFNvdW5kLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkaWRFbmRBdWRpbygpOworCisgICAgLy8g
VG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWVjaCByZWNvZ25pemVyIHJldHVybnMgYSByZXN1bHQu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRpZFJlY2VpdmVSZXN1bHQoY29uc3QgV2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQmLCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBjb25zdCBXZWJW
ZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KTsKKworICAg
IC8vIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzcGVlY2ggcmVjb2duaXplciByZXR1cm5zIGEgZmlu
YWwgcmVzdWx0IHdpdGggbm8KKyAgICAvLyByZWNvZ25pemlvbiBoeXBvdGhlc2lzLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBkaWRSZWNlaXZlTm9NYXRjaChjb25zdCBXZWJTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdCYpOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml6ZXIg
bmVlZHMgdG8gZGVsZXRlIG9uZSBvZiB0aGUgcHJldmlvdXNseQorICAgIC8vIHJldHVybmVkIGlu
dGVyaW0gcmVzdWx0cy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkRGVsZXRlUmVzdWx0KHVu
c2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+JiByZXN1bHRIaXN0b3J5KTsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIGEgc3Bl
ZWNoIHJlY29nbml0aW9uIGVycm9yIG9jY3Vycy4KKyAgICAvLyBGSVhNRTogSW50cm9kdWNlIGFu
IGVudW0gZm9yIHRoZSBlcnJvciBjb2RlLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkaWRSZWNl
aXZlRXJyb3IoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCBjb2RlKTsK
KworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pemVyIGhhcyBiZWd1biB0byBs
aXN0ZW4gdG8gdGhlIGF1ZGlvIHdpdGgKKyAgICAvLyB0aGUgaW50ZW50aW9uIG9mIHJlY29nbml6
aW5nLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkaWRTdGFydCgpOworCisgICAgLy8gVG8gYmUg
Y2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIHNlc3Npb24gaGFzIGVuZGVkLiBUaGlzIG11c3Qg
YWx3YXlzIGJlCisgICAgLy8gY2FsbGVkLCBubyBtYXR0ZXIgdGhlIHJlYXNvbiBmb3IgdGhlIGVu
ZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGlkRW5kKCk7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbj4mKTsKKyAgICBXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpT
cGVlY2hSZWNvZ25pdGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlBy
aXZhdGVQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+IG1fcHJpdmF0ZTsKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYgYSwg
Y29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVh
bHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudCYgYSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYgYikKK3sKKyAg
ICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCYgYSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVu
dCYgYikKK3sKKyAgICByZXR1cm4gYS5sZXNzVGhhbihiKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBTcGVlY2hSZWNvZ25pemVyQ2xpZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAppbmRleCBmMjkwMzNjNzIzODAw
NWM1ZWQ3MmRhYzMxYjgxODlhYWQ0ODMzODE3Li5iOGZlOWQwYzVmNjE1MzYxOTIxYzcxMDVhYTBl
MDA1MDlkMmM2NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWV3Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
d0NsaWVudC5oCkBAIC02OCw2ICs2OCw3IEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRl
cjsKIGNsYXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwogY2xh
c3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml6ZXI7CiBj
bGFzcyBXZWJTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVVJMUmVx
dWVzdDsKQEAgLTMxNiw2ICszMTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcigKICAgICAgICAgV2ViU3BlZWNo
SW5wdXRMaXN0ZW5lciopIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRk
ZXIgQVBJIGZvciBzcGVlY2ggcmVjb2duaXRpb24gc2VydmljZXMuCisgICAgdmlydHVhbCBXZWJT
cGVlY2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkgeyByZXR1cm4gMDsgfQorCiAgICAg
Ly8gRGV2aWNlIE9yaWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBBY2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgZGV2
aWNlIG9yaWVudGF0aW9uIHNlcnZpY2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xYzU4MTg3Y2I4MjM3OTBlZDU1YzFlNzUwNzZiYzBjMTVkOGY2ZTM3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eS5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgiCisKKyNpbmNsdWRlICJT
cGVlY2hHcmFtbWFyTGlzdC5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uLmgiCisjaW5j
bHVkZSAiV2ViU3BlZWNoR3JhbW1hci5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9u
UGFyYW1zLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2duaXplci5oIgorI2luY2x1ZGUgIldl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6flNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoKQoreworfQorCitQYXNzT3duUHRyPFNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk+IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmNyZWF0
ZShXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShyZWNvZ25pemVyKSk7Cit9CisKK3Zv
aWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RhcnQoU3BlZWNoUmVjb2duaXRpb24q
IHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCogZ3JhbW1hckxpc3QsIGNvbnN0
IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKQoreworICAgIFdlYlZlY3RvcjxXZWJTcGVl
Y2hHcmFtbWFyPiB3ZWJTcGVlY2hHcmFtbWFycyhncmFtbWFyTGlzdC0+bGVuZ3RoKCkpOworICAg
IGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGdyYW1tYXJMaXN0LT5sZW5ndGgoKTsgKytp
KQorICAgICAgICB3ZWJTcGVlY2hHcmFtbWFyc1tpXSA9IGdyYW1tYXJMaXN0LT5pdGVtKGkpOwor
CisgICAgbV9yZWNvZ25pemVyLT5zdGFydChXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyh3ZWJT
cGVlY2hHcmFtbWFycywgbGFuZywgY29udGludW91cyksIFdlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQocmVjb2duaXRpb24pKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
OjpzdG9wKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikKK3sKKyAgICBtX3JlY29nbml6
ZXItPnN0b3AoV2ViU3BlZWNoUmVjb2duaXplckNsaWVudChyZWNvZ25pdGlvbikpOworfQorCit2
b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmFib3J0KFNwZWVjaFJlY29nbml0aW9u
KiByZWNvZ25pdGlvbikKK3sKKyAgICBtX3JlY29nbml6ZXItPmFib3J0KFdlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQocmVjb2duaXRpb24pKTsKK30KKworU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eTo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25pemVyKiBy
ZWNvZ25pemVyKQorICAgIDogbV9yZWNvZ25pemVyKHJlY29nbml6ZXIpCit7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYjNhMTA1NTMy
OGZjYjk4MTY2YmNkYWQ4OGE1YjZiOTA1ZmIyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eV9oCisjZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHlfaAorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyOworY2xhc3Mg
V2ViU3RyaW5nOworCitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5IDogcHVibGlj
IFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+U3BlZWNo
UmVjb2duaXRpb25DbGllbnRQcm94eSgpOworCisgICAgLy8gQ29uc3RydWN0aW5nIGEgcHJveHkg
b2JqZWN0IHdpdGggYSAwIFdlYlNwZWVjaFJlY29nbml6ZXIgaXMgc2FmZSBpbgorICAgIC8vIGl0
c2VsZiwgYnV0IGF0dGVtcHRpbmcgdG8gY2FsbCBzdGFydC9zdG9wL2Fib3J0IG9uIGl0IHdpbGwg
Y3Jhc2guCisgICAgc3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eT4gY3JlYXRlKFdlYlNwZWVjaFJlY29nbml6ZXIqKTsKKworICAgIC8vIFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uQ2xpZW50OgorICAgIHZpcnR1YWwgdm9pZCBzdGFydChXZWJDb3JlOjpTcGVl
Y2hSZWNvZ25pdGlvbiosIGNvbnN0IFdlYkNvcmU6OlNwZWVjaEdyYW1tYXJMaXN0KiwgY29uc3Qg
U3RyaW5nJiBsYW5nLCBib29sIGNvbnRpbnVvdXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGFib3J0KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKikgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25p
emVyKik7CisKKyAgICBXZWJTcGVlY2hSZWNvZ25pemVyKiBtX3JlY29nbml6ZXI7Cit9OworCit9
OyAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVj
aEdyYW1tYXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3JhbW1h
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmZjY2Q0MGNiYzFiNDU4MWQxYWM2NjRlMGRmNDMwYWQwMDA5MzVh
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVj
aEdyYW1tYXIuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViU3BlZWNoR3JhbW1hci5oIgorCisjaW5jbHVkZSAiU3BlZWNoR3JhbW1h
ci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFdlYlNwZWVjaEdyYW1tYXI6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQo
KTsKK30KKworV2ViU3BlZWNoR3JhbW1hcjo6V2ViU3BlZWNoR3JhbW1hcihjb25zdCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+JiB2YWx1ZSkKKyAgICA6IG1fcHJpdmF0ZSh2YWx1
ZSkKK3sKK30KKworV2ViU3BlZWNoR3JhbW1hciYgV2ViU3BlZWNoR3JhbW1hcjo6b3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYgdmFsdWUpCit7
CisgICAgbV9wcml2YXRlID0gdmFsdWU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJVUkwg
V2ViU3BlZWNoR3JhbW1hcjo6c3JjKCkgY29uc3QKK3sKKyAgICBXRUJLSVRfQVNTRVJUKG1fcHJp
dmF0ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3JjKCk7Cit9CisKK2Zsb2F0IFdl
YlNwZWVjaEdyYW1tYXI6OndlaWdodCgpIGNvbnN0Cit7CisgICAgV0VCS0lUX0FTU0VSVChtX3By
aXZhdGUuZ2V0KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPndlaWdodCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWRkNDU4NmY0
YWQ2NTc1NjA1MWFmYTE1ZTg0YzU4ZjU1ZmYxZWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMuY3BwCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3Bl
ZWNoUmVjb2duaXRpb25QYXJhbXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlNwZWVj
aFJlY29nbml0aW9uUGFyYW1zOjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyhjb25zdCBXZWJW
ZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4mIGdyYW1tYXJzLCBjb25zdCBXZWJTdHJpbmcmIGxhbmd1
YWdlLCBib29sIGNvbnRpbnVvdXMpCisgICAgOiBtX2dyYW1tYXJzKGdyYW1tYXJzKQorICAgICwg
bV9sYW5ndWFnZShsYW5ndWFnZSkKKyAgICAsIG1fY29udGludW91cyhjb250aW51b3VzKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MDdmOTU2MzY2MjY4NGZjNjMxOWNmZTIyMDgyMWQzYzYzZWE4YmM5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQu
Y3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKworI2luY2x1ZGUgIlNwZWVjaFJlY29n
bml0aW9uQWx0ZXJuYXRpdmUuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6
YXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiBvdGhlcikKK3sKKyAgICBt
X3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQ6OmFzc2lnbihjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNjcmlwdHMs
IGNvbnN0IFdlYlZlY3RvcjxmbG9hdD4mIGNvbmZpZGVuY2VzLCBib29sIGZpbmFsKQoreworICAg
IEFTU0VSVCh0cmFuc2NyaXB0cy5zaXplKCkgPT0gY29uZmlkZW5jZXMuc2l6ZSgpKTsKKworICAg
IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZT4gPiBh
bHRlcm5hdGl2ZXModHJhbnNjcmlwdHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRyYW5zY3JpcHRzLnNpemUoKTsgKytpKQorICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5k
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU6OmNyZWF0ZSh0cmFuc2NyaXB0
c1tpXSwgY29uZmlkZW5jZXNbaV0pKTsKKworICAgIG1fcHJpdmF0ZSA9IFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0OjpjcmVhdGUoYWx0ZXJuYXRpdmVzLCBmaW5hbCk7Cit9CisKK3Zv
aWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUu
cmVzZXQoKTsKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk1ZjQ1ZWM1NGMzYWUwODg3MGFlZGYyMmVjODNmNjEzODA2
NzYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNw
ZWVjaFJlY29nbml6ZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKKwor
I2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRp
b25FcnJvci5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVk
ZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit2b2lkIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OnJlc2V0KCkKK3sK
KyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50Ojphc3NpZ24oY29uc3QgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCYgb3RoZXIpCit7Cisg
ICAgbV9wcml2YXRlID0gb3RoZXIubV9wcml2YXRlOworfQorCitib29sIFdlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQ6OmVxdWFscyhjb25zdCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50JiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBvdGhlci5tX3ByaXZh
dGUuZ2V0KCkpOworfQorCitib29sIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Omxlc3NUaGFu
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAobV9wcml2YXRlLmdldCgpIDwgb3RoZXIubV9wcml2YXRlLmdldCgpKTsKK30KKwordm9p
ZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydEF1ZGlvKCkKK3sKKyAgICBtX3By
aXZhdGUtPmRpZFN0YXJ0QXVkaW8oKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xp
ZW50OjpkaWRTdGFydFNvdW5kKCkKK3sKKyAgICBtX3ByaXZhdGUtPmRpZFN0YXJ0U291bmQoKTsK
K30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNwZWVjaCgpCit7
CisgICAgbV9wcml2YXRlLT5kaWRTdGFydFNwZWVjaCgpOworfQorCit2b2lkIFdlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQ6OmRpZEVuZFNwZWVjaCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmRT
cGVlY2goKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRTb3Vu
ZCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmRTb3VuZCgpOworfQorCit2b2lkIFdlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZEF1ZGlvKCkKK3sKKyAgICBtX3ByaXZhdGUtPmRpZEVu
ZEF1ZGlvKCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkUmVjZWl2
ZVJlc3VsdChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBsb25nIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFZlY3RvcjxSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3RvcihyZXN1bHRIaXN0b3J5LnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRIaXN0b3J5LnNpemUoKTsgKytpKQor
ICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVuZChzdGF0aWNfY2FzdDxQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3VsdEhpc3RvcnlbaV0pKTsKKworICAgIG1f
cHJpdmF0ZS0+ZGlkUmVjZWl2ZVJlc3VsdChyZXN1bHQsIHJlc3VsdEluZGV4LCBTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7Cit9CisKK3Zv
aWQgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkUmVjZWl2ZU5vTWF0Y2goY29uc3QgV2Vi
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBtX3ByaXZhdGUtPmRpZFJl
Y2VpdmVOb01hdGNoKHJlc3VsdCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXplckNsaWVu
dDo6ZGlkRGVsZXRlUmVzdWx0KHVuc2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFZlY3Rv
cjxSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+ID4gcmVzdWx0SGlzdG9yeVZlY3Rvcihy
ZXN1bHRIaXN0b3J5LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRI
aXN0b3J5LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRIaXN0b3J5VmVjdG9yLmFwcGVuZChz
dGF0aWNfY2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+KHJlc3VsdEhp
c3RvcnlbaV0pKTsKKworICAgIG1fcHJpdmF0ZS0+ZGlkRGVsZXRlUmVzdWx0KHJlc3VsdEluZGV4
LCBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9y
KSk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkUmVjZWl2ZUVycm9y
KGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgc2hvcnQgY29kZSkKK3sKKyAgICBT
cGVlY2hSZWNvZ25pdGlvbkVycm9yOjpDb2RlIGVycm9yQ29kZSA9IHN0YXRpY19jYXN0PFNwZWVj
aFJlY29nbml0aW9uRXJyb3I6OkNvZGU+KGNvZGUpOworICAgIG1fcHJpdmF0ZS0+ZGlkUmVjZWl2
ZUVycm9yKFNwZWVjaFJlY29nbml0aW9uRXJyb3I6OmNyZWF0ZShlcnJvckNvZGUsIG1lc3NhZ2Up
KTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydCgpCit7Cisg
ICAgbV9wcml2YXRlLT5kaWRTdGFydCgpOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQ6OmRpZEVuZCgpCit7CisgICAgbV9wcml2YXRlLT5kaWRFbmQoKTsKK30KKworV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudChjb25zdCBQYXNz
UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiYgc3BlZWNoUmVjb2duaXRpb24pCisgICAgOiBtX3By
aXZhdGUoc3BlZWNoUmVjb2duaXRpb24pCit7Cit9CisKK1dlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQmIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uPiYgc3BlZWNoUmVjb2duaXRpb24pCit7CisgICAgbV9wcml2YXRl
ID0gc3BlZWNoUmVjb2duaXRpb247CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpvcGVyYXRvciBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5k
ZXggMWIzYWI1ODlkNmY3YzRlN2FiZGMxMTE0NDlkMjdhODFiZWYyMzEyNS4uZDU5MzkzYjM5YzMy
ZGQ4YzM5ZGQxNzkzZjNjMGRmZmQ1YTlkODlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTA2LDcgKzEwNiw3IEBACiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNw
ZWVjaElucHV0Q2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIgogI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVG91Y2hwYWRG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCkBAIC0zNjMsNiArMzYzLDkgQEAgV2ViVmlld0lt
cGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoSU5QVVRf
U1BFRUNIKQogICAgICwgbV9zcGVlY2hJbnB1dENsaWVudChTcGVlY2hJbnB1dENsaWVudEltcGw6
OmNyZWF0ZShjbGllbnQpKQogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAg
ICAsIG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQoU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eTo6Y3JlYXRlKGNsaWVudCA/IGNsaWVudC0+c3BlZWNoUmVjb2duaXplcigpIDogMCkpCisjZW5k
aWYKICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgRGV2
aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQtPmRldmljZU9yaWVudGF0
aW9uQ2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHkoYWRvcHRQ
dHIobmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50ID8gY2xpZW50LT5nZW9sb2NhdGlv
bkNsaWVudCgpIDogMCkpKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0zOTYsNyArMzk5
LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAg
ICBwcm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCksIG1fc3BlZWNoSW5wdXRDbGllbnQu
Z2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBwcm92aWRl
U3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDApOyAvLyBGSVhNRTogUHJvdmlkZSBh
IHJlYWwgaW1wbGVtZW50YXRpb24uCisgICAgcHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8obV9w
YWdlLmdldCgpLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmdldCgpKTsKICNlbmRpZgogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAg
ICAgcHJvdmlkZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0KCksIG5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCAz
MDgyZDRlMDEzNWFmZWRiYTI1MzA4OTRjZTYwMDNiZTQyYjg1MWFkLi41MzIzYzMxNzAxNWNhMDQ3
YWY1NGU4YjRjYWY1NGExZjU5OTU1YmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTg1LDYgKzg1LDcgQEAgY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xh
c3MgR2VvbG9jYXRpb25DbGllbnRQcm94eTsKIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dDsKIGNsYXNzIFNwZWVjaElucHV0Q2xpZW50SW1wbDsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHk7CiBjbGFzcyBVc2VyTWVkaWFDbGllbnRJbXBsOwogY2xhc3MgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbXBsOwpAQCAtNzE4LDYgKzcxOSwx
MCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgT3duUHRyPFNwZWVj
aElucHV0Q2xpZW50SW1wbD4gbV9zcGVlY2hJbnB1dENsaWVudDsKICNlbmRpZgorI2lmIEVOQUJM
RShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk+IG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQ7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIGF0
dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGljc0NvbnRleHQzRCBiZWZvcmUKICAg
ICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQgb24sIHdlIG5lZWQgdG8gaW5zdGFu
dGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIgaG9sZHMgb24gdG8gdGhlIEdDM0Qg
aW4gdGhpcyBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135084</attachid>
            <date>2012-04-02 06:24:01 -0700</date>
            <delta_ts>2012-04-03 05:56:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120402142359.patch</filename>
            <type>text/plain</type>
            <size>61565</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNzhiZDNhZmUyNTM5NGQ0YjNjMzVmMmY1NDcwNDkzNTFjZTEwMjVlLi41
ZTI0NGVhOGM5Nzk0MDVjYTJlY2JkODJjOTNkMGNmNzVmMGMzNjQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDcgQEAKKzIwMTItMDQtMDIgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJvbWl1
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVlY2hH
cmFtbWFyOjpzcmMoKSBpcyBjYWxsZWQgd2l0aCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJl
Y2F1c2UKKyAgICAgICAgdGhlIGF0dHJpYnV0ZSBzZXR0ZXIgbmVlZHMgaXQuIFByb3ZpZGUgYSBz
cmMoKSBtZXRob2QgdGhhdCBkb2Vzbid0CisgICAgICAgIHRha2UgYSBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgaW50ZXJuYWxseS4KKworICAgICAgICBSZW5hbWUgU3Bl
ZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpLCBldGMuIHRvIHVzZSBldmVudCBz
dHlsZQorICAgICAgICBuYW1lcywgaS5lLiBkaWRTdGFydEF1ZGlvKCksIGV0Yy4KKworICAgICAg
ICBSZW1vdmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6Om5vdGlmeVZpc2liaWxpdHlIaWRkZW4o
KS4gVGhlIGVtYmVkZGVyCisgICAgICAgIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSB2aXNpYmlsaXR5
LgorCisgICAgICAgIFJlbW92ZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dW5yZWdpc3RlclNw
ZWVjaFJlY29nbml0aW9uLAorICAgICAgICBpdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywganVzdCBtaW5vciB0d2Vha3MuCisKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hHcmFtbWFyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hHcmFtbWFyOjpzcmMp
OgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1ZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNvdW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNwZWVjaCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRTb3VuZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRBdWRpbyk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZUVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9T
cGVlY2hSZWNvZ25pdGlvbi5oOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb24pOgorICAgICAg
ICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAgIChT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNo
UmVjb2duaXRpb25Db250cm9sbGVyLmg6CisKIDIwMTItMDQtMDIgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgICAgIFRlYWNoIFJ1bGVTZXQgYWJvdXQgbW9kZXJuIG1lbW9y
eSBtYW5hZ2VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDMxMzg1MGI5ZmViNjk2
ODZkNzJiZWVlYjRlMDZjZTAwNGY5NGYzMjEuLmE1Mjg3ZDFhZjg5NWIyODhmZjRhZDM3OWY3ZDll
NzM1MWY3ZDNjNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE3IEBA
CisyMDEyLTA0LTAyICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBQbHVtYmluZyBmb3IgQ2hyb21pdW0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHBsdW1iaW5nIGZvciBz
cGVlY2ggcmVjb2duaXRpb24uCisKKyAgICAgICAgVGhlIGltcGxlbWVudGVyIGlzIGV4cGVjdGVk
IHRvIGltcGxlbWVudCB0aGUgV2ViU3BlZWNoUmVjb2duaXplciBpbnRlcmZhY2UuCisgICAgICAg
IFRoZSBzdGFydCgpLCBzdG9wKCksIGFuZCBhYm9ydCgpIGZ1bmN0aW9ucyBvZiB0aGF0IGludGVy
ZmFjZSB0YWtlIGEKKyAgICAgICAgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgYXJndW1lbnQs
IHdoaWNoIGlkZW50aWZpZXMgdGhlIG9iamVjdCB3aGljaCBoYXMKKyAgICAgICAgcmVxdWVzdGVk
IHRoZSBhY3Rpb24sIGFuZCBhIHBvaW50ZXIgdG8gYSBXZWJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dCBpbnRlcmZhY2UsCisgICAgICAgIHRocm91Z2ggd2hpY2ggaXQgc2hvdWxkIHNlbmQgYmFjayBu
b3RpZmljYXRpb25zIG9uIHByb2dyZXNzLCBlcnJvcnMsIGV0Yy4KKworICAgICAgICBTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5IHBhc3NlcyBkYXRhIGJldHdlZW4gdGhlIFdlYkNvcmUgYW5k
IFdlYktpdCBsYXllcnMsCisgICAgICAgIGltcGxlbWVudGluZyB0aGUgV2ViQ29yZTo6U3BlZWNo
UmVjb2duaXRpb25DbGllbnQgYW5kIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudAor
ICAgICAgICBpbnRlcmZhY2VzLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViU3BlZWNoR3JhbW1hci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNwZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hHcmFtbWFyOjp+V2ViU3BlZWNoR3JhbW1hcik6CisgICAgICAgICogcHVibGljL1dlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTo6fldlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGU6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3Bl
ZWNoUmVjb2duaXRpb25IYW5kbGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYktpdDo6
b3BlcmF0b3I8KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zOjpncmFtbWFy
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zOjpsYW5ndWFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zOjpjb250aW51
b3VzKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp+V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQpOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml6ZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNo
UmVjb2duaXplcjo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXI6
OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplcjo6fldlYlNwZWVj
aFJlY29nbml6ZXIpOgorICAgICAgICAqIHB1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViVmlld0NsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdDbGllbnQ6OnNwZWVjaFJlY29nbml6ZXIpOgorICAgICAgICAqIHNyYy9TcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Ojp+U3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6
ZGlkU3RhcnRBdWRpbyk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50
UHJveHk6OmRpZFN0YXJ0U291bmQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpkaWRTdGFydFNwZWVjaCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk6OmRpZEVuZFNwZWVjaCk6CisgICAgICAgIChXZWJLaXQ6OlNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmRpZEVuZFNvdW5kKToKKyAgICAgICAgKFdlYktp
dDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkRW5kQXVkaW8pOgorICAgICAgICAo
V2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRSZWNlaXZlUmVzdWx0KToK
KyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkUmVjZWl2
ZU5vTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
OjpkaWREZWxldGVSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5OjpkaWRSZWNlaXZlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNv
Z25pdGlvbkNsaWVudFByb3h5OjpkaWRTdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk6OmRpZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHk6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkpOgorICAg
ICAgICAqIHNyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkpOgorICAg
ICAgICAqIHNyYy9XZWJTcGVlY2hHcmFtbWFyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpyZXNldCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hHcmFtbWFyOjpzcmMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjp3
ZWlnaHQpOgorICAgICAgICAqIHNyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGU6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGU6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlOjplcXVhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZTo6bGVzc1RoYW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZTo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pdGlvbkhhbmRsZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXRpb25IYW5kbGU6Om9wZXJhdG9yIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb24+KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uUGFyYW1zOjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyk6CisgICAgICAgICogc3Jj
L1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6YXNzaWduKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OnJlc2V0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0lt
cGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKwog
MjAxMi0wNC0wMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
QWRkIGEgY2FsZW5kYXIgcGlja2VyIGluZGljYXRvciB0byBkYXRlLXR5cGUgaW5wdXQgZmllbGRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFy
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFyLmgKaW5kZXgg
NjIwODhjMThiMGM4Y2IwMWQzNDA3ZDFkMjY2YjgyY2I2ZGQyZjJmOS4uZTA4MzU4YmJmMTNlZDJm
ZmVjNGNlNjY2MjI2NjlmZWI5YTE0YTBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaEdyYW1tYXIuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hcj4gY3JlYXRlKGNvbnN0IEtVUkwmIHNyYywgZG91
YmxlIHdlaWdodCk7CiAKICAgICBjb25zdCBLVVJMJiBzcmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9CisgICAgY29uc3QgS1VSTCYgc3JjKCkgY29uc3Qg
eyByZXR1cm4gbV9zcmM7IH0KICAgICB2b2lkIHNldFNyYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBzcmMpOwogCiAgICAgZG91YmxlIHdlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2VpZ2h0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hSZWNvZ25pdGlvbi5jcHAKaW5kZXggMWIzYWIzMjU0ODU3MjAxYTY0ZTRiODNhNTNiN2Jj
MTVjMTY5YWUwMC4uMmE3NjY5ZTk2ZDMxZDc0M2JmMWVlYTdkYjEwZjk1NTNhMzI2NDM4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
LmNwcApAQCAtNjIsNTggKzYyLDYzIEBAIHZvaWQgU3BlZWNoUmVjb2duaXRpb246OmFib3J0KCkK
ICAgICBtX2NvbnRyb2xsZXItPmFib3J0KHRoaXMpOyAvLyBGSVhNRTogU3BlYyBzaG91bGQgc2F5
IHdoYXQgdG8gZG8gaWYgd2UgYXJlIG5vdCBzdGFydGVkLgogfQogCi12b2lkIFNwZWVjaFJlY29n
bml0aW9uOjphdWRpb1N0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlk
U3RhcnRBdWRpbygpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIHNob3VsZCBzcGVjaWZ5IHdo
ZXRoZXIgdGhlc2UgZXZlbnRzIGNhbiBidWJibGUgYW5kIGFyZSBjYW5jZWxhYmxlLgogICAgIGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYXVkaW9zdGFydEV2ZW50LCAv
KmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNw
ZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25p
dGlvbjo6ZGlkU3RhcnRTb3VuZCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5zb3VuZHN0YXJ0RXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2Fu
Y2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0
YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRTcGVlY2goKQog
ewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3BlZWNoc3Rh
cnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwgLypjYW5jZWxhYmxlPSovZmFsc2UpKTsKIH0K
IAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3BlZWNoRW5kQ2FsbGJhY2soKQordm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaGVuZEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNl
LCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjph
dWRpb0VuZENhbGxiYWNrKCkKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZFNvdW5kKCkK
K3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNvdW5kZW5k
RXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7Cit9CisK
K3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVuZEF1ZGlvKCkKIHsKICAgICBkaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmF1ZGlvZW5kRXZlbnQsIC8qY2FuQnViYmxl
PSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2du
aXRpb246OnJlc3VsdENhbGxiYWNrKFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+
IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCit2b2lkIFNwZWVjaFJlY29nbml0aW9u
OjpkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJl
c3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChTcGVl
Y2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1bHQocmVzdWx0LCByZXN1bHRJbmRleCwgcmVz
dWx0SGlzdG9yeSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpub01hdGNoQ2FsbGJh
Y2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQordm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2goUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdD4gcmVzdWx0KQogewogICAgIGRpc3BhdGNoRXZlbnQoU3BlZWNoUmVjb2duaXRp
b25FdmVudDo6Y3JlYXRlTm9NYXRjaChyZXN1bHQpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25p
dGlvbjo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKHVuc2lnbmVkIHJlc3VsdEluZGV4LCBQYXNzUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSkKK3ZvaWQgU3Bl
ZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCh1bnNpZ25lZCByZXN1bHRJbmRleCwgUGFz
c1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7CiAg
ICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1bHREZWxl
dGVkKHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5KSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2du
aXRpb246OmVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yPiBl
cnJvcikKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZFJlY2VpdmVFcnJvcihQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGVycm9yKQogewogICAgIGRpc3BhdGNoRXZlbnQoU3Bl
ZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlRXJyb3IoZXJyb3IpKTsKIH0KIAotdm9pZCBTcGVl
Y2hSZWNvZ25pdGlvbjo6c3RhcnRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpk
aWRTdGFydCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkp
OwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjplbmRDYWxsYmFjaygpCit2b2lkIFNwZWVj
aFJlY29nbml0aW9uOjpkaWRFbmQoKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJs
ZT0qL2ZhbHNlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hSZWNvZ25pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb24uaAppbmRleCAzOWUwMDg2ZjBkOTRjZDM4ZjdhMTI4MDRiYjU3ZjNkZTc3
NWYyMDNjLi4zZmMyNDQxNjZlMzM4YzNiMGY2MmNmY2YwMmYwOGI4NWE1ZDU1NzAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmgKQEAg
LTY0LDE3ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydCgpOwogCiAgICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudC4KLSAgICB2b2lkIGF1ZGlvU3RhcnRD
YWxsYmFjaygpOwotICAgIHZvaWQgc291bmRTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzcGVl
Y2hTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzcGVlY2hFbmRDYWxsYmFjaygpOwotICAgIHZv
aWQgYXVkaW9FbmRDYWxsYmFjaygpOwotICAgIHZvaWQgcmVzdWx0Q2FsbGJhY2soUGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVuc2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIFBh
c3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKLSAg
ICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
Pik7Ci0gICAgdm9pZCByZXN1bHREZWxldGVkQ2FsbGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgs
IFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsK
LSAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9y
Pik7Ci0gICAgdm9pZCBzdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBlbmRDYWxsYmFjaygpOwor
ICAgIHZvaWQgZGlkU3RhcnRBdWRpbygpOworICAgIHZvaWQgZGlkU3RhcnRTb3VuZCgpOworICAg
IHZvaWQgZGlkU3RhcnRTcGVlY2goKTsKKyAgICB2b2lkIGRpZEVuZFNwZWVjaCgpOworICAgIHZv
aWQgZGlkRW5kU291bmQoKTsKKyAgICB2b2lkIGRpZEVuZEF1ZGlvKCk7CisgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+LCB1bnNpZ25l
ZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlz
dD4gcmVzdWx0SGlzdG9yeSk7CisgICAgdm9pZCBkaWRSZWNlaXZlTm9NYXRjaChQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7CisgICAgdm9pZCBkaWREZWxldGVSZXN1bHQodW5z
aWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0
PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVFcnJvcihQYXNzUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uRXJyb3I+KTsKKyAgICB2b2lkIGRpZFN0YXJ0KCk7CisgICAgdm9pZCBk
aWRFbmQoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudC5oCmluZGV4
IDQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3ZjY4YjBmMWJiZDQuLjI5YmI5ZjY2YjJjMTY0
ODA0OTlhMjIwNTY1MDk5MjYwZGRlYzMzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaApAQCAtNDEsOCArNDEs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KFNwZWVjaFJlY29nbml0aW9uKiwg
Y29uc3QgU3BlZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGlu
dW91cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKFNwZWVjaFJlY29nbml0aW9uKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5y
ZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKikgPSAwOwogCiAgICAg
dmlydHVhbCB+U3BlZWNoUmVjb2duaXRpb25DbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oCmluZGV4IGVmNWMxOTA3NTBlODVlMzllNWIxY2MyNTY4MTNkYTE4NWI2ODg3MWIuLjUw
YmM1YTQyZmVjZjQ4M2IwNzY2MTljZjQxYWRjMzg1MTRkNzZlODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJv
bGxlci5oCkBAIC00MSw4ICs0MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KFNwZWVjaFJl
Y29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqIGdyYW1tYXJz
LCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgeyBtX2NsaWVudC0+c3RhcnQo
cmVjb2duaXRpb24sIGdyYW1tYXJzLCBsYW5nLCBjb250aW51b3VzKTsgfQogICAgIHZvaWQgc3Rv
cChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pIHsgbV9jbGllbnQtPnN0b3AocmVjb2du
aXRpb24pOyB9CiAgICAgdm9pZCBhYm9ydChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24p
IHsgbV9jbGllbnQtPmFib3J0KHJlY29nbml0aW9uKTsgfQotICAgIHZvaWQgdmlzaWJpbGl0eUhp
ZGRlbigpIHsgbV9jbGllbnQtPnZpc2liaWxpdHlIaWRkZW4oKTsgfQotICAgIHZvaWQgdW5yZWdp
c3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBt
X2NsaWVudC0+dW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKHJlY29nbml0aW9uKTsgfQogCiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVjb2duaXRpb25Db250cm9sbGVyPiBjcmVhdGUo
U3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBzdXBwbGVtZW50TmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGJhZjhi
M2NlZDFlZGYzNmIzYWQ5YTgyNzFmOGI3OTgyODI2MzBhNDUuLmVhZDQ2M2YyMTBhOWQ3MjVjNGM2
NmQwZDkzN2QyNDE2MmQ1MjE1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI0
NCw5ICsyNDQsMTUgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlclJl
cG9zaXRvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXQuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXRDbGllbnQuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3Bl
ZWNoSW5wdXRMaXN0ZW5lci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaElu
cHV0UmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlv
blBhcmFtcy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXIuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVsbENoZWNrQ2xpZW50LmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZUFyZWEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgnLApAQCAtNDU1LDYgKzQ2MSw4IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbC5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMv
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1N0
b3JhZ2VBcmVhUHJveHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VBcmVhUHJv
eHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlRXZlbnREaXNwYXRjaGVyQ2hyb21p
dW0uY3BwJywKQEAgLTYzMiw3ICs2NDAsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNv
Y2tldEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlNwZWVjaElucHV0UmVzdWx0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
U3BlZWNoUmVjb2duaXRpb25QYXJhbXMuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdG9y
YWdlQXJlYUltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VBcmVhSW1w
bC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VFdmVudERpc3BhdGNoZXJJbXBs
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVl
Y2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hHcmFt
bWFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDNjMzY1MjNkZGNkMDYyYTkxNWQ2YWRkNDVjNzE5ZjIwYzE0NjZl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNw
ZWVjaEdyYW1tYXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTcGVl
Y2hHcmFtbWFyX2gKKyNkZWZpbmUgV2ViU3BlZWNoR3JhbW1hcl9oCisKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFNwZWVjaEdyYW1tYXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVl
Y2hHcmFtbWFyIHsKK3B1YmxpYzoKKyAgICBXZWJTcGVlY2hHcmFtbWFyKCkgeyB9CisgICAgfldl
YlNwZWVjaEdyYW1tYXIoKSB7IHJlc2V0KCk7IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJM
IHNyYygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgd2VpZ2h0KCkgY29uc3Q7CisK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYlNwZWVjaEdyYW1tYXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OlNwZWVjaEdyYW1tYXI+Jik7CisgICAgV2ViU3BlZWNoR3JhbW1hciYgb3BlcmF0b3I9KGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYpOworI2VuZGlmCisKK3By
aXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaEdy
YW1tYXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3Bl
ZWNoUmVjb2duaXRpb25IYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNwZWVjaFJlY29nbml0aW9uSGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMyMzA3MzM1ZGE5NmM3Yjhl
ZGEyMWViODRkMzBiYjZkYmQxMjJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlLmgKQEAgLTAsMCArMSw5
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGVfaAorI2Rl
ZmluZSBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZV9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ7CitjbGFzcyBXZWJT
dHJpbmc7CisKKy8vIEEgaGFuZGxlIHRvIGEgU3BlZWNoUmVjb2duaXRpb24gb2JqZWN0LiBBcyBs
b25nIGFzIHRoZXJlIGlzIGEgaGFuZGxlLCB0aGUKKy8vIHVuZGVybHlpbmcgb2JqZWN0IHdpbGwg
bm90IGJlIGRlc3RydWN0ZWQuIFRoZSBoYW5kbGUgaXMgdXNlZCBieQorLy8gV2ViU3BlZWNoUmVj
b2duaXplciB0byBpZGVudGlmeSBhIHJlY29nbml0aW9uIHNlc3Npb24sIGFuZCBieQorLy8gV2Vi
U3BlZWNoUmVjb2duaXplckNsaWVudCB0byByb3V0ZSByZWNvZ25pdGlvbiBldmVudHMuCitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSB7CitwdWJsaWM6CisgICAgfldlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlKCkgeyByZXNldCgpOyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb25I
YW5kbGUoKSB7IH0KKworICAgIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKGNvbnN0IFdlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlJiBvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9CisgICAgV2Vi
U3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIG9wZXJhdG9yPShjb25zdCBXZWJTcGVlY2hSZWNvZ25p
dGlvbkhhbmRsZSYgb3RoZXIpCisgICAgeworICAgICAgICBhc3NpZ24ob3RoZXIpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlv
bkhhbmRsZSYpOworCisgICAgLy8gQ29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHNv
IHRoYXQgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgb2JqZWN0cworICAgIC8vIGNhbiBiZSBz
dG9yZWQgaW4gYSBoYXNoIG1hcC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0
IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBi
b29sIGxlc3NUaGFuKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgY29uc3Q7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRs
ZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+Jik7Cisg
ICAgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uPigpIGNvbnN0OworI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbj4g
bV9wcml2YXRlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYgYSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGIp
Cit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBhLCBjb25zdCBXZWJTcGVlY2hSZWNv
Z25pdGlvbkhhbmRsZSYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGEsIGNvbnN0
IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBiKQoreworICAgIHJldHVybiBhLmxlc3NUaGFu
KGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMmQ2NTU3
MjQ3ZjczNGYxY2IyMTI4MTg0NmE5MTQxY2Q0NGQ0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcy5oCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uUGFy
YW1zX2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXNfaAorCisjaW5jbHVkZSAi
V2ViU3BlZWNoR3JhbW1hci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViU3BlZWNoR3JhbW1hcjsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMg
eworcHVibGljOgorICAgIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zKGNvbnN0IFdlYlZlY3Rv
cjxXZWJTcGVlY2hHcmFtbWFyPiYsIGNvbnN0IFdlYlN0cmluZyYgbGFuZ3VhZ2UsIGJvb2wgY29u
dGludW91cyk7CisKKyAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4mIGdyYW1t
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFtbWFyczsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYg
bGFuZ3VhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xhbmd1YWdlOyB9CisgICAgYm9vbCBjb250aW51
b3VzKCkgY29uc3QgeyByZXR1cm4gbV9jb250aW51b3VzOyB9CisKK3ByaXZhdGU6CisgICAgV2Vi
VmVjdG9yPFdlYlNwZWVjaEdyYW1tYXI+IG1fZ3JhbW1hcnM7CisgICAgV2ViU3RyaW5nIG1fbGFu
Z3VhZ2U7CisgICAgYm9vbCBtX2NvbnRpbnVvdXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg5OWYyODU1NmJhNWU2MzljMDFiNzZlNzFkYmYzMDU3MDc4Y2Zk
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0X2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVjb2du
aXRpb25SZXN1bHRfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmlu
Zy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0IHsKK3B1YmxpYzoKKyAgICBX
ZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgpIHsgfQorICAgIH5XZWJTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNjcmlwdHMsIGNvbnN0IFdlYlZlY3Rvcjxm
bG9hdD4mIGNvbmZpZGVuY2VzLCBib29sIGZpbmFsKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YXNzaWduKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Jik7CisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHJlc2V0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBvcGVy
YXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OlNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXIuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNDI5NWFkZjU5ZDcyMDYwZWQwN2IyZTIxNzFhNzJkN2Y5NmYxNDRhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXplci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJlY29n
bml6ZXJfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pemVyX2gKKworI2luY2x1ZGUgIldlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hHcmFtbWFyOworY2xhc3Mg
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDsKKworLy8gSW50ZXJmYWNlIGZvciBzcGVlY2ggcmVj
b2duaXRpb24sIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBlbWJlZGRlci4KK2NsYXNzIFdlYlNw
ZWVjaFJlY29nbml6ZXIgeworcHVibGljOgorICAgIC8vIFN0YXJ0IHNwZWVjaCByZWNvZ25pdGlv
biBmb3IgdGhlIHNwZWNpZmllZCBoYW5kbGUgdXNpbmcgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJz
LiBOb3RpZmljYXRpb25zIG9uIHByb2dyZXNzLCByZXN1bHRzLCBhbmQgZXJyb3JzIHdpbGwgYmUg
c2VudCB2aWEgdGhlIGNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoV2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGUsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudCopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICAvLyBTdG9wIHNwZWVjaCByZWNvZ25pdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBoYW5kbGUs
IHJldHVybmluZyBhbnkgcmVzdWx0cyBmb3IgdGhlIGF1ZGlvIHJlY29yZGVkIHNvIGZhci4gTm90
aWZpY2F0aW9ucyBhbmQgZXJyb3JzIGFyZSBzZW50IHZpYSB0aGUgY2xpZW50LgorICAgIHZpcnR1
YWwgdm9pZCBzdG9wKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50KikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAgIC8vIEFi
b3J0IHNwZWVjaCByZWNvZ25pdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBoYW5kbGUsIGRpc2NhcmRp
bmcgYW55IHJlY29yZGVkIGF1ZGlvLiBOb3RpZmljYXRpb25zIGFuZCBlcnJvcnMgYXJlIHNlbnQg
dmlhIHRoZSBjbGllbnQuCisgICAgdmlydHVhbCB2b2lkIGFib3J0KFdlYlNwZWVjaFJlY29nbml0
aW9uSGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KikgeyBXRUJLSVRfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYlNwZWVjaFJlY29n
bml6ZXIoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2Vi
U3BlZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJkMzk0YWY4
MDgwOTk2NzBmMzBhN2ZiNzVjYjkzZjk4MGI4Yjg1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaApAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50
X2gKKyNkZWZpbmUgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudF9oCisKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0OworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU7Citj
bGFzcyBXZWJTdHJpbmc7CisKKy8vIEEgY2xpZW50IGZvciByZXBvcnRpbmcgcHJvZ3Jlc3Mgb24g
c3BlZWNoIHJlY29nbml0aW9uIGZvciBhIHNwZWNpZmljIGhhbmRsZS4KK2NsYXNzIFdlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgY29ycmVz
cG9uZCB0byB0aGUgZXZlbnRzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYzoKKyAgICAvLyBodHRwOi8v
c3BlZWNoLWphdmFzY3JpcHQtYXBpLXNwZWMuZ29vZ2xlY29kZS5jb20vZ2l0L3NwZWVjaGFwaS5o
dG1sI3NwZWVjaHJlY28tZXZlbnRzCisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgZW1i
ZWRkZXIgaGFzIHN0YXJ0ZWQgdG8gY2FwdHVyZSBhdWRpby4KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
U3RhcnRBdWRpbyhXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpID0gMDsKKworICAgIC8vIFRv
IGJlIGNhbGxlZCB3aGVuIHNvbWUgc291bmQsIHBvc3NpYmx5IHNwZWVjaCwgaGFzIGJlZW4gZGV0
ZWN0ZWQuCisgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlkU3Rh
cnRBdWRpby4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRTb3VuZChXZWJTcGVlY2hSZWNvZ25p
dGlvbkhhbmRsZSYpID0gMDsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNwZWVjaCBoYXMg
YmVlbiBkZXRlY3RlZC4KKyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhZnRl
ciBkaWRTdGFydFNvdW5kLgorICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNwZWVjaChXZWJTcGVl
Y2hSZWNvZ25pdGlvbkhhbmRsZSYpID0gMDsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHNw
ZWVjaCBpcyBubyBsb25nZXIgZGV0ZWN0ZWQuCisgICAgdmlydHVhbCB2b2lkIGRpZEVuZFNwZWVj
aChXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpID0gMDsKKworICAgIC8vIFRvIGJlIGNhbGxl
ZCB3aGVuIHNvdW5kIGlzIG5vIGxvbmdlciBkZXRlY3RlZC4KKyAgICAvLyBUaGlzIGlzIGV4cGVj
dGVkIHRvIGJlIGNhbGxlZCBhZnRlciBkaWRFbmRTcGVlY2guCisgICAgdmlydHVhbCB2b2lkIGRp
ZEVuZFNvdW5kKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgPSAwOworCisgICAgLy8gVG8g
YmUgY2FsbGVkIHdoZW4gYXVkaW8gY2FwdHVyZSBoYXMgc3RvcHBlZC4KKyAgICAvLyBUaGlzIGlz
IGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBhZnRlciBkaWRFbmRTb3VuZC4KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRW5kQXVkaW8oV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKSA9IDA7CisKKyAgICAv
LyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgc3BlZWNoIHJlY29nbml6ZXIgcmV0dXJucyBhIHJlc3Vs
dC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3VsdChXZWJTcGVlY2hSZWNvZ25pdGlv
bkhhbmRsZSYsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiwgdW5zaWduZWQgbG9u
ZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0
PiYgcmVzdWx0SGlzdG9yeSkgPSAwOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNw
ZWVjaCByZWNvZ25pemVyIHJldHVybnMgYSBmaW5hbCByZXN1bHQgd2l0aCBubworICAgIC8vIHJl
Y29nbml6aW9uIGh5cG90aGVzaXMuCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVOb01hdGNo
KFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQmKSA9IDA7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXplciBu
ZWVkcyB0byBkZWxldGUgb25lIG9mIHRoZSBwcmV2aW91c2x5CisgICAgLy8gcmV0dXJuZWQgaW50
ZXJpbSByZXN1bHRzLgorICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVSZXN1bHQoV2ViU3BlZWNo
UmVjb2duaXRpb25IYW5kbGUmLCB1bnNpZ25lZCByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9y
PFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkgPSAwOworCisgICAg
Ly8gVG8gYmUgY2FsbGVkIHdoZW4gYSBzcGVlY2ggcmVjb2duaXRpb24gZXJyb3Igb2NjdXJzLgor
ICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgYW4gZW51bSBmb3IgdGhlIGVycm9yIGNvZGUuCisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVFcnJvcihXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYs
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgc2hvcnQgY29kZSkgPSAwOworCisg
ICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml6ZXIgaGFzIGJlZ3VuIHRvIGxpc3Rl
biB0byB0aGUgYXVkaW8gd2l0aAorICAgIC8vIHRoZSBpbnRlbnRpb24gb2YgcmVjb2duaXppbmcu
CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikg
PSAwOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlY29nbml0aW9uIHNlc3Npb24g
aGFzIGVuZGVkLiBUaGlzIG11c3QgYWx3YXlzIGJlCisgICAgLy8gY2FsbGVkLCBubyBtYXR0ZXIg
dGhlIHJlYXNvbiBmb3IgdGhlIGVuZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kKFdlYlNwZWVj
aFJlY29nbml0aW9uSGFuZGxlJikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAppbmRleCBmMjkwMzNjNzIzODAwNWM1ZWQ3
MmRhYzMxYjgxODlhYWQ0ODMzODE3Li5iOGZlOWQwYzVmNjE1MzYxOTIxYzcxMDVhYTBlMDA1MDlk
MmM2NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVu
dC5oCkBAIC02OCw2ICs2OCw3IEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNs
YXNzIFdlYlJhbmdlOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwogY2xhc3MgV2Vi
U3BlZWNoSW5wdXRMaXN0ZW5lcjsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBX
ZWJTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVVJMUmVxdWVzdDsK
QEAgLTMxNiw2ICszMTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcigKICAgICAgICAgV2ViU3BlZWNoSW5wdXRM
aXN0ZW5lciopIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRkZXIgQVBJ
IGZvciBzcGVlY2ggcmVjb2duaXRpb24gc2VydmljZXMuCisgICAgdmlydHVhbCBXZWJTcGVlY2hS
ZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkgeyByZXR1cm4gMDsgfQorCiAgICAgLy8gRGV2
aWNlIE9yaWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBBY2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgZGV2aWNlIG9y
aWVudGF0aW9uIHNlcnZpY2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWI5
MGQ4NDZhNGFjYTRjNjRmMTAyMDExMzMxNTdhNDA1YTg4YmUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5j
cHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIgorCisjaW5jbHVkZSAiU3BlZWNo
R3JhbW1hckxpc3QuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbi5oIgorI2luY2x1ZGUg
IlNwZWVjaFJlY29nbml0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdC5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5oIgorI2luY2x1
ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZS5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zLmgiCisjaW5jbHVk
ZSAiV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNv
Z25pemVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6On5TcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5KCkKK3sKK30KKworUGFzc093blB0cjxTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5PiBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpjcmVhdGUoV2ViU3BlZWNoUmVjb2du
aXplciogcmVjb2duaXplcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNwZWVjaFJlY29n
bml0aW9uQ2xpZW50UHJveHkocmVjb2duaXplcikpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0
aW9uQ2xpZW50UHJveHk6OnN0YXJ0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29u
c3QgU3BlZWNoR3JhbW1hckxpc3QqIGdyYW1tYXJMaXN0LCBjb25zdCBTdHJpbmcmIGxhbmcsIGJv
b2wgY29udGludW91cykKK3sKKyAgICBXZWJWZWN0b3I8V2ViU3BlZWNoR3JhbW1hcj4gd2ViU3Bl
ZWNoR3JhbW1hcnMoZ3JhbW1hckxpc3QtPmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGxv
bmcgaSA9IDA7IGkgPCBncmFtbWFyTGlzdC0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgd2ViU3Bl
ZWNoR3JhbW1hcnNbaV0gPSBncmFtbWFyTGlzdC0+aXRlbShpKTsKKworICAgIG1fcmVjb2duaXpl
ci0+c3RhcnQoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUocmVjb2duaXRpb24pLCBXZWJTcGVl
Y2hSZWNvZ25pdGlvblBhcmFtcyh3ZWJTcGVlY2hHcmFtbWFycywgbGFuZywgY29udGludW91cyks
IHRoaXMpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OnN0b3AoU3Bl
ZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKQoreworICAgIG1fcmVjb2duaXplci0+c3RvcChX
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZShyZWNvZ25pdGlvbiksIHRoaXMpOworfQorCit2b2lk
IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmFib3J0KFNwZWVjaFJlY29nbml0aW9uKiBy
ZWNvZ25pdGlvbikKK3sKKyAgICBtX3JlY29nbml6ZXItPmFib3J0KFdlYlNwZWVjaFJlY29nbml0
aW9uSGFuZGxlKHJlY29nbml0aW9uKSwgdGhpcyk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eTo6ZGlkU3RhcnRBdWRpbyhXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
aGFuZGxlKQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBz
dGF0aWNfY2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisgICAg
cmVjb2duaXRpb24tPmRpZFN0YXJ0QXVkaW8oKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpkaWRTdGFydFNvdW5kKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBo
YW5kbGUpCit7CisgICAgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiByZWNvZ25pdGlvbiA9IHN0
YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+ID4oaGFuZGxlKTsKKyAgICBy
ZWNvZ25pdGlvbi0+ZGlkU3RhcnRTb3VuZCgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHk6OmRpZFN0YXJ0U3BlZWNoKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBo
YW5kbGUpCit7CisgICAgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiByZWNvZ25pdGlvbiA9IHN0
YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+ID4oaGFuZGxlKTsKKyAgICBy
ZWNvZ25pdGlvbi0+ZGlkU3RhcnRTcGVlY2goKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpkaWRFbmRTcGVlY2goV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhh
bmRsZSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0gc3Rh
dGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAgIHJl
Y29nbml0aW9uLT5kaWRFbmRTcGVlY2goKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5OjpkaWRFbmRTb3VuZChXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxl
KQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBzdGF0aWNf
Y2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisgICAgcmVjb2du
aXRpb24tPmRpZEVuZFNvdW5kKCk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eTo6ZGlkRW5kQXVkaW8oV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8
UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAgIHJlY29nbml0aW9u
LT5kaWRFbmRBdWRpbygpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OmRpZFJlY2VpdmVSZXN1bHQoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSwgY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1
bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVz
dWx0SGlzdG9yeSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9u
ID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gPiByZXN1bHRIaXN0
b3J5VmVjdG9yKHJlc3VsdEhpc3Rvcnkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlc3VsdEhpc3Rvcnkuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdEhpc3RvcnlWZWN0
b3IuYXBwZW5kKHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+
ID4ocmVzdWx0SGlzdG9yeVtpXSkpOworCisgICAgcmVjb2duaXRpb24tPmRpZFJlY2VpdmVSZXN1
bHQocmVzdWx0LCByZXN1bHRJbmRleCwgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0OjpjcmVh
dGUocmVzdWx0SGlzdG9yeVZlY3RvcikpOworCit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eTo6ZGlkUmVjZWl2ZU5vTWF0Y2goV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
IGhhbmRsZSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAg
ICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8UGFz
c1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAgIHJlY29nbml0aW9uLT5k
aWRSZWNlaXZlTm9NYXRjaChyZXN1bHQpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OmRpZERlbGV0ZVJlc3VsdChXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFu
ZGxlLCB1bnNpZ25lZCByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvbj4gPihoYW5kbGUpOworCisgICAgVmVjdG9yPFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdD4gPiByZXN1bHRIaXN0b3J5VmVjdG9yKHJlc3VsdEhpc3Rvcnkuc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdEhpc3Rvcnkuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJlc3VsdEhpc3RvcnlWZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNo
UmVjb2duaXRpb25SZXN1bHQ+ID4ocmVzdWx0SGlzdG9yeVtpXSkpOworCisgICAgcmVjb2duaXRp
b24tPmRpZERlbGV0ZVJlc3VsdChyZXN1bHRJbmRleCwgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRM
aXN0OjpjcmVhdGUocmVzdWx0SGlzdG9yeVZlY3RvcikpOworfQorCit2b2lkIFNwZWVjaFJlY29n
bml0aW9uQ2xpZW50UHJveHk6OmRpZFJlY2VpdmVFcnJvcihXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZSYgaGFuZGxlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIHNob3J0IGNv
ZGUpCit7CisgICAgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiByZWNvZ25pdGlvbiA9IHN0YXRp
Y19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+ID4oaGFuZGxlKTsKKyAgICBTcGVl
Y2hSZWNvZ25pdGlvbkVycm9yOjpDb2RlIGVycm9yQ29kZSA9IHN0YXRpY19jYXN0PFNwZWVjaFJl
Y29nbml0aW9uRXJyb3I6OkNvZGU+KGNvZGUpOworICAgIHJlY29nbml0aW9uLT5kaWRSZWNlaXZl
RXJyb3IoU3BlZWNoUmVjb2duaXRpb25FcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwgbWVzc2FnZSkp
OworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmRpZFN0YXJ0KFdlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNwZWVjaFJlY29n
bml0aW9uPiByZWNvZ25pdGlvbiA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2du
aXRpb24+ID4oaGFuZGxlKTsKKyAgICByZWNvZ25pdGlvbi0+ZGlkU3RhcnQoKTsKK30KKwordm9p
ZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRFbmQoV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29n
bml0aW9uID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5k
bGUpOworICAgIHJlY29nbml0aW9uLT5kaWRFbmQoKTsKK30KKworU3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eTo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShXZWJTcGVlY2hSZWNvZ25p
emVyKiByZWNvZ25pemVyKQorICAgIDogbV9yZWNvZ25pemVyKHJlY29nbml6ZXIpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjZGU2
ZGIwZWVmYTE1NTFjYzU2M2MyMjkzMTRlM2M3NjBhNDYyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3BlZWNoUmVjb2duaXRpb25DbGll
bnRQcm94eV9oCisjZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHlfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVu
dC5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3
dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXplcjsKK2NsYXNzIFdlYlN0cmluZzsK
KworY2xhc3MgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudCwgcHVibGljIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQg
eworcHVibGljOgorICAgIH5TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KCk7CisKKyAgICAv
LyBDb25zdHJ1Y3RpbmcgYSBwcm94eSBvYmplY3Qgd2l0aCBhIDAgV2ViU3BlZWNoUmVjb2duaXpl
ciBpcyBzYWZlIGluCisgICAgLy8gaXRzZWxmLCBidXQgYXR0ZW1wdGluZyB0byBjYWxsIHN0YXJ0
L3N0b3AvYWJvcnQgb24gaXQgd2lsbCBjcmFzaC4KKyAgICBzdGF0aWMgUGFzc093blB0cjxTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5PiBjcmVhdGUoV2ViU3BlZWNoUmVjb2duaXplciopOwor
CisgICAgLy8gV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25DbGllbnQ6CisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uKiwgY29uc3QgV2ViQ29yZTo6U3Bl
ZWNoR3JhbW1hckxpc3QqLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24q
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoV2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb24qKSBPVkVSUklERTsKKworICAgIC8vIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0QXVkaW8oV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRTb3VuZChXZWJTcGVlY2hSZWNv
Z25pdGlvbkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNwZWVj
aChXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRFbmRTcGVlY2goV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRW5kU291bmQoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kQXVkaW8oV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3VsdChX
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0JiwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRleCwgY29uc3QgV2ViVmVjdG9yPFdlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVOb01hdGNoKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRGVsZXRlUmVzdWx0KFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgdW5zaWduZWQg
cmVzdWx0SW5kZXgsIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4m
IHJlc3VsdEhpc3RvcnkpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRXJy
b3IoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Us
IHVuc2lnbmVkIHNob3J0IGNvZGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFy
dChXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRFbmQoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKSBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KFdlYlNwZWVjaFJlY29nbml6ZXIq
KTsKKworICAgIFdlYlNwZWVjaFJlY29nbml6ZXIqIG1fcmVjb2duaXplcjsKK307CisKK307IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3Jh
bW1hci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFtbWFyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMjg1MDlkZThiNmEzN2ViOTZjY2UwN2ZjYjVlYjY4NTg3YmM2ZDUwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU3BlZWNoR3Jh
bW1hci5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJTcGVlY2hHcmFtbWFyLmgiCisKKyNpbmNsdWRlICJTcGVlY2hHcmFtbWFy
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3ZvaWQgV2ViU3BlZWNoR3JhbW1hcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgp
OworfQorCitXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFtbWFyKGNvbnN0IFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVlKQorICAgIDogbV9wcml2YXRlKHZhbHVl
KQoreworfQorCitXZWJTcGVlY2hHcmFtbWFyJiBXZWJTcGVlY2hHcmFtbWFyOjpvcGVyYXRvcj0o
Y29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaEdyYW1tYXI+JiB2YWx1ZSkKK3sK
KyAgICBtX3ByaXZhdGUgPSB2YWx1ZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlVSTCBX
ZWJTcGVlY2hHcmFtbWFyOjpzcmMoKSBjb25zdAoreworICAgIFdFQktJVF9BU1NFUlQobV9wcml2
YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zcmMoKTsKK30KKworZmxvYXQgV2Vi
U3BlZWNoR3JhbW1hcjo6d2VpZ2h0KCkgY29uc3QKK3sKKyAgICBXRUJLSVRfQVNTRVJUKG1fcHJp
dmF0ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2VpZ2h0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1NTU2NzNjMjBj
ZGE3NmU3ZjNjMjY0NjM0MzA4NGVkZGU1NGI3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHAKQEAgLTAs
MCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJT
cGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5oIgorCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb24u
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2
b2lkIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRl
LnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6OmFzc2lnbihj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgb3RoZXIpCit7CisgICAgbV9wcml2YXRl
ID0gb3RoZXIubV9wcml2YXRlOworfQorCitib29sIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
OjplcXVhbHMoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIG90aGVyKSBjb25zdAor
eworICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpID09IG90aGVyLm1fcHJpdmF0ZS5nZXQoKSk7
Cit9CisKK2Jvb2wgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6Omxlc3NUaGFuKGNvbnN0IFdl
YlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
cHJpdmF0ZS5nZXQoKSA8IG90aGVyLm1fcHJpdmF0ZS5nZXQoKSk7Cit9CisKK1dlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlOjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZShjb25zdCBQYXNzUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uPiYgc3BlZWNoUmVjb2duaXRpb24pCisgICAgOiBtX3ByaXZh
dGUoc3BlZWNoUmVjb2duaXRpb24pCit7Cit9CisKK1dlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
JiBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb24+JiBzcGVlY2hSZWNvZ25pdGlvbikKK3sKKyAgICBtX3ByaXZhdGUg
PSBzcGVlY2hSZWNvZ25pdGlvbjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVl
Y2hSZWNvZ25pdGlvblBhcmFtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
cGVlY2hSZWNvZ25pdGlvblBhcmFtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjVlNTJjMTU4YzE1MWZhY2U1
MTQyYTRmNDMxMmZmMDRiODBmM2M3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zLmNwcApAQCAtMCwwICsxLDM4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJl
Y29nbml0aW9uUGFyYW1zLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTcGVlY2hSZWNv
Z25pdGlvblBhcmFtczo6V2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMoY29uc3QgV2ViVmVjdG9y
PFdlYlNwZWVjaEdyYW1tYXI+JiBncmFtbWFycywgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSwg
Ym9vbCBjb250aW51b3VzKQorICAgIDogbV9ncmFtbWFycyhncmFtbWFycykKKyAgICAsIG1fbGFu
Z3VhZ2UobGFuZ3VhZ2UpCisgICAgLCBtX2NvbnRpbnVvdXMoY29udGludW91cykKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU3Nzhk
ZGQ1ZGYwYTliYzA0MDVmYjNjNjExYWRjNGU5MWQ0ZmJjNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25p
dGlvbkFsdGVybmF0aXZlLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmFz
c2lnbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYgb3RoZXIpCit7CisgICAgbV9w
cml2YXRlID0gb3RoZXIubV9wcml2YXRlOworfQorCit2b2lkIFdlYlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0Ojphc3NpZ24oY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIHRyYW5zY3JpcHRzLCBj
b25zdCBXZWJWZWN0b3I8ZmxvYXQ+JiBjb25maWRlbmNlcywgYm9vbCBmaW5hbCkKK3sKKyAgICBB
U1NFUlQodHJhbnNjcmlwdHMuc2l6ZSgpID09IGNvbmZpZGVuY2VzLnNpemUoKSk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmU+ID4gYWx0
ZXJuYXRpdmVzKHRyYW5zY3JpcHRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0cmFuc2NyaXB0cy5zaXplKCk7ICsraSkKKyAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChX
ZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlOjpjcmVhdGUodHJhbnNjcmlwdHNb
aV0sIGNvbmZpZGVuY2VzW2ldKSk7CisKKyAgICBtX3ByaXZhdGUgPSBXZWJDb3JlOjpTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdDo6Y3JlYXRlKGFsdGVybmF0aXZlcywgZmluYWwpOworfQorCit2b2lk
IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJl
c2V0KCk7Cit9CisKK1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGVyYXRvciBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNjFlODBhOGI4MDgxMDRk
ZmI2ZjY4NmY5MDU0MWRlMGZhZjhmNTdlZC4uMWEyY2JmYzUzZmFkNGJjMGZiYTQxNTNmY2ExYjM3
MzVkOWIwZjc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cApAQCAtMTA3LDcgKzEwNyw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNwZWVjaElucHV0Q2xpZW50SW1w
bC5oIgotI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVy
ZUN1cnZlLmgiCkBAIC0zNjUsNiArMzY1LDkgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdl
YlZpZXdDbGllbnQqIGNsaWVudCkKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgICwgbV9z
cGVlY2hJbnB1dENsaWVudChTcGVlY2hJbnB1dENsaWVudEltcGw6OmNyZWF0ZShjbGllbnQpKQog
I2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICAsIG1fc3BlZWNoUmVjb2du
aXRpb25DbGllbnQoU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKGNsaWVudCA/
IGNsaWVudC0+c3BlZWNoUmVjb2duaXplcigpIDogMCkpCisjZW5kaWYKICAgICAsIG1fZGV2aWNl
T3JpZW50YXRpb25DbGllbnRQcm94eShhZG9wdFB0cihuZXcgRGV2aWNlT3JpZW50YXRpb25DbGll
bnRQcm94eShjbGllbnQgPyBjbGllbnQtPmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkgOiAwKSkp
CiAgICAgLCBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHkoYWRvcHRQdHIobmV3IEdlb2xvY2F0aW9u
Q2xpZW50UHJveHkoY2xpZW50ID8gY2xpZW50LT5nZW9sb2NhdGlvbkNsaWVudCgpIDogMCkpKQog
ICAgICwgbV9lbXVsYXRlZFRleHRab29tRmFjdG9yKDEpCkBAIC0zOTgsNyArNDAxLDcgQEAgV2Vi
Vmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICBwcm92aWRl
U3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0KCksIG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0KCkpOwog
I2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBwcm92aWRlU3BlZWNoUmVj
b2duaXRpb25UbyhtX3BhZ2UuZ2V0KCksIDApOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgaW1w
bGVtZW50YXRpb24uCisgICAgcHJvdmlkZVNwZWVjaFJlY29nbml0aW9uVG8obV9wYWdlLmdldCgp
LCBtX3NwZWVjaFJlY29nbml0aW9uQ2xpZW50LmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShO
T1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgcHJvdmlk
ZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0KCksIG5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA5OWEwNGI4YzYz
MDExMjVjM2Y4NGZhOTY2YTMzMWU1NTkzNjczYjA4Li4zNThmYzlmODI0MjMwNWIwYTY2MWVhOWNl
NGY1NWI0YTg3ZDM2OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKQEAgLTg1LDYgKzg1LDcgQEAgY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9j
YXRpb25DbGllbnRQcm94eTsKIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsKIGNsYXNz
IFNwZWVjaElucHV0Q2xpZW50SW1wbDsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk7CiBjbGFzcyBVc2VyTWVkaWFDbGllbnRJbXBsOwogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0b3JJbXBsOwpAQCAtNzMxLDYgKzczMiwxMCBAQCBwcml2
YXRlOgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgT3duUHRyPFNwZWVjaElucHV0Q2xp
ZW50SW1wbD4gbV9zcGVlY2hJbnB1dENsaWVudDsKICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRF
RF9TUEVFQ0gpCisgICAgT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+IG1fc3Bl
ZWNoUmVjb2duaXRpb25DbGllbnQ7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8g
ZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGljc0NvbnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUg
Y29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQgb24sIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQK
ICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIgaG9sZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBj
YXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135316</attachid>
            <date>2012-04-03 05:56:47 -0700</date>
            <delta_ts>2012-04-03 09:01:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81667-20120403135645.patch</filename>
            <type>text/plain</type>
            <size>59717</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YjU2ZDQ2MmNkM2Y4YjY4ZDdlNjE0MzdiM2I0YjE4NDEyNTRhMDQ4Li4w
ZTBkMzdkZTU2Y2Y4N2NiOTBmODM5ZGVhOWQ4ZDhmM2VkMDUyYmUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDcgQEAKKzIwMTItMDQtMDMgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBTcGVlY2ggSmF2YVNjcmlwdCBBUEk6IFBsdW1iaW5nIGZvciBDaHJvbWl1
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGVlY2hH
cmFtbWFyOjpzcmMoKSBpcyBjYWxsZWQgd2l0aCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJl
Y2F1c2UKKyAgICAgICAgdGhlIGF0dHJpYnV0ZSBzZXR0ZXIgbmVlZHMgaXQuIFByb3ZpZGUgYSBz
cmMoKSBtZXRob2QgdGhhdCBkb2Vzbid0CisgICAgICAgIHRha2UgYSBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgaW50ZXJuYWxseS4KKworICAgICAgICBSZW5hbWUgU3Bl
ZWNoUmVjb2duaXRpb246OmF1ZGlvU3RhcnRDYWxsYmFjaygpLCBldGMuIHRvIHVzZSBldmVudCBz
dHlsZQorICAgICAgICBuYW1lcywgaS5lLiBkaWRTdGFydEF1ZGlvKCksIGV0Yy4KKworICAgICAg
ICBSZW1vdmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnQ6Om5vdGlmeVZpc2liaWxpdHlIaWRkZW4o
KS4gVGhlIGVtYmVkZGVyCisgICAgICAgIGNhbiBrZWVwIHRyYWNrIG9mIHRoZSB2aXNpYmlsaXR5
LgorCisgICAgICAgIFJlbW92ZSBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDo6dW5yZWdpc3RlclNw
ZWVjaFJlY29nbml0aW9uLAorICAgICAgICBpdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywganVzdCBtaW5vciB0d2Vha3MuCisKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hHcmFtbWFyLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hHcmFtbWFyOjpzcmMp
OgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydEF1ZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNvdW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydFNwZWVjaCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRTb3VuZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmRBdWRpbyk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZUVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9T
cGVlY2hSZWNvZ25pdGlvbi5oOgorICAgICAgICAoU3BlZWNoUmVjb2duaXRpb24pOgorICAgICAg
ICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50Lmg6CisgICAgICAgIChT
cGVlY2hSZWNvZ25pdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNo
UmVjb2duaXRpb25Db250cm9sbGVyLmg6CisKIDIwMTItMDQtMDMgIEJpbGwgQnVkZ2UgIDxiYnVk
Z2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMTIyMTcpOiBIJlIgQmxv
Y2sgdGF4IHNpdGUgd29uJ3QgbG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjZGNl
MmE2YzhmZThlYWI3ODMxNDQwZjYwN2M4Yzc4ZWFjYTE2MzBiLi5kMGI0OWM2MDAwMjFhNjczNjFj
N2FhM2U4ZjhlMzhkMmE0ZTYzYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNyBAQAorMjAxMi0wNC0wMyAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFNwZWVjaCBKYXZhU2NyaXB0IEFQSTogUGx1bWJpbmcgZm9yIENocm9taXVt
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTY2Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBwbHVt
YmluZyBmb3Igc3BlZWNoIHJlY29nbml0aW9uLgorCisgICAgICAgIFRoZSBpbXBsZW1lbnRlciBp
cyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIFdlYlNwZWVjaFJlY29nbml6ZXIgaW50ZXJmYWNl
LgorICAgICAgICBUaGUgc3RhcnQoKSwgc3RvcCgpLCBhbmQgYWJvcnQoKSBmdW5jdGlvbnMgb2Yg
dGhhdCBpbnRlcmZhY2UgdGFrZSBhCisgICAgICAgIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxl
IGFyZ3VtZW50LCB3aGljaCBpZGVudGlmaWVzIHRoZSBvYmplY3Qgd2hpY2ggaGFzCisgICAgICAg
IHJlcXVlc3RlZCB0aGUgYWN0aW9uLCBhbmQgYSBwb2ludGVyIHRvIGEgV2ViU3BlZWNoUmVjb2du
aXRpb25DbGllbnQgaW50ZXJmYWNlLAorICAgICAgICB0aHJvdWdoIHdoaWNoIGl0IHNob3VsZCBz
ZW5kIGJhY2sgbm90aWZpY2F0aW9ucyBvbiBwcm9ncmVzcywgZXJyb3JzLCBldGMuCisKKyAgICAg
ICAgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eSBwYXNzZXMgZGF0YSBiZXR3ZWVuIHRoZSBX
ZWJDb3JlIGFuZCBXZWJLaXQgbGF5ZXJzLAorICAgICAgICBpbXBsZW1lbnRpbmcgdGhlIFdlYkNv
cmU6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50IGFuZCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQKKyAgICAgICAgaW50ZXJmYWNlcy4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFtbWFyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6fldlYlNwZWVjaEdyYW1tYXIpOgorICAgICAgICAqIHB1
YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6On5XZWJT
cGVlY2hSZWNvZ25pdGlvbkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlOjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChXZWJLaXQ6Om9wZXJhdG9yPCk6CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29nbml0
aW9uUGFyYW1zLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViU3BlZWNoUmVjb2du
aXRpb25QYXJhbXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
czo6Z3JhbW1hcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
czo6bGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
czo6Y29udGludW91cyk6CisgICAgICAgICogcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6fldlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXplci5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNwZWVjaFJlY29nbml6ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pemVyOjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXI6
On5XZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU3BlZWNoUmVjb2du
aXplckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlld0NsaWVudC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlZpZXdDbGllbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Q2xpZW50OjpzcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAgKiBzcmMvU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6flNwZWVjaFJl
Y29nbml0aW9uQ2xpZW50UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5OjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50UHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudFByb3h5OjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OmRpZFN0YXJ0QXVkaW8pOgorICAgICAgICAoV2ViS2l0OjpTcGVlY2hSZWNvZ25p
dGlvbkNsaWVudFByb3h5OjpkaWRTdGFydFNvdW5kKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNo
UmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkU3RhcnRTcGVlY2gpOgorICAgICAgICAoV2ViS2l0
OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRFbmRTcGVlY2gpOgorICAgICAgICAo
V2ViS2l0OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRFbmRTb3VuZCk6CisgICAg
ICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmRpZEVuZEF1ZGlvKToK
KyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkUmVjZWl2
ZVJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OmRpZFJlY2VpdmVOb01hdGNoKToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVjb2duaXRpb25D
bGllbnRQcm94eTo6ZGlkRGVsZXRlUmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6U3BlZWNoUmVj
b2duaXRpb25DbGllbnRQcm94eTo6ZGlkUmVjZWl2ZUVycm9yKToKKyAgICAgICAgKFdlYktpdDo6
U3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViS2l0
OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRFbmQpOgorICAgICAgICAoV2ViS2l0
OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5KToKKyAgICAgICAgKiBzcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoR3JhbW1hci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6cmVzZXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hHcmFtbWFyOjpXZWJTcGVlY2hHcmFtbWFyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3BlZWNoR3JhbW1hcjo6c3JjKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNo
R3JhbW1hcjo6d2VpZ2h0KToKKyAgICAgICAgKiBzcmMvV2ViU3BlZWNoUmVjb2duaXRpb25IYW5k
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml0aW9uSGFuZGxlOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZTo6ZXF1YWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGU6Omxlc3NUaGFuKToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGU6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uPik6CisgICAgICAgICogc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uUGFy
YW1zLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pdGlvblBhcmFtczo6V2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMpOgorICAg
ICAgICAqIHNyYy9XZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6
OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojpy
ZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGVy
YXRvciBQYXNzUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OldlYlZpZXdJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdl
YktpdCk6CisKIDIwMTItMDQtMDMgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYlZpZXdJbXBsIGRvZXNuJ3Qgbm90aWZ5IHRoZSBwYWdlIHRoYXQgdGhlIHVz
ZXIgaGFzIGNhbmNlbGVkIGZ1bGxzY3JlZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9TcGVlY2hHcmFtbWFyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hHcmFtbWFyLmgKaW5kZXggNjIwODhjMThiMGM4Y2IwMWQzNDA3ZDFkMjY2Yjgy
Y2I2ZGQyZjJmOS4uZTA4MzU4YmJmMTNlZDJmZmVjNGNlNjY2MjI2NjlmZWI5YTE0YTBiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoR3JhbW1hci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaEdyYW1tYXIuaApAQCAtNDIs
NiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoR3JhbW1hcj4g
Y3JlYXRlKGNvbnN0IEtVUkwmIHNyYywgZG91YmxlIHdlaWdodCk7CiAKICAgICBjb25zdCBLVVJM
JiBzcmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0IHsgcmV0dXJuIG1fc3JjOyB9Cisg
ICAgY29uc3QgS1VSTCYgc3JjKCkgY29uc3QgeyByZXR1cm4gbV9zcmM7IH0KICAgICB2b2lkIHNl
dFNyYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzcmMpOwogCiAgICAg
ZG91YmxlIHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VpZ2h0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5jcHAKaW5kZXggMWIz
YWIzMjU0ODU3MjAxYTY0ZTRiODNhNTNiN2JjMTVjMTY5YWUwMC4uMmE3NjY5ZTk2ZDMxZDc0M2Jm
MWVlYTdkYjEwZjk1NTNhMzI2NDM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uLmNwcApAQCAtNjIsNTggKzYyLDYzIEBAIHZvaWQg
U3BlZWNoUmVjb2duaXRpb246OmFib3J0KCkKICAgICBtX2NvbnRyb2xsZXItPmFib3J0KHRoaXMp
OyAvLyBGSVhNRTogU3BlYyBzaG91bGQgc2F5IHdoYXQgdG8gZG8gaWYgd2UgYXJlIG5vdCBzdGFy
dGVkLgogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjphdWRpb1N0YXJ0Q2FsbGJhY2soKQor
dm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRBdWRpbygpCiB7CiAgICAgLy8gRklYTUU6
IFRoZSBzcGVjIHNob3VsZCBzcGVjaWZ5IHdoZXRoZXIgdGhlc2UgZXZlbnRzIGNhbiBidWJibGUg
YW5kIGFyZSBjYW5jZWxhYmxlLgogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuYXVkaW9zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFi
bGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9uOjpzb3VuZFN0YXJ0Q2Fs
bGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkU3RhcnRTb3VuZCgpCiB7CiAgICAg
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zb3VuZHN0YXJ0RXZlbnQs
IC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CiAKLXZvaWQg
U3BlZWNoUmVjb2duaXRpb246OnNwZWVjaFN0YXJ0Q2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNv
Z25pdGlvbjo6ZGlkU3RhcnRTcGVlY2goKQogewogICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuc3BlZWNoc3RhcnRFdmVudCwgLypjYW5CdWJibGU9Ki9mYWxzZSwg
LypjYW5jZWxhYmxlPSovZmFsc2UpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3Bl
ZWNoRW5kQ2FsbGJhY2soKQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkRW5kU3BlZWNoKCkK
IHsKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNwZWVjaGVu
ZEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2ZhbHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQog
Ci12b2lkIFNwZWVjaFJlY29nbml0aW9uOjphdWRpb0VuZENhbGxiYWNrKCkKK3ZvaWQgU3BlZWNo
UmVjb2duaXRpb246OmRpZEVuZFNvdW5kKCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnNvdW5kZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8q
Y2FuY2VsYWJsZT0qL2ZhbHNlKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZEVu
ZEF1ZGlvKCkKIHsKICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmF1ZGlvZW5kRXZlbnQsIC8qY2FuQnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNl
KSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246OnJlc3VsdENhbGxiYWNrKFBhc3NSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJ
bmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3Rv
cnkpCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IHJlc3VsdCwgdW5zaWduZWQgbG9uZyByZXN1bHRJbmRl
eCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+IHJlc3VsdEhpc3Rvcnkp
CiB7CiAgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OjpjcmVhdGVSZXN1
bHQocmVzdWx0LCByZXN1bHRJbmRleCwgcmVzdWx0SGlzdG9yeSkpOwogfQogCi12b2lkIFNwZWVj
aFJlY29nbml0aW9uOjpub01hdGNoQ2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdD4gcmVzdWx0KQordm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6ZGlkUmVjZWl2ZU5vTWF0
Y2goUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gcmVzdWx0KQogewogICAgIGRp
c3BhdGNoRXZlbnQoU3BlZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlTm9NYXRjaChyZXN1bHQp
KTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6cmVzdWx0RGVsZXRlZENhbGxiYWNrKHVu
c2lnbmVkIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlz
dD4gcmVzdWx0SGlzdG9yeSkKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246OmRpZERlbGV0ZVJlc3Vs
dCh1bnNpZ25lZCByZXN1bHRJbmRleCwgUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dExpc3Q+IHJlc3VsdEhpc3RvcnkpCiB7CiAgICAgZGlzcGF0Y2hFdmVudChTcGVlY2hSZWNvZ25p
dGlvbkV2ZW50OjpjcmVhdGVSZXN1bHREZWxldGVkKHJlc3VsdEluZGV4LCByZXN1bHRIaXN0b3J5
KSk7CiB9CiAKLXZvaWQgU3BlZWNoUmVjb2duaXRpb246OmVycm9yQ2FsbGJhY2soUGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yPiBlcnJvcikKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb246
OmRpZFJlY2VpdmVFcnJvcihQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGVycm9y
KQogewogICAgIGRpc3BhdGNoRXZlbnQoU3BlZWNoUmVjb2duaXRpb25FdmVudDo6Y3JlYXRlRXJy
b3IoZXJyb3IpKTsKIH0KIAotdm9pZCBTcGVlY2hSZWNvZ25pdGlvbjo6c3RhcnRDYWxsYmFjaygp
Cit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRTdGFydCgpCiB7CiAgICAgZGlzcGF0Y2hFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGFydEV2ZW50LCAvKmNhbkJ1YmJsZT0qL2Zh
bHNlLCAvKmNhbmNlbGFibGU9Ki9mYWxzZSkpOwogfQogCi12b2lkIFNwZWVjaFJlY29nbml0aW9u
OjplbmRDYWxsYmFjaygpCit2b2lkIFNwZWVjaFJlY29nbml0aW9uOjpkaWRFbmQoKQogewogICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZW5kRXZlbnQsIC8qY2Fu
QnViYmxlPSovZmFsc2UsIC8qY2FuY2VsYWJsZT0qL2ZhbHNlKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb24uaAppbmRleCAzOWUwMDg2
ZjBkOTRjZDM4ZjdhMTI4MDRiYjU3ZjNkZTc3NWYyMDNjLi4zZmMyNDQxNjZlMzM4YzNiMGY2MmNm
Y2YwMmYwOGI4NWE1ZDU1NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hSZWNvZ25pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFJlY29nbml0aW9uLmgKQEAgLTY0LDE3ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhYm9ydCgpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTcGVlY2hSZWNvZ25pdGlvbkNs
aWVudC4KLSAgICB2b2lkIGF1ZGlvU3RhcnRDYWxsYmFjaygpOwotICAgIHZvaWQgc291bmRTdGFy
dENhbGxiYWNrKCk7Ci0gICAgdm9pZCBzcGVlY2hTdGFydENhbGxiYWNrKCk7Ci0gICAgdm9pZCBz
cGVlY2hFbmRDYWxsYmFjaygpOwotICAgIHZvaWQgYXVkaW9FbmRDYWxsYmFjaygpOwotICAgIHZv
aWQgcmVzdWx0Q2FsbGJhY2soUGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4sIHVu
c2lnbmVkIGxvbmcgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKLSAgICB2b2lkIG5vTWF0Y2hDYWxsYmFjayhQYXNzUmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7Ci0gICAgdm9pZCByZXN1bHREZWxldGVkQ2Fs
bGJhY2sodW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25S
ZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKLSAgICB2b2lkIGVycm9yQ2FsbGJhY2soUGFzc1Jl
ZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yPik7Ci0gICAgdm9pZCBzdGFydENhbGxiYWNrKCk7
Ci0gICAgdm9pZCBlbmRDYWxsYmFjaygpOworICAgIHZvaWQgZGlkU3RhcnRBdWRpbygpOworICAg
IHZvaWQgZGlkU3RhcnRTb3VuZCgpOworICAgIHZvaWQgZGlkU3RhcnRTcGVlY2goKTsKKyAgICB2
b2lkIGRpZEVuZFNwZWVjaCgpOworICAgIHZvaWQgZGlkRW5kU291bmQoKTsKKyAgICB2b2lkIGRp
ZEVuZEF1ZGlvKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzdWx0KFBhc3NSZWZQdHI8U3BlZWNo
UmVjb2duaXRpb25SZXN1bHQ+LCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4LCBQYXNzUmVmUHRy
PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4gcmVzdWx0SGlzdG9yeSk7CisgICAgdm9pZCBk
aWRSZWNlaXZlTm9NYXRjaChQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Pik7Cisg
ICAgdm9pZCBkaWREZWxldGVSZXN1bHQodW5zaWduZWQgcmVzdWx0SW5kZXgsIFBhc3NSZWZQdHI8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0PiByZXN1bHRIaXN0b3J5KTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVFcnJvcihQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+KTsKKyAgICB2
b2lkIGRpZFN0YXJ0KCk7CisgICAgdm9pZCBkaWRFbmQoKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBP
VkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFJlY29nbml0aW9uQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudC5oCmluZGV4IDQ2MjU1ODA3ZjFjMTY4NjM0YzljNDBiNmZlMTE3
ZjY4YjBmMWJiZDQuLjI5YmI5ZjY2YjJjMTY0ODA0OTlhMjIwNTY1MDk5MjYwZGRlYzMzODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9u
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2du
aXRpb25DbGllbnQuaApAQCAtNDEsOCArNDEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0KFNwZWVjaFJlY29nbml0aW9uKiwgY29uc3QgU3BlZWNoR3JhbW1hckxpc3QqLCBjb25z
dCBTdHJpbmcmIGxhbmcsIGJvb2wgY29udGludW91cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
dG9wKFNwZWVjaFJlY29nbml0aW9uKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydChTcGVl
Y2hSZWNvZ25pdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVj
aFJlY29nbml0aW9uKikgPSAwOwogCiAgICAgdmlydHVhbCB+U3BlZWNoUmVjb2duaXRpb25DbGll
bnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hSZWNvZ25pdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCmluZGV4IGVmNWMxOTA3NTBlODVlMzll
NWIxY2MyNTY4MTNkYTE4NWI2ODg3MWIuLjUwYmM1YTQyZmVjZjQ4M2IwNzY2MTljZjQxYWRjMzg1
MTRkNzZlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFJlY29nbml0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFJlY29nbml0aW9uQ29udHJvbGxlci5oCkBAIC00MSw4ICs0MSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN0YXJ0KFNwZWVjaFJlY29nbml0aW9uKiByZWNvZ25pdGlvbiwgY29uc3Qg
U3BlZWNoR3JhbW1hckxpc3QqIGdyYW1tYXJzLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgY29u
dGludW91cykgeyBtX2NsaWVudC0+c3RhcnQocmVjb2duaXRpb24sIGdyYW1tYXJzLCBsYW5nLCBj
b250aW51b3VzKTsgfQogICAgIHZvaWQgc3RvcChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRp
b24pIHsgbV9jbGllbnQtPnN0b3AocmVjb2duaXRpb24pOyB9CiAgICAgdm9pZCBhYm9ydChTcGVl
Y2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pIHsgbV9jbGllbnQtPmFib3J0KHJlY29nbml0aW9u
KTsgfQotICAgIHZvaWQgdmlzaWJpbGl0eUhpZGRlbigpIHsgbV9jbGllbnQtPnZpc2liaWxpdHlI
aWRkZW4oKTsgfQotICAgIHZvaWQgdW5yZWdpc3RlclNwZWVjaFJlY29nbml0aW9uKFNwZWVjaFJl
Y29nbml0aW9uKiByZWNvZ25pdGlvbikgeyBtX2NsaWVudC0+dW5yZWdpc3RlclNwZWVjaFJlY29n
bml0aW9uKHJlY29nbml0aW9uKTsgfQogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8U3BlZWNoUmVj
b2duaXRpb25Db250cm9sbGVyPiBjcmVhdGUoU3BlZWNoUmVjb2duaXRpb25DbGllbnQqKTsKICAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzdXBwbGVtZW50TmFtZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IGUwMmEyM2NhNjExOTE2Yzk1NWFiMTlmZmUyODhiZjNjZjU5
MzQxYjMuLjJkNjNiZTJjZjhhZWM0MWFjNWY2MGZiOWU3MmU1YWQ4ODQ0YzhjMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTI0NCw5ICsyNDQsMTUgQEAKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTb2NrZXQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXRD
bGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTcGVlY2hHcmFtbWFyLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU3BlZWNoSW5wdXRMaXN0ZW5lci5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNwZWVjaElucHV0UmVzdWx0LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcy5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYlNwZWVjaFJlY29nbml6ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJT
cGVsbENoZWNrQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU3RvcmFnZUFy
ZWEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTdG9yYWdlRXZlbnREaXNwYXRjaGVy
LmgnLApAQCAtNDU2LDYgKzQ2Miw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9Tb2NrZXRTdHJl
YW1IYW5kbGVJbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1NwZWVjaElucHV0Q2xp
ZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoSW5wdXRDbGllbnRJbXBs
LmgnLAorICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eS5o
JywKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1N0b3JhZ2VBcmVhUHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9T
dG9yYWdlRXZlbnREaXNwYXRjaGVyQ2hyb21pdW0uY3BwJywKQEAgLTYzNSw3ICs2NDMsMTAgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlNvY2tldEltcGwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJTb2xpZENvbG9yTGF5ZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNv
bGlkQ29sb3JMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaEdy
YW1tYXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNwZWVjaElucHV0UmVzdWx0LmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlN0b3JhZ2VBcmVhSW1wbC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViU3RvcmFnZUFyZWFJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaEdyYW1tYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2MzNjUyM2Rk
Y2QwNjJhOTE1ZDZhZGQ0NWM3MTlmMjBjMTQ2NmViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoR3JhbW1hci5oCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaEdyYW1tYXJfaAorI2RlZmluZSBXZWJTcGVl
Y2hHcmFtbWFyX2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2luY2x1ZGUg
InBsYXRmb3JtL1dlYlByaXZhdGVQdHIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3BlZWNoR3JhbW1hcjsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaEdyYW1tYXIgeworcHVibGljOgorICAgIFdl
YlNwZWVjaEdyYW1tYXIoKSB7IH0KKyAgICB+V2ViU3BlZWNoR3JhbW1hcigpIHsgcmVzZXQoKTsg
fQorCisgICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgc3JjKCkgY29uc3Q7CisgICAgV0VCS0lUX0VY
UE9SVCBmbG9hdCB3ZWlnaHQoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNl
dCgpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViU3BlZWNoR3JhbW1hcihj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mKTsKKyAgICBXZWJT
cGVlY2hHcmFtbWFyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNw
ZWVjaEdyYW1tYXI+Jik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJQcml2YXRlUHRyPFdl
YkNvcmU6OlNwZWVjaEdyYW1tYXI+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViU3BlZWNoR3JhbW1hcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYTNjYjg1YmQyYzkzN2QxZmM1NGNhYjgwMGFhMmE2ODU5OTZlOGFhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJT
cGVlY2hSZWNvZ25pdGlvbkhhbmRsZV9oCisjZGVmaW5lIFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlX2gKKworI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3BlZWNo
UmVjb2duaXRpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdDsKK2NsYXNzIFdlYlN0cmluZzsKKworLy8gV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUgaXMgdXNlZCBieSBXZWJTcGVlY2hSZWNvZ25pemVyIHRvIGlkZW50aWZ5IGEK
Ky8vIHJlY29nbml0aW9uIHNlc3Npb24sIGFuZCBieSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50
IHRvIHJvdXRlCisvLyByZWNvZ25pdGlvbiBldmVudHMuCitjbGFzcyBXZWJTcGVlY2hSZWNvZ25p
dGlvbkhhbmRsZSB7CitwdWJsaWM6CisgICAgfldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKCkg
eyByZXNldCgpOyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUoKSB7IH0KKworICAg
IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlJiBvdGhlcikgeyBhc3NpZ24ob3RoZXIpOyB9CisgICAgV2ViU3BlZWNoUmVjb2duaXRpb25I
YW5kbGUmIG9wZXJhdG9yPShjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgb3RoZXIp
CisgICAgeworICAgICAgICBhc3NpZ24ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGFzc2lnbihjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpOworCisgICAg
Ly8gQ29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHNvIHRoYXQgV2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGUgb2JqZWN0cworICAgIC8vIGNhbiBiZSBzdG9yZWQgaW4gYSBoYXNoIG1h
cC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0
aW9uSGFuZGxlJikgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGxlc3NUaGFuKGNvbnN0
IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZShjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb24+Jik7CisgICAgV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3Bl
ZWNoUmVjb2duaXRpb24+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OlNwZWVjaFJlY29nbml0aW9uPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2Vi
UHJpdmF0ZVB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbj4gbV9wcml2YXRlOworfTsKKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
YSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGIpCit7CisgICAgcmV0dXJuIGEu
ZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlNwZWVjaFJl
Y29nbml0aW9uSGFuZGxlJiBhLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgYikK
K3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGEsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0
aW9uSGFuZGxlJiBiKQoreworICAgIHJldHVybiBhLmxlc3NUaGFuKGIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29n
bml0aW9uUGFyYW1zLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hS
ZWNvZ25pdGlvblBhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyZGNjZTA1NTQxYTkyNjFjYzBmYjliYmFm
NmNkZjc3MGIyMDE4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcy5oCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zX2gKKyNkZWZpbmUgV2Vi
U3BlZWNoUmVjb2duaXRpb25QYXJhbXNfaAorCisjaW5jbHVkZSAiV2ViU3BlZWNoR3JhbW1hci5o
IgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3BlZWNoR3JhbW1h
cjsKKworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXMgeworcHVibGljOgorICAgIFdl
YlNwZWVjaFJlY29nbml0aW9uUGFyYW1zKGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFy
PiYgZ3JhbW1hcnMsIGNvbnN0IFdlYlN0cmluZyYgbGFuZ3VhZ2UsIGJvb2wgY29udGludW91cykK
KyAgICAgICAgOiBtX2dyYW1tYXJzKGdyYW1tYXJzKQorICAgICAgICAsIG1fbGFuZ3VhZ2UobGFu
Z3VhZ2UpCisgICAgICAgICwgbV9jb250aW51b3VzKGNvbnRpbnVvdXMpCisgICAgeworICAgIH0K
KworICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTcGVlY2hHcmFtbWFyPiYgZ3JhbW1hcnMoKSBjb25z
dCB7IHJldHVybiBtX2dyYW1tYXJzOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFuZ3VhZ2U7IH0KKyAgICBib29sIGNvbnRpbnVvdXMoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRpbnVvdXM7IH0KKworcHJpdmF0ZToKKyAgICBXZWJWZWN0b3I8V2Vi
U3BlZWNoR3JhbW1hcj4gbV9ncmFtbWFyczsKKyAgICBXZWJTdHJpbmcgbV9sYW5ndWFnZTsKKyAg
ICBib29sIG1fY29udGludW91czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODk5ZjI4NTU2YmE1ZTYzOWMwMWI3NmU3MWRiZjMwNTcwNzhjZmRjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29n
bml0aW9uUmVzdWx0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHRfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dF9oCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQgeworcHVibGljOgorICAgIFdlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0KCkgeyB9CisgICAgfldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkg
eyByZXNldCgpOyB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlZl
Y3RvcjxXZWJTdHJpbmc+JiB0cmFuc2NyaXB0cywgY29uc3QgV2ViVmVjdG9yPGZsb2F0PiYgY29u
ZmlkZW5jZXMsIGJvb2wgZmluYWwpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
cmVzZXQoKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIG9wZXJhdG9yIFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4oKSBjb25zdDsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6U3BlZWNoUmVjb2du
aXRpb25SZXN1bHQ+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXplci5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXplci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0
NjE3MTY5YTI3OTI4MzRhNjRhOWE5MTRjNzg0NGQ5MDYwNTMxMTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTcGVlY2hSZWNvZ25pemVyLmgKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU3BlZWNoUmVjb2duaXplcl9oCisj
ZGVmaW5lIFdlYlNwZWVjaFJlY29nbml6ZXJfaAorCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNwZWVjaEdyYW1tYXI7CitjbGFzcyBXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OworCisvLyBJbnRlcmZhY2UgZm9yIHNwZWVjaCByZWNvZ25pdGlvbiwg
dG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGVtYmVkZGVyLgorY2xhc3MgV2ViU3BlZWNoUmVjb2du
aXplciB7CitwdWJsaWM6CisgICAgLy8gU3RhcnQgc3BlZWNoIHJlY29nbml0aW9uIGZvciB0aGUg
c3BlY2lmaWVkIGhhbmRsZSB1c2luZyB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuIE5vdGlmaWNh
dGlvbnMgb24gcHJvZ3Jlc3MsIHJlc3VsdHMsIGFuZCBlcnJvcnMgd2lsbCBiZSBzZW50IHZpYSB0
aGUgY2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBzdGFydChjb25zdCBXZWJTcGVlY2hSZWNvZ25p
dGlvbkhhbmRsZSYsIGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudCopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKKyAg
ICAvLyBTdG9wIHNwZWVjaCByZWNvZ25pdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBoYW5kbGUsIHJl
dHVybmluZyBhbnkgcmVzdWx0cyBmb3IgdGhlIGF1ZGlvIHJlY29yZGVkIHNvIGZhci4gTm90aWZp
Y2F0aW9ucyBhbmQgZXJyb3JzIGFyZSBzZW50IHZpYSB0aGUgY2xpZW50LgorICAgIHZpcnR1YWwg
dm9pZCBzdG9wKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViU3BlZWNoUmVj
b2duaXplckNsaWVudCopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKKyAgICAv
LyBBYm9ydCBzcGVlY2ggcmVjb2duaXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgaGFuZGxlLCBkaXNj
YXJkaW5nIGFueSByZWNvcmRlZCBhdWRpby4gTm90aWZpY2F0aW9ucyBhbmQgZXJyb3JzIGFyZSBz
ZW50IHZpYSB0aGUgY2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJTcGVl
Y2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSB7IFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2Vi
U3BlZWNoUmVjb2duaXplcigpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBXZWJTcGVlY2hSZWNvZ25pemVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZTdkNGJjMGEyMTM0YzRkZjMzZDIwNTkwY2FmZjViZjYyODlhN2Y4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnRfaAorI2RlZmluZSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50X2gKKworI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlv
bkhhbmRsZTsKK2NsYXNzIFdlYlN0cmluZzsKKworLy8gQSBjbGllbnQgZm9yIHJlcG9ydGluZyBw
cm9ncmVzcyBvbiBzcGVlY2ggcmVjb2duaXRpb24gZm9yIGEgc3BlY2lmaWMgaGFuZGxlLgorY2xh
c3MgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgbWV0
aG9kcyBjb3JyZXNwb25kIHRvIHRoZSBldmVudHMgZGVzY3JpYmVkIGluIHRoZSBzcGVjOgorICAg
IC8vIGh0dHA6Ly9zcGVlY2gtamF2YXNjcmlwdC1hcGktc3BlYy5nb29nbGVjb2RlLmNvbS9naXQv
c3BlZWNoYXBpLmh0bWwjc3BlZWNocmVjby1ldmVudHMKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3
aGVuIHRoZSBlbWJlZGRlciBoYXMgc3RhcnRlZCB0byBjYXB0dXJlIGF1ZGlvLgorICAgIHZpcnR1
YWwgdm9pZCBkaWRTdGFydEF1ZGlvKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikg
PSAwOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gc29tZSBzb3VuZCwgcG9zc2libHkgc3Bl
ZWNoLCBoYXMgYmVlbiBkZXRlY3RlZC4KKyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGNh
bGxlZCBhZnRlciBkaWRTdGFydEF1ZGlvLgorICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNvdW5k
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgPSAwOworCisgICAgLy8gVG8gYmUg
Y2FsbGVkIHdoZW4gc3BlZWNoIGhhcyBiZWVuIGRldGVjdGVkLgorICAgIC8vIFRoaXMgaXMgZXhw
ZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZFN0YXJ0U291bmQuCisgICAgdmlydHVhbCB2b2lk
IGRpZFN0YXJ0U3BlZWNoKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgPSAwOwor
CisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gc3BlZWNoIGlzIG5vIGxvbmdlciBkZXRlY3RlZC4K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kU3BlZWNoKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9u
SGFuZGxlJikgPSAwOworCisgICAgLy8gVG8gYmUgY2FsbGVkIHdoZW4gc291bmQgaXMgbm8gbG9u
Z2VyIGRldGVjdGVkLgorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFmdGVy
IGRpZEVuZFNwZWVjaC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kU291bmQoY29uc3QgV2ViU3Bl
ZWNoUmVjb2duaXRpb25IYW5kbGUmKSA9IDA7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiBh
dWRpbyBjYXB0dXJlIGhhcyBzdG9wcGVkLgorICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUg
Y2FsbGVkIGFmdGVyIGRpZEVuZFNvdW5kLgorICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRBdWRpbyhj
b25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpID0gMDsKKworICAgIC8vIFRvIGJlIGNh
bGxlZCB3aGVuIHRoZSBzcGVlY2ggcmVjb2duaXplciByZXR1cm5zIGEgcmVzdWx0LgorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzdWx0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlJiwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmLCB1bnNpZ25lZCBsb25nIHJl
c3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiBy
ZXN1bHRIaXN0b3J5KSA9IDA7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgc3BlZWNo
IHJlY29nbml6ZXIgcmV0dXJucyBhIGZpbmFsIHJlc3VsdCB3aXRoIG5vCisgICAgLy8gcmVjb2du
aXppb24gaHlwb3RoZXNpcy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU5vTWF0Y2goY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlv
blJlc3VsdCYpID0gMDsKKworICAgIC8vIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZWNvZ25pemVy
IG5lZWRzIHRvIGRlbGV0ZSBvbmUgb2YgdGhlIHByZXZpb3VzbHkKKyAgICAvLyByZXR1cm5lZCBp
bnRlcmltIHJlc3VsdHMuCisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZVJlc3VsdChjb25zdCBX
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIHVuc2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBX
ZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KSA9IDA7
CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiBhIHNwZWVjaCByZWNvZ25pdGlvbiBlcnJvciBv
Y2N1cnMuCisgICAgLy8gRklYTUU6IEludHJvZHVjZSBhbiBlbnVtIGZvciB0aGUgZXJyb3IgY29k
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUVycm9yKGNvbnN0IFdlYlNwZWVjaFJlY29n
bml0aW9uSGFuZGxlJiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCBj
b2RlKSA9IDA7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUgcmVjb2duaXplciBoYXMg
YmVndW4gdG8gbGlzdGVuIHRvIHRoZSBhdWRpbyB3aXRoCisgICAgLy8gdGhlIGludGVudGlvbiBv
ZiByZWNvZ25pemluZy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoY29uc3QgV2ViU3BlZWNo
UmVjb2duaXRpb25IYW5kbGUmKSA9IDA7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgd2hlbiB0aGUg
cmVjb2duaXRpb24gc2Vzc2lvbiBoYXMgZW5kZWQuIFRoaXMgbXVzdCBhbHdheXMgYmUKKyAgICAv
LyBjYWxsZWQsIG5vIG1hdHRlciB0aGUgcmVhc29uIGZvciB0aGUgZW5kLgorICAgIHZpcnR1YWwg
dm9pZCBkaWRFbmQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
d0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5o
CmluZGV4IGYyOTAzM2M3MjM4MDA1YzVlZDcyZGFjMzFiODE4OWFhZDQ4MzM4MTcuLmI4ZmU5ZDBj
NWY2MTUzNjE5MjFjNzEwNWFhMGUwMDUwOWQyYzY2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3Q2xpZW50LmgKQEAgLTY4LDYgKzY4LDcgQEAgY2xhc3MgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgV2ViUmFuZ2U7CiBjbGFzcyBXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOworY2xhc3MgV2Vi
U3BlZWNoUmVjb2duaXplcjsKIGNsYXNzIFdlYlN0b3JhZ2VOYW1lc3BhY2U7CiBjbGFzcyBXZWJV
Ukw7CiBjbGFzcyBXZWJVUkxSZXF1ZXN0OwpAQCAtMzE2LDYgKzMxNyw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFdlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250cm9sbGVy
KAogICAgICAgICBXZWJTcGVlY2hJbnB1dExpc3RlbmVyKikgeyByZXR1cm4gMDsgfQogCisgICAg
Ly8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIHNwZWVjaCByZWNvZ25pdGlvbiBzZXJ2aWNl
cy4KKyAgICB2aXJ0dWFsIFdlYlNwZWVjaFJlY29nbml6ZXIqIHNwZWVjaFJlY29nbml6ZXIoKSB7
IHJldHVybiAwOyB9CisKICAgICAvLyBEZXZpY2UgT3JpZW50YXRpb24gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIEFjY2VzcyB0aGUg
ZW1iZWRkZXIgQVBJIGZvciBkZXZpY2Ugb3JpZW50YXRpb24gc2VydmljZXMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50
UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNTg2Y2UyNjdkMTQ4MWExM2IwNDM0OGJmNmNmNjhhNTdj
NjExMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5LmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5LmgiCisKKyNpbmNsdWRlICJTcGVlY2hHcmFtbWFyTGlzdC5oIgorI2luY2x1ZGUgIlNwZWVj
aFJlY29nbml0aW9uLmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25FcnJvci5oIgorI2lu
Y2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiU3BlZWNoUmVjb2du
aXRpb25SZXN1bHRMaXN0LmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoR3JhbW1hci5oIgorI2luY2x1
ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXRpb25QYXJhbXMuaCIKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5o
IgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eTo6flNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoKQoreworfQorCitQYXNzT3duUHRy
PFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+IFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OmNyZWF0ZShXZWJTcGVlY2hSZWNvZ25pemVyKiByZWNvZ25pemVyKQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eShyZWNvZ25pemVyKSk7
Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6c3RhcnQoU3BlZWNoUmVj
b2duaXRpb24qIHJlY29nbml0aW9uLCBjb25zdCBTcGVlY2hHcmFtbWFyTGlzdCogZ3JhbW1hckxp
c3QsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKQoreworICAgIFdlYlZlY3Rv
cjxXZWJTcGVlY2hHcmFtbWFyPiB3ZWJTcGVlY2hHcmFtbWFycyhncmFtbWFyTGlzdC0+bGVuZ3Ro
KCkpOworICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGdyYW1tYXJMaXN0LT5sZW5n
dGgoKTsgKytpKQorICAgICAgICB3ZWJTcGVlY2hHcmFtbWFyc1tpXSA9IGdyYW1tYXJMaXN0LT5p
dGVtKGkpOworCisgICAgbV9yZWNvZ25pemVyLT5zdGFydChXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZShyZWNvZ25pdGlvbiksIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zKHdlYlNwZWVjaEdy
YW1tYXJzLCBsYW5nLCBjb250aW51b3VzKSwgdGhpcyk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6c3RvcChTcGVlY2hSZWNvZ25pdGlvbiogcmVjb2duaXRpb24pCit7
CisgICAgbV9yZWNvZ25pemVyLT5zdG9wKFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKHJlY29n
bml0aW9uKSwgdGhpcyk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6
YWJvcnQoU3BlZWNoUmVjb2duaXRpb24qIHJlY29nbml0aW9uKQoreworICAgIG1fcmVjb2duaXpl
ci0+YWJvcnQoV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUocmVjb2duaXRpb24pLCB0aGlzKTsK
K30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRTdGFydEF1ZGlvKGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNw
ZWVjaFJlY29nbml0aW9uPiByZWNvZ25pdGlvbiA9IHN0YXRpY19jYXN0PFBhc3NSZWZQdHI8U3Bl
ZWNoUmVjb2duaXRpb24+ID4oaGFuZGxlKTsKKyAgICByZWNvZ25pdGlvbi0+ZGlkU3RhcnRBdWRp
bygpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6OmRpZFN0YXJ0U291
bmQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0
cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAgIHJlY29nbml0aW9uLT5kaWRTdGFy
dFNvdW5kKCk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkU3Rh
cnRTcGVlY2goY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSkKK3sKKyAg
ICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8UGFz
c1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAgIHJlY29nbml0aW9uLT5k
aWRTdGFydFNwZWVjaCgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk6
OmRpZEVuZFNwZWVjaChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlKQor
eworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBzdGF0aWNfY2Fz
dDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisgICAgcmVjb2duaXRp
b24tPmRpZEVuZFNwZWVjaCgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJv
eHk6OmRpZEVuZFNvdW5kKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUp
Cit7CisgICAgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiByZWNvZ25pdGlvbiA9IHN0YXRpY19j
YXN0PFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+ID4oaGFuZGxlKTsKKyAgICByZWNvZ25p
dGlvbi0+ZGlkRW5kU291bmQoKTsKK30KKwordm9pZCBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFBy
b3h5OjpkaWRFbmRBdWRpbyhjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxl
KQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBzdGF0aWNf
Y2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisgICAgcmVjb2du
aXRpb24tPmRpZEVuZEF1ZGlvKCk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQ
cm94eTo6ZGlkUmVjZWl2ZVJlc3VsdChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
aGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBsb25nIHJlc3VsdEluZGV4LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4g
cmVjb2duaXRpb24gPSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+
KGhhbmRsZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+
IHJlc3VsdEhpc3RvcnlWZWN0b3IocmVzdWx0SGlzdG9yeS5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVzdWx0SGlzdG9yeS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0
SGlzdG9yeVZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5W2ldKSk7CisKKyAgICByZWNvZ25pdGlvbi0+ZGlk
UmVjZWl2ZVJlc3VsdChyZXN1bHQsIHJlc3VsdEluZGV4LCBTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7CisKK30KKwordm9pZCBTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5OjpkaWRSZWNlaXZlTm9NYXRjaChjb25zdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dCYgcmVzdWx0KQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24g
PSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7Cisg
ICAgcmVjb2duaXRpb24tPmRpZFJlY2VpdmVOb01hdGNoKHJlc3VsdCk7Cit9CisKK3ZvaWQgU3Bl
ZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkRGVsZXRlUmVzdWx0KGNvbnN0IFdlYlNwZWVj
aFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUsIHVuc2lnbmVkIHJlc3VsdEluZGV4LCBjb25zdCBX
ZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0b3J5KQorewor
ICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBzdGF0aWNfY2FzdDxQ
YXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisKKyAgICBWZWN0b3I8UmVm
UHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiA+IHJlc3VsdEhpc3RvcnlWZWN0b3IocmVzdWx0
SGlzdG9yeS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0SGlzdG9y
eS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0SGlzdG9yeVZlY3Rvci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gPihyZXN1bHRIaXN0b3J5
W2ldKSk7CisKKyAgICByZWNvZ25pdGlvbi0+ZGlkRGVsZXRlUmVzdWx0KHJlc3VsdEluZGV4LCBT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OmNyZWF0ZShyZXN1bHRIaXN0b3J5VmVjdG9yKSk7
Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eTo6ZGlkUmVjZWl2ZUVycm9y
KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUsIGNvbnN0IFdlYlN0cmlu
ZyYgbWVzc2FnZSwgdW5zaWduZWQgc2hvcnQgY29kZSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVj
b2duaXRpb24+IHJlY29nbml0aW9uID0gc3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvbj4gPihoYW5kbGUpOworICAgIFNwZWVjaFJlY29nbml0aW9uRXJyb3I6OkNvZGUgZXJy
b3JDb2RlID0gc3RhdGljX2Nhc3Q8U3BlZWNoUmVjb2duaXRpb25FcnJvcjo6Q29kZT4oY29kZSk7
CisgICAgcmVjb2duaXRpb24tPmRpZFJlY2VpdmVFcnJvcihTcGVlY2hSZWNvZ25pdGlvbkVycm9y
OjpjcmVhdGUoZXJyb3JDb2RlLCBtZXNzYWdlKSk7Cit9CisKK3ZvaWQgU3BlZWNoUmVjb2duaXRp
b25DbGllbnRQcm94eTo6ZGlkU3RhcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+IHJlY29nbml0aW9uID0g
c3RhdGljX2Nhc3Q8UGFzc1JlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gPihoYW5kbGUpOworICAg
IHJlY29nbml0aW9uLT5kaWRTdGFydCgpOworfQorCit2b2lkIFNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk6OmRpZEVuZChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxl
KQoreworICAgIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvbj4gcmVjb2duaXRpb24gPSBzdGF0aWNf
Y2FzdDxQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uPiA+KGhhbmRsZSk7CisgICAgcmVjb2du
aXRpb24tPmRpZEVuZCgpOworfQorCitTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5OjpTcGVl
Y2hSZWNvZ25pdGlvbkNsaWVudFByb3h5KFdlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIp
CisgICAgOiBtX3JlY29nbml6ZXIocmVjb2duaXplcikKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hSZWNv
Z25pdGlvbkNsaWVudFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM1NTQxZWE0NmU3ODFmMjc1MzA5
NzEzYTg3ZWY1MzgwOTVkYTZiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1NwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkuaApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTcGVlY2hSZWNvZ25pdGlvbkNsaWVudFByb3h5X2gKKyNkZWZp
bmUgU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94eV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQ2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJTcGVlY2hSZWNvZ25pemVyOworY2xhc3MgV2ViU3RyaW5nOworCitjbGFzcyBTcGVlY2hS
ZWNvZ25pdGlvbkNsaWVudFByb3h5IDogcHVibGljIFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9u
Q2xpZW50LCBwdWJsaWMgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCB7CitwdWJsaWM6CisgICAg
flNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoKTsKKworICAgIC8vIENvbnN0cnVjdGluZyBh
IHByb3h5IG9iamVjdCB3aXRoIGEgMCBXZWJTcGVlY2hSZWNvZ25pemVyIGlzIHNhZmUgaW4KKyAg
ICAvLyBpdHNlbGYsIGJ1dCBhdHRlbXB0aW5nIHRvIGNhbGwgc3RhcnQvc3RvcC9hYm9ydCBvbiBp
dCB3aWxsIGNyYXNoLgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNwZWVjaFJlY29nbml0aW9uQ2xp
ZW50UHJveHk+IGNyZWF0ZShXZWJTcGVlY2hSZWNvZ25pemVyKik7CisKKyAgICAvLyBXZWJDb3Jl
OjpTcGVlY2hSZWNvZ25pdGlvbkNsaWVudDoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoV2ViQ29y
ZTo6U3BlZWNoUmVjb2duaXRpb24qLCBjb25zdCBXZWJDb3JlOjpTcGVlY2hHcmFtbWFyTGlzdCos
IGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBjb250aW51b3VzKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBhYm9ydChXZWJDb3JlOjpTcGVlY2hSZWNvZ25pdGlvbiopIE9WRVJSSURF
OworCisgICAgLy8gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDoKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3RhcnRBdWRpbyhjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNvdW5kKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0
aW9uSGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0U3BlZWNoKGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRpZEVuZFNwZWVjaChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRTb3VuZChjb25zdCBXZWJTcGVlY2hSZWNvZ25p
dGlvbkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRBdWRpbyhjb25z
dCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlUmVzdWx0KGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQmLCB1bnNpZ25lZCBsb25nIHJlc3VsdEluZGV4
LCBjb25zdCBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JiByZXN1bHRIaXN0
b3J5KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU5vTWF0Y2goY29uc3Qg
V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWREZWxldGVSZXN1bHQoY29uc3Qg
V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCB1bnNpZ25lZCByZXN1bHRJbmRleCwgY29uc3Qg
V2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PiYgcmVzdWx0SGlzdG9yeSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVFcnJvcihjb25zdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgc2hv
cnQgY29kZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KGNvbnN0IFdlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZEVu
ZChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpIE9WRVJSSURFOworCitwcml2YXRl
OgorICAgIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHkoV2ViU3BlZWNoUmVjb2duaXplciop
OworCisgICAgV2ViU3BlZWNoUmVjb2duaXplciogbV9yZWNvZ25pemVyOworfTsKKworfTsgLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU3BlZWNoUmVjb2duaXRpb25DbGllbnRQcm94
eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFt
bWFyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaEdyYW1tYXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIyODUwOWRlOGI2YTM3ZWI5NmNjZTA3ZmNiNWViNjg1ODdiYzZkNTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTcGVlY2hHcmFt
bWFyLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlNwZWVjaEdyYW1tYXIuaCIKKworI2luY2x1ZGUgIlNwZWVjaEdyYW1tYXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBXZWJTcGVlY2hHcmFtbWFyOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KCk7
Cit9CisKK1dlYlNwZWVjaEdyYW1tYXI6OldlYlNwZWVjaEdyYW1tYXIoY29uc3QgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTcGVlY2hHcmFtbWFyPiYgdmFsdWUpCisgICAgOiBtX3ByaXZhdGUodmFsdWUp
Cit7Cit9CisKK1dlYlNwZWVjaEdyYW1tYXImIFdlYlNwZWVjaEdyYW1tYXI6Om9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U3BlZWNoR3JhbW1hcj4mIHZhbHVlKQorewor
ICAgIG1fcHJpdmF0ZSA9IHZhbHVlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViVVJMIFdl
YlNwZWVjaEdyYW1tYXI6OnNyYygpIGNvbnN0Cit7CisgICAgV0VCS0lUX0FTU0VSVChtX3ByaXZh
dGUuZ2V0KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnNyYygpOworfQorCitmbG9hdCBXZWJT
cGVlY2hHcmFtbWFyOjp3ZWlnaHQoKSBjb25zdAoreworICAgIFdFQktJVF9BU1NFUlQobV9wcml2
YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWlnaHQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU1NTY3M2MyMGNk
YTc2ZTdmM2MyNjQ2MzQzMDg0ZWRkZTU0YjdhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlLmNwcApAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlLmgiCisKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvbi5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUu
cmVzZXQoKTsKK30KKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTo6YXNzaWduKGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUg
PSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK2Jvb2wgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGU6
OmVxdWFscyhjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtX3ByaXZhdGUuZ2V0KCkgPT0gb3RoZXIubV9wcml2YXRlLmdldCgpKTsK
K30KKworYm9vbCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTo6bGVzc1RoYW4oY29uc3QgV2Vi
U3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAobV9w
cml2YXRlLmdldCgpIDwgb3RoZXIubV9wcml2YXRlLmdldCgpKTsKK30KKworV2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGU6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlKGNvbnN0IFBhc3NSZWZQ
dHI8U3BlZWNoUmVjb2duaXRpb24+JiBzcGVlY2hSZWNvZ25pdGlvbikKKyAgICA6IG1fcHJpdmF0
ZShzcGVlY2hSZWNvZ25pdGlvbikKK3sKK30KKworV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUm
IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxT
cGVlY2hSZWNvZ25pdGlvbj4mIHNwZWVjaFJlY29nbml0aW9uKQoreworICAgIG1fcHJpdmF0ZSA9
IHNwZWVjaFJlY29nbml0aW9uOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViU3BlZWNoUmVj
b2duaXRpb25IYW5kbGU6Om9wZXJhdG9yIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb24+KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNwZWVj
aFJlY29nbml0aW9uUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTc3OGRkZDVkZjBhOWJjMDQw
NWZiM2M2MTFhZGM0ZTkxZDRmYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuY3BwCkBAIC0wLDAgKzEsNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQuaCIKKworI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRp
dmUuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKwordm9pZCBXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6YXNzaWduKGNvbnN0IFdl
YlNwZWVjaFJlY29nbml0aW9uUmVzdWx0JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhl
ci5tX3ByaXZhdGU7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6OmFzc2ln
bihjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgdHJhbnNjcmlwdHMsIGNvbnN0IFdlYlZlY3Rv
cjxmbG9hdD4mIGNvbmZpZGVuY2VzLCBib29sIGZpbmFsKQoreworICAgIEFTU0VSVCh0cmFuc2Ny
aXB0cy5zaXplKCkgPT0gY29uZmlkZW5jZXMuc2l6ZSgpKTsKKworICAgIFZlY3RvcjxSZWZQdHI8
V2ViQ29yZTo6U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZT4gPiBhbHRlcm5hdGl2ZXModHJh
bnNjcmlwdHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zY3JpcHRz
LnNpemUoKTsgKytpKQorICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFdlYkNvcmU6OlNwZWVj
aFJlY29nbml0aW9uQWx0ZXJuYXRpdmU6OmNyZWF0ZSh0cmFuc2NyaXB0c1tpXSwgY29uZmlkZW5j
ZXNbaV0pKTsKKworICAgIG1fcHJpdmF0ZSA9IFdlYkNvcmU6OlNwZWVjaFJlY29nbml0aW9uUmVz
dWx0OjpjcmVhdGUoYWx0ZXJuYXRpdmVzLCBmaW5hbCk7Cit9CisKK3ZvaWQgV2ViU3BlZWNoUmVj
b2duaXRpb25SZXN1bHQ6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwor
V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBmOTA2ZDBkMDhhYzVhMDI4NjQ0YzAyMzMzMTVi
M2RlYzk3MjljMzA1Li5mNmU4NGQ4MGJhMGQ3NGIwMDI0YjhiYmY4ZWM1NmEwZmU2ZDczMTcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMDcsNyAr
MTA3LDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiU3BlZWNoSW5wdXRDbGllbnRJbXBsLmgiCi0jaW5jbHVk
ZSAiU3BlZWNoUmVjb2duaXRpb25DbGllbnQuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlv
bkNsaWVudFByb3h5LmgiCiAjaW5jbHVkZSAiVGV4dEZpZWxkRGVjb3JhdG9ySW1wbC5oIgogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0zNzksNiArMzc5
LDkgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICNp
ZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgICwgbV9zcGVlY2hJbnB1dENsaWVudChTcGVlY2hJ
bnB1dENsaWVudEltcGw6OmNyZWF0ZShjbGllbnQpKQogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKKyAgICAsIG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQoU3BlZWNoUmVjb2du
aXRpb25DbGllbnRQcm94eTo6Y3JlYXRlKGNsaWVudCA/IGNsaWVudC0+c3BlZWNoUmVjb2duaXpl
cigpIDogMCkpCisjZW5kaWYKICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShh
ZG9wdFB0cihuZXcgRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eShjbGllbnQgPyBjbGllbnQt
PmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkgOiAwKSkpCiAgICAgLCBtX2dlb2xvY2F0aW9uQ2xp
ZW50UHJveHkoYWRvcHRQdHIobmV3IEdlb2xvY2F0aW9uQ2xpZW50UHJveHkoY2xpZW50ID8gY2xp
ZW50LT5nZW9sb2NhdGlvbkNsaWVudCgpIDogMCkpKQogICAgICwgbV9lbXVsYXRlZFRleHRab29t
RmFjdG9yKDEpCkBAIC00MTIsNyArNDE1LDcgQEAgV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdl
YlZpZXdDbGllbnQqIGNsaWVudCkKICAgICBwcm92aWRlU3BlZWNoSW5wdXRUbyhtX3BhZ2UuZ2V0
KCksIG1fc3BlZWNoSW5wdXRDbGllbnQuZ2V0KCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKLSAgICBwcm92aWRlU3BlZWNoUmVjb2duaXRpb25UbyhtX3BhZ2UuZ2V0KCks
IDApOyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgaW1wbGVtZW50YXRpb24uCisgICAgcHJvdmlk
ZVNwZWVjaFJlY29nbml0aW9uVG8obV9wYWdlLmdldCgpLCBtX3NwZWVjaFJlY29nbml0aW9uQ2xp
ZW50LmdldCgpKTsKICNlbmRpZgogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUo
TEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgcHJvdmlkZU5vdGlmaWNhdGlvbihtX3BhZ2UuZ2V0
KCksIG5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAppbmRleCA3Zjc3ZGVjYjM3YTIwOTA2YTBhMDhhOGNkZjBjN2Q0ZmM4
ODYxMmFjLi44MDBlNTExZGM0NTFiZjUxYzcxNTcyYmM5YjkxMjIyODAwZDI2NDRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTg2LDYgKzg2LDcgQEAgY2xh
c3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3MgR2VvbG9jYXRpb25DbGllbnRQcm94eTsKIGNsYXNz
IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsKIGNsYXNzIFNwZWVjaElucHV0Q2xpZW50SW1wbDsK
K2NsYXNzIFNwZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk7CiBjbGFzcyBVc2VyTWVkaWFDbGll
bnRJbXBsOwogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkNvbXBvc2l0
b3JJbXBsOwpAQCAtNzM3LDYgKzczOCwxMCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTlBVVF9T
UEVFQ0gpCiAgICAgT3duUHRyPFNwZWVjaElucHV0Q2xpZW50SW1wbD4gbV9zcGVlY2hJbnB1dENs
aWVudDsKICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgT3duUHRyPFNw
ZWVjaFJlY29nbml0aW9uQ2xpZW50UHJveHk+IG1fc3BlZWNoUmVjb2duaXRpb25DbGllbnQ7Cisj
ZW5kaWYKKwogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFw
aGljc0NvbnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJu
ZWQgb24sIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1i
ZXIgaG9sZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBjYXNlLgo=
</data>
<flag name="review"
          id="139782"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="139813"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>