<?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>36535</bug_id>
          
          <creation_ts>2010-03-24 08:27:01 -0700</creation_ts>
          <short_desc>[chromium] Rename / tidy up Geolocation bridge</short_desc>
          <delta_ts>2010-03-30 12:51:47 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Marcus Bulach">bulach</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bulach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fishd</cc>
    
    <cc>jorlow</cc>
    
    <cc>joth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>203415</commentid>
    <comment_count>0</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-24 08:27:01 -0700</bug_when>
    <thetext>Follow up on Darin&apos;s comments on:
https://bugs.webkit.org/show_bug.cgi?id=32068

Summary:
+ Rename GeolocationServiceBridgeChromium.cpp to WebGeolocationServiceBridgeImpl.cpp
+ Removes Interface suffix
+ Separates classes in their own files
+ Uses a struct for geoposition instead of individual params</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203418</commentid>
    <comment_count>1</comment_count>
      <attachid>51500</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-24 08:37:20 -0700</bug_when>
    <thetext>Created attachment 51500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203421</commentid>
    <comment_count>2</comment_count>
      <attachid>51502</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-24 08:43:29 -0700</bug_when>
    <thetext>Created attachment 51502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203435</commentid>
    <comment_count>3</comment_count>
      <attachid>51508</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-24 09:05:46 -0700</bug_when>
    <thetext>Created attachment 51508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203492</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-24 10:55:20 -0700</bug_when>
    <thetext>The change log needs to be more detailed.  Add a fixme explaining that GeolocationServiceBridgeChromium.h should go away.  And in the change log, explain how the GeolocationServiceBridgeChromium.h is just a compat layer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203526</commentid>
    <comment_count>5</comment_count>
      <attachid>51508</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-24 12:03:25 -0700</bug_when>
    <thetext>Comment on attachment 51508
Patch

&gt; Index: WebKit/chromium/public/GeolocationServiceBridgeChromium.h
&gt; ===================================================================
&gt; --- WebKit/chromium/public/GeolocationServiceBridgeChromium.h	(revision 56438)
&gt; +++ WebKit/chromium/public/GeolocationServiceBridgeChromium.h	(working copy)
&gt; @@ -31,43 +31,15 @@
&gt;  #ifndef GeolocationServiceBridgeChromium_h
&gt;  #define GeolocationServiceBridgeChromium_h
&gt;  
&gt; -namespace WebCore {
&gt; -class GeolocationServiceBridge;
&gt; -class GeolocationServiceChromium;
&gt; -}
&gt; +#include &quot;WebGeolocationService.h&quot;
&gt;  
&gt;  namespace WebKit {
&gt;  
&gt; -class WebString;
&gt; -class WebURL;
&gt; -
&gt; -// Provides a WebKit API called by the embedder.
&gt; -class WebGeolocationServiceBridge {
&gt; -public:
&gt; -    virtual void setIsAllowed(bool allowed) = 0;
&gt; -    virtual void setLastPosition(double latitude, double longitude, bool providesAltitude, double altitude, double accuracy, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed, long long timestamp) = 0;
&gt; -    virtual void setLastError(int errorCode, const WebString&amp; message) = 0;
&gt; -};
&gt; -
&gt; -// Provides an embedder API called by WebKit.
&gt; -class WebGeolocationServiceInterface {
&gt; -public:
&gt; -    virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt; -    virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; -    virtual void stopUpdating(int bridgeId) = 0;
&gt; -    virtual void suspend(int bridgeId) = 0;
&gt; -    virtual void resume(int bridgeId) = 0;
&gt; -
&gt; -    // Attaches the GeolocationBridge to the embedder and returns its id, which
&gt; -    // should be used on subsequent calls for the methods above.
&gt; -    virtual int attachBridge(WebKit::WebGeolocationServiceBridge* geolocationServiceBridge) = 0;
&gt; -
&gt; -    // Dettaches the GeolocationService from the embedder.
&gt; -    virtual void dettachBridge(int bridgeId) = 0;
&gt; +// TODO(bulach): remove this file, this is a temporary compatibility layer for

s/TODO(bulach)/FIXME/

&gt; +// renaming WebGeolocationServiceInterface to WebGeolocationService.
&gt; +class WebGeolocationServiceInterface : public WebGeolocationService {
&gt;  };
&gt;  
&gt; -WebCore::GeolocationServiceBridge* createGeolocationServiceBridgeImpl(WebCore::GeolocationServiceChromium*);
&gt; -
&gt;  } // namespace WebKit
&gt;  
&gt;  #endif // GeolocationServiceBridgeChromium_h



&gt; Index: WebKit/chromium/public/WebGeolocationServiceBridge.h
&gt; ===================================================================
&gt; --- WebKit/chromium/public/WebGeolocationServiceBridge.h	(revision 56438)
&gt; +++ WebKit/chromium/public/WebGeolocationServiceBridge.h	(working copy)
&gt; @@ -28,8 +28,8 @@
&gt;   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;   */
&gt;  
&gt; -#ifndef GeolocationServiceBridgeChromium_h
&gt; -#define GeolocationServiceBridgeChromium_h
&gt; +#ifndef WebGeolocationServiceBridge_h
&gt; +#define WebGeolocationServiceBridge_h
&gt;  
&gt;  namespace WebCore {
&gt;  class GeolocationServiceBridge;
&gt; @@ -44,30 +44,27 @@ class WebURL;
&gt;  // Provides a WebKit API called by the embedder.
&gt;  class WebGeolocationServiceBridge {
&gt;  public:
&gt; +    struct WebGeoposition {
&gt; +      double latitude;
&gt; +      double longitude;
&gt; +      bool providesAltitude;
&gt; +      double altitude;
&gt; +      double accuracy;
&gt; +      bool providesAltitudeAccuracy;
&gt; +      double altitudeAccuracy;
&gt; +      bool providesHeading;
&gt; +      double heading;
&gt; +      bool providesSpeed;
&gt; +      double speed;
&gt; +      long long timestamp;
&gt; +    };
&gt;      virtual void setIsAllowed(bool allowed) = 0;
&gt; +    virtual void setLastPosition(const WebGeoposition&amp; geoposition) = 0;
&gt; +    // TODO(bulach): remove this method.
&gt;      virtual void setLastPosition(double latitude, double longitude, bool providesAltitude, double altitude, double accuracy, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed, long long timestamp) = 0;
&gt;      virtual void setLastError(int errorCode, const WebString&amp; message) = 0;

Don&apos;t these need to be hooked up to each other (i.e. call each other) to keep things working?


&gt; Index: WebKit/chromium/public/WebViewClient.h
&gt; ===================================================================
&gt; --- WebKit/chromium/public/WebViewClient.h	(revision 56438)
&gt; +++ WebKit/chromium/public/WebViewClient.h	(working copy)
&gt; @@ -31,6 +31,7 @@
&gt;  #ifndef WebViewClient_h
&gt;  #define WebViewClient_h
&gt;  
&gt; +#include &quot;GeolocationServiceBridgeChromium.h&quot;

Er...shouldn&apos;t you use the new name?

&gt;  #include &quot;WebDragOperation.h&quot;
&gt;  #include &quot;WebEditingAction.h&quot;
&gt;  #include &quot;WebFileChooserCompletion.h&quot;
&gt; @@ -46,7 +47,6 @@ class WebAccessibilityObject;
&gt;  class WebDragData;
&gt;  class WebFileChooserCompletion;
&gt;  class WebFrame;
&gt; -class WebGeolocationServiceInterface;
&gt;  class WebNode;
&gt;  class WebNotificationPresenter;
&gt;  class WebRange;
&gt; @@ -288,6 +288,9 @@ public:
&gt;      // Geolocation ---------------------------------------------------------
&gt;  
&gt;      // Access the embedder API for geolocation services.
&gt; +    virtual WebKit::WebGeolocationService* geolocationService() { return getGeolocationService(); }
&gt; +
&gt; +    // TODO(bulach): this is a temporary compatibility layer, remove it.
&gt;      virtual WebKit::WebGeolocationServiceInterface* getGeolocationService() { return 0; }

This should return a geolocation service as well.  No need to break things in the middle.



&gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h
&gt; ===================================================================
&gt; --- WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h	(revision 56438)
&gt; +++ WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h	(working copy)
&gt; @@ -28,8 +28,8 @@
&gt;   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;   */
&gt;  
&gt; -#ifndef GeolocationServiceBridgeChromium_h
&gt; -#define GeolocationServiceBridgeChromium_h
&gt; +#ifndef WebGeolocationServiceBridgeImpl_h
&gt; +#define WebGeolocationServiceBridgeImpl_h
&gt;  
&gt;  namespace WebCore {
&gt;  class GeolocationServiceBridge;
&gt; @@ -37,37 +37,10 @@ class GeolocationServiceChromium;
&gt;  }
&gt;  
&gt;  namespace WebKit {
&gt; -
&gt; -class WebString;
&gt; -class WebURL;
&gt; -
&gt; -// Provides a WebKit API called by the embedder.
&gt; -class WebGeolocationServiceBridge {
&gt; -public:
&gt; -    virtual void setIsAllowed(bool allowed) = 0;
&gt; -    virtual void setLastPosition(double latitude, double longitude, bool providesAltitude, double altitude, double accuracy, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed, long long timestamp) = 0;
&gt; -    virtual void setLastError(int errorCode, const WebString&amp; message) = 0;
&gt; -};
&gt; -
&gt; -// Provides an embedder API called by WebKit.
&gt; -class WebGeolocationServiceInterface {
&gt; -public:
&gt; -    virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt; -    virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; -    virtual void stopUpdating(int bridgeId) = 0;
&gt; -    virtual void suspend(int bridgeId) = 0;
&gt; -    virtual void resume(int bridgeId) = 0;
&gt; -
&gt; -    // Attaches the GeolocationBridge to the embedder and returns its id, which
&gt; -    // should be used on subsequent calls for the methods above.
&gt; -    virtual int attachBridge(WebKit::WebGeolocationServiceBridge* geolocationServiceBridge) = 0;
&gt; -
&gt; -    // Dettaches the GeolocationService from the embedder.
&gt; -    virtual void dettachBridge(int bridgeId) = 0;
&gt; -};
&gt; -
&gt; +#if WEBKIT_IMPLEMENTATION
&gt;  WebCore::GeolocationServiceBridge* createGeolocationServiceBridgeImpl(WebCore::GeolocationServiceChromium*);
&gt; +#endif

Is this the only thing left in the file?  If so, why does it need to be in public?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204022</commentid>
    <comment_count>6</comment_count>
      <attachid>51632</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-25 06:52:43 -0700</bug_when>
    <thetext>Created attachment 51632
Jorlow comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204026</commentid>
    <comment_count>7</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-25 07:01:16 -0700</bug_when>
    <thetext>Thanks Jeremy!

Replies and clarifications inline, another look please?

(In reply to comment #5)
&gt; (From update of attachment 51508 [details])
&gt; &gt; Index: WebKit/chromium/public/GeolocationServiceBridgeChromium.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebKit/chromium/public/GeolocationServiceBridgeChromium.h	(revision 56438)
&gt; &gt; +++ WebKit/chromium/public/GeolocationServiceBridgeChromium.h	(working copy)
&gt; &gt; +// TODO(bulach): remove this file, this is a temporary compatibility layer for
&gt; 
&gt; s/TODO(bulach)/FIXME/
&gt; 

Done.

&gt; &gt; Index: WebKit/chromium/public/WebGeolocationServiceBridge.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebKit/chromium/public/WebGeolocationServiceBridge.h	(revision 56438)
&gt; &gt; +++ WebKit/chromium/public/WebGeolocationServiceBridge.h	(working copy)

&gt; &gt; +    virtual void setLastPosition(const WebGeoposition&amp; geoposition) = 0;
&gt; &gt; +    // TODO(bulach): remove this method.
&gt; &gt;      virtual void setLastPosition(double latitude, double longitude, bool providesAltitude, double altitude, double accuracy, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed, long long timestamp) = 0;
&gt; &gt;      virtual void setLastError(int errorCode, const WebString&amp; message) = 0;
&gt; 
&gt; Don&apos;t these need to be hooked up to each other (i.e. call each other) to keep
&gt; things working?
&gt; 

they are both implemented in the (new) WebGeolocationServiceBridgeImpl.cc.
I didn&apos;t call each other though, just changed both impl to call m_GeolocationServiceChromium-&gt;setLastPosition(geoposition);
The old one will go away as soon as the other side stops calling it.

&gt; 
&gt; &gt; Index: WebKit/chromium/public/WebViewClient.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebKit/chromium/public/WebViewClient.h	(revision 56438)
&gt; &gt; +++ WebKit/chromium/public/WebViewClient.h	(working copy)
&gt; &gt; @@ -31,6 +31,7 @@
&gt; &gt;  #ifndef WebViewClient_h
&gt; &gt;  #define WebViewClient_h
&gt; &gt;  
&gt; &gt; +#include &quot;GeolocationServiceBridgeChromium.h&quot;
&gt; 
&gt; Er...shouldn&apos;t you use the new name?
&gt; 

Not yet: I added a FIXME, this is necessary so that the other side can access the old method:
virtual WebKit::WebGeolocationServiceInterface* getGeolocationService() { return 0; }


&gt; &gt;      // Access the embedder API for geolocation services.
&gt; &gt; +    virtual WebKit::WebGeolocationService* geolocationService() { return getGeolocationService(); }
&gt; &gt; +
&gt; &gt; +    // TODO(bulach): this is a temporary compatibility layer, remove it.
&gt; &gt;      virtual WebKit::WebGeolocationServiceInterface* getGeolocationService() { return 0; }
&gt; 
&gt; This should return a geolocation service as well.  No need to break things in
&gt; the middle.
&gt; 

As above, the other side still needs the second method. Clarified the fixme.

&gt; &gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h	(revision 56438)
&gt; &gt; +++ WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h	(working copy)
&gt; &gt; -
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; &gt;  WebCore::GeolocationServiceBridge* createGeolocationServiceBridgeImpl(WebCore::GeolocationServiceChromium*);
&gt; &gt; +#endif
&gt; 
&gt; Is this the only thing left in the file?  If so, why does it need to be in
&gt; public?

this in the /src directory, isn&apos;t it ok? otherwise I&apos;d have to publish GeolocationServiceBridgeImpl class definition here..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204033</commentid>
    <comment_count>8</comment_count>
      <attachid>51632</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-25 07:10:00 -0700</bug_when>
    <thetext>Comment on attachment 51632
Jorlow comments

Darin, please take a final look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204865</commentid>
    <comment_count>9</comment_count>
      <attachid>51632</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-26 16:53:14 -0700</bug_when>
    <thetext>Comment on attachment 51632
Jorlow comments

&gt; Index: WebKit/chromium/public/WebGeolocationService.h
...
&gt;      // Attaches the GeolocationBridge to the embedder and returns its id, which
&gt;      // should be used on subsequent calls for the methods above.
&gt; +    virtual int attachBridge(WebGeolocationServiceBridge* geolocationServiceBridge) = 0;

nit: no need for a parameter name that just matches the type name.
only name parameters if they add information.  this is a webkit
style thing.

nit: the comment says &quot;GeolocationBridge&quot; but I think you mean
WebGeolocationServiceBridge.


&gt;      // Dettaches the GeolocationService from the embedder.
&gt;      virtual void dettachBridge(int bridgeId) = 0;

This method is misspelled, right?  It should be detachBridge, no?


&gt; Index: WebKit/chromium/public/WebGeolocationServiceBridge.h
&gt; +#ifndef WebGeolocationServiceBridge_h
&gt; +#define WebGeolocationServiceBridge_h
&gt;  
&gt;  namespace WebCore {
&gt;  class GeolocationServiceBridge;
&gt; @@ -44,30 +44,27 @@ class WebURL;
&gt;  // Provides a WebKit API called by the embedder.
&gt;  class WebGeolocationServiceBridge {
&gt;  public:
&gt; +    struct WebGeoposition {
&gt; +      double latitude;
&gt; +      double longitude;
&gt; +      bool providesAltitude;
&gt; +      double altitude;
&gt; +      double accuracy;
&gt; +      bool providesAltitudeAccuracy;
&gt; +      double altitudeAccuracy;
&gt; +      bool providesHeading;
&gt; +      double heading;
&gt; +      bool providesSpeed;
&gt; +      double speed;
&gt; +      long long timestamp;
&gt; +    };

nit: the indentation of this structure is wrong.  it should be 4
white spaces.

nit: we only use the Web prefix for toplevel types.  how about
either moving this WebGeoposition struct to the toplevel (my
preference would be to do so and put it in a new file), or rename
it to Geoposition, but then the name conflicts with the one in the
WebCore namespace.  WebGeoposition.h!  the webkit style rule is to
have one type per file, and it is a good sign that this should be
a separate file since the corresponding WebCore type is in a
separate file.


&gt;      virtual void setIsAllowed(bool allowed) = 0;
&gt; +    virtual void setLastPosition(const WebGeoposition&amp; geoposition) = 0;

nit: do not name parameters if it does not add information


&gt; Index: WebKit/chromium/public/WebViewClient.h

&gt; +    // FIXME: this is a temporary compatibility layer, remove it.
&gt;      virtual WebKit::WebGeolocationServiceInterface* getGeolocationService() { return 0; }

please use DEPRECATED for things like this that need to be removed.
it will be easier to find these and clean them up later if we use
consistent tagging.


&gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp
&gt; ===================================================================
&gt; --- WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp	(revision 56438)
&gt; +++ WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp	(working copy)
&gt; @@ -30,7 +30,7 @@
&gt;  
&gt;  #include &quot;config.h&quot;
&gt;  
&gt; +#include &quot;WebGeolocationServiceBridgeImpl.h&quot;

nit: no new line after config.h here


&gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h

&gt; +#if WEBKIT_IMPLEMENTATION
&gt;  WebCore::GeolocationServiceBridge* createGeolocationServiceBridgeImpl(WebCore::GeolocationServiceChromium*);
&gt; +#endif

In the src/ directory, there is no need for WEBKIT_IMPLEMENTATION
guards.  They are only useful in the public/ directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205390</commentid>
    <comment_count>10</comment_count>
      <attachid>51898</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-29 04:01:55 -0700</bug_when>
    <thetext>Created attachment 51898
Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205394</commentid>
    <comment_count>11</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-29 04:05:52 -0700</bug_when>
    <thetext>Thanks Darin!

All comments addressed, another look please?

(In reply to comment #9)
&gt; (From update of attachment 51632 [details])
&gt; &gt; Index: WebKit/chromium/public/WebGeolocationService.h
&gt; ...
&gt; &gt;      // Attaches the GeolocationBridge to the embedder and returns its id, which
&gt; &gt;      // should be used on subsequent calls for the methods above.
&gt; &gt; +    virtual int attachBridge(WebGeolocationServiceBridge* geolocationServiceBridge) = 0;
&gt; 
&gt; nit: no need for a parameter name that just matches the type name.
&gt; only name parameters if they add information.  this is a webkit
&gt; style thing.
Done.

&gt; 
&gt; nit: the comment says &quot;GeolocationBridge&quot; but I think you mean
&gt; WebGeolocationServiceBridge.
Done.

&gt; 
&gt; 
&gt; &gt;      // Dettaches the GeolocationService from the embedder.
&gt; &gt;      virtual void dettachBridge(int bridgeId) = 0;
&gt; 
&gt; This method is misspelled, right?  It should be detachBridge, no?

Ops, my bad. Added a new method with the correct spelling, DEPRECATED this.
Will remove it as soon as it lands on the other side.

&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/public/WebGeolocationServiceBridge.h
&gt; &gt; +#ifndef WebGeolocationServiceBridge_h
&gt; &gt; +#define WebGeolocationServiceBridge_h
&gt; &gt;  
&gt; &gt;  namespace WebCore {
&gt; &gt;  class GeolocationServiceBridge;
&gt; &gt; @@ -44,30 +44,27 @@ class WebURL;
&gt; &gt;  // Provides a WebKit API called by the embedder.
&gt; &gt;  class WebGeolocationServiceBridge {
&gt; &gt;  public:
&gt; &gt; +    struct WebGeoposition {
&gt; &gt; +      double latitude;
&gt; &gt; +      double longitude;
&gt; &gt; +      bool providesAltitude;
&gt; &gt; +      double altitude;
&gt; &gt; +      double accuracy;
&gt; &gt; +      bool providesAltitudeAccuracy;
&gt; &gt; +      double altitudeAccuracy;
&gt; &gt; +      bool providesHeading;
&gt; &gt; +      double heading;
&gt; &gt; +      bool providesSpeed;
&gt; &gt; +      double speed;
&gt; &gt; +      long long timestamp;
&gt; &gt; +    };
&gt; 
&gt; nit: the indentation of this structure is wrong.  it should be 4
&gt; white spaces.
Done (in the separate file).

&gt; 
&gt; nit: we only use the Web prefix for toplevel types.  how about
&gt; either moving this WebGeoposition struct to the toplevel (my
&gt; preference would be to do so and put it in a new file), or rename
&gt; it to Geoposition, but then the name conflicts with the one in the
&gt; WebCore namespace.  WebGeoposition.h!  the webkit style rule is to
&gt; have one type per file, and it is a good sign that this should be
&gt; a separate file since the corresponding WebCore type is in a
&gt; separate file.

Thanks for the explanation. Done as a separate WebGeoposition.h file.

&gt; 
&gt; 
&gt; &gt;      virtual void setIsAllowed(bool allowed) = 0;
&gt; &gt; +    virtual void setLastPosition(const WebGeoposition&amp; geoposition) = 0;
&gt; 
&gt; nit: do not name parameters if it does not add information
Done.

&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/public/WebViewClient.h
&gt; 
&gt; &gt; +    // FIXME: this is a temporary compatibility layer, remove it.
&gt; &gt;      virtual WebKit::WebGeolocationServiceInterface* getGeolocationService() { return 0; }
&gt; 
&gt; please use DEPRECATED for things like this that need to be removed.
&gt; it will be easier to find these and clean them up later if we use
&gt; consistent tagging.

Done.

&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp
&gt; &gt; ===================================================================
&gt; &gt; --- WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp	(revision 56438)
&gt; &gt; +++ WebKit/chromium/src/WebGeolocationServiceBridgeImpl.cpp	(working copy)
&gt; &gt; @@ -30,7 +30,7 @@
&gt; &gt;  
&gt; &gt;  #include &quot;config.h&quot;
&gt; &gt;  
&gt; &gt; +#include &quot;WebGeolocationServiceBridgeImpl.h&quot;
&gt; 
&gt; nit: no new line after config.h here

Done.

&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/src/WebGeolocationServiceBridgeImpl.h
&gt; 
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; &gt;  WebCore::GeolocationServiceBridge* createGeolocationServiceBridgeImpl(WebCore::GeolocationServiceChromium*);
&gt; &gt; +#endif
&gt; 
&gt; In the src/ directory, there is no need for WEBKIT_IMPLEMENTATION
&gt; guards.  They are only useful in the public/ directory.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205462</commentid>
    <comment_count>12</comment_count>
      <attachid>51898</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-29 08:53:58 -0700</bug_when>
    <thetext>Comment on attachment 51898
Darin&apos;s comments.

&gt; Index: WebKit/chromium/public/WebGeolocationService.h
...
&gt; +class WebGeolocationService {
&gt;  public:
&gt;      virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt;      virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; @@ -58,16 +47,17 @@ public:
&gt;      virtual void suspend(int bridgeId) = 0;
&gt;      virtual void resume(int bridgeId) = 0;
&gt;  
&gt; +    // Attaches the WebGeolocationServiceBridge to the embedder and returns its
&gt; +    // id, which should be used on subsequent calls for the methods above.
&gt; +    virtual int attachBridge(WebGeolocationServiceBridge*) = 0;
&gt;  
&gt; +    // Detaches the WebGeolocationServiceBridge from the embedder.
&gt; +    virtual void detachBridge(int bridgeId) { dettachBridge(bridgeId); }
&gt; +
&gt; +    // DEPRECATED: this is a temporary compatibility layer, remove this method.
&gt;      virtual void dettachBridge(int bridgeId) = 0;
&gt;  };

Please note that we generally provide default implementations for all
virtual WebKit API methods so that it is easier to deprecate methods.
I would recommend doing so for dettachBridge at least.


&gt; Index: WebKit/chromium/public/WebGeoposition.h
...
&gt; +struct WebGeoposition {
&gt; +    double latitude;
&gt; +    double longitude;
&gt; +    bool providesAltitude;
&gt; +    double altitude;
&gt; +    double accuracy;
&gt; +    bool providesAltitudeAccuracy;
&gt; +    double altitudeAccuracy;
&gt; +    bool providesHeading;
&gt; +    double heading;
&gt; +    bool providesSpeed;
&gt; +    double speed;
&gt; +    long long timestamp;
&gt; +};

It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
for converting to/from WebCore::Geoposition.

Also, since Geoposition is reference counted, the way we&apos;d normally
expose it through the WebKit API is to leverage WebPrivatePtr, such
that WebGeoposition is really just a wrapper around a Geoposition
object.  Is there a reason why a struct as you have done is better?

Are you planning on serializing this struct over Chromium IPC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205499</commentid>
    <comment_count>13</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-29 09:55:36 -0700</bug_when>
    <thetext>Thanks Darin!

General question: after an &quot;r+&quot;, should I make the changes your suggested here or as a follow up? I&apos;m happy to do either way, I&apos;m just not yet familiar with the flow here.

More inline:

(In reply to comment #12)
&gt; (From update of attachment 51898 [details])
&gt; &gt; Index: WebKit/chromium/public/WebGeolocationService.h
&gt; ...
&gt; &gt; +class WebGeolocationService {
&gt; &gt;  public:
&gt; &gt;      virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt; &gt;      virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; &gt; @@ -58,16 +47,17 @@ public:
&gt; &gt;      virtual void suspend(int bridgeId) = 0;
&gt; &gt;      virtual void resume(int bridgeId) = 0;
&gt; &gt;  
&gt; &gt; +    // Attaches the WebGeolocationServiceBridge to the embedder and returns its
&gt; &gt; +    // id, which should be used on subsequent calls for the methods above.
&gt; &gt; +    virtual int attachBridge(WebGeolocationServiceBridge*) = 0;
&gt; &gt;  
&gt; &gt; +    // Detaches the WebGeolocationServiceBridge from the embedder.
&gt; &gt; +    virtual void detachBridge(int bridgeId) { dettachBridge(bridgeId); }
&gt; &gt; +
&gt; &gt; +    // DEPRECATED: this is a temporary compatibility layer, remove this method.
&gt; &gt;      virtual void dettachBridge(int bridgeId) = 0;
&gt; &gt;  };
&gt; 
&gt; Please note that we generally provide default implementations for all
&gt; virtual WebKit API methods so that it is easier to deprecate methods.
&gt; I would recommend doing so for dettachBridge at least.

Good point. As above, should I do this now or as a follow up?
Also: should I add default impl for all methods, not just the ones being deprecated / changed?

&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/public/WebGeoposition.h
&gt; ...
&gt; &gt; +struct WebGeoposition {
&gt; &gt; +    double latitude;
&gt; &gt; +    double longitude;
&gt; &gt; +    bool providesAltitude;
&gt; &gt; +    double altitude;
&gt; &gt; +    double accuracy;
&gt; &gt; +    bool providesAltitudeAccuracy;
&gt; &gt; +    double altitudeAccuracy;
&gt; &gt; +    bool providesHeading;
&gt; &gt; +    double heading;
&gt; &gt; +    bool providesSpeed;
&gt; &gt; +    double speed;
&gt; &gt; +    long long timestamp;
&gt; &gt; +};
&gt; 
&gt; It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
&gt; for converting to/from WebCore::Geoposition.
&gt; 
&gt; Also, since Geoposition is reference counted, the way we&apos;d normally
&gt; expose it through the WebKit API is to leverage WebPrivatePtr, such
&gt; that WebGeoposition is really just a wrapper around a Geoposition
&gt; object.  Is there a reason why a struct as you have done is better?
&gt; 
&gt; Are you planning on serializing this struct over Chromium IPC?

Hmm, good point. On the embedder side, we have our own &quot;Geoposition&quot; datatype, which we need to pass to WebKit, then WebCore (it&apos;s one way only, there&apos;s no communication back to the embedder).

This struct is then only used as you suggested, to avoid a long param list for &quot;setLastPosition&quot;. If we make turn this into a class aggregating Geoposition via WebPrivatePtr, it&apos;d require a ctor with the same long list of params, or a long list of setters (for each individual field), no?

If so, wouldn&apos;t it be more straightforward to just keep the long list of param on setLastPosition in the first place?

Please, let me know what&apos;s the preferred way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205502</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-29 09:57:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks Darin!
&gt; 
&gt; General question: after an &quot;r+&quot;, should I make the changes your suggested here
&gt; or as a follow up? I&apos;m happy to do either way, I&apos;m just not yet familiar with
&gt; the flow here.

Unless otherwise specified, the r+ is typically contingent on you making the changes before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205589</commentid>
    <comment_count>15</comment_count>
      <attachid>51943</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-29 11:50:53 -0700</bug_when>
    <thetext>Created attachment 51943
More comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205590</commentid>
    <comment_count>16</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-29 11:54:08 -0700</bug_when>
    <thetext>Thanks for the clarification, Jeremy!

Darin, I addressed all your comments except the Geolocation struct vs class.

Would you please take a look and let me know what&apos;s the preferred way? Thanks!

(In reply to comment #13)
&gt; Thanks Darin!
&gt; 
&gt; General question: after an &quot;r+&quot;, should I make the changes your suggested here
&gt; or as a follow up? I&apos;m happy to do either way, I&apos;m just not yet familiar with
&gt; the flow here.
&gt; 
&gt; More inline:
&gt; 
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 51898 [details] [details])
&gt; &gt; &gt; Index: WebKit/chromium/public/WebGeolocationService.h
&gt; &gt; ...
&gt; &gt; &gt; +class WebGeolocationService {
&gt; &gt; &gt;  public:
&gt; &gt; &gt;      virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt; &gt; &gt;      virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; &gt; &gt; @@ -58,16 +47,17 @@ public:
&gt; &gt; &gt;      virtual void suspend(int bridgeId) = 0;
&gt; &gt; &gt;      virtual void resume(int bridgeId) = 0;
&gt; &gt; &gt;  
&gt; &gt; &gt; +    // Attaches the WebGeolocationServiceBridge to the embedder and returns its
&gt; &gt; &gt; +    // id, which should be used on subsequent calls for the methods above.
&gt; &gt; &gt; +    virtual int attachBridge(WebGeolocationServiceBridge*) = 0;
&gt; &gt; &gt;  
&gt; &gt; &gt; +    // Detaches the WebGeolocationServiceBridge from the embedder.
&gt; &gt; &gt; +    virtual void detachBridge(int bridgeId) { dettachBridge(bridgeId); }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // DEPRECATED: this is a temporary compatibility layer, remove this method.
&gt; &gt; &gt;      virtual void dettachBridge(int bridgeId) = 0;
&gt; &gt; &gt;  };
&gt; &gt; 
&gt; &gt; Please note that we generally provide default implementations for all
&gt; &gt; virtual WebKit API methods so that it is easier to deprecate methods.
&gt; &gt; I would recommend doing so for dettachBridge at least.
&gt; 
&gt; Good point. As above, should I do this now or as a follow up?
&gt; Also: should I add default impl for all methods, not just the ones being
&gt; deprecated / changed?
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; Index: WebKit/chromium/public/WebGeoposition.h
&gt; &gt; ...
&gt; &gt; &gt; +struct WebGeoposition {
&gt; &gt; &gt; +    double latitude;
&gt; &gt; &gt; +    double longitude;
&gt; &gt; &gt; +    bool providesAltitude;
&gt; &gt; &gt; +    double altitude;
&gt; &gt; &gt; +    double accuracy;
&gt; &gt; &gt; +    bool providesAltitudeAccuracy;
&gt; &gt; &gt; +    double altitudeAccuracy;
&gt; &gt; &gt; +    bool providesHeading;
&gt; &gt; &gt; +    double heading;
&gt; &gt; &gt; +    bool providesSpeed;
&gt; &gt; &gt; +    double speed;
&gt; &gt; &gt; +    long long timestamp;
&gt; &gt; &gt; +};
&gt; &gt; 
&gt; &gt; It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
&gt; &gt; for converting to/from WebCore::Geoposition.
&gt; &gt; 
&gt; &gt; Also, since Geoposition is reference counted, the way we&apos;d normally
&gt; &gt; expose it through the WebKit API is to leverage WebPrivatePtr, such
&gt; &gt; that WebGeoposition is really just a wrapper around a Geoposition
&gt; &gt; object.  Is there a reason why a struct as you have done is better?
&gt; &gt; 
&gt; &gt; Are you planning on serializing this struct over Chromium IPC?
&gt; 
&gt; Hmm, good point. On the embedder side, we have our own &quot;Geoposition&quot; datatype,
&gt; which we need to pass to WebKit, then WebCore (it&apos;s one way only, there&apos;s no
&gt; communication back to the embedder).
&gt; 
&gt; This struct is then only used as you suggested, to avoid a long param list for
&gt; &quot;setLastPosition&quot;. If we make turn this into a class aggregating Geoposition
&gt; via WebPrivatePtr, it&apos;d require a ctor with the same long list of params, or a
&gt; long list of setters (for each individual field), no?
&gt; 
&gt; If so, wouldn&apos;t it be more straightforward to just keep the long list of param
&gt; on setLastPosition in the first place?
&gt; 
&gt; Please, let me know what&apos;s the preferred way.

(In reply to comment #12)
&gt; (From update of attachment 51898 [details])
&gt; &gt; Index: WebKit/chromium/public/WebGeolocationService.h
&gt; ...
&gt; &gt; +class WebGeolocationService {
&gt; &gt;  public:
&gt; &gt;      virtual void requestPermissionForFrame(int bridgeId, const WebURL&amp; url) = 0;
&gt; &gt;      virtual void startUpdating(int bridgeId, const WebURL&amp; url, bool enableHighAccuracy) = 0;
&gt; &gt; @@ -58,16 +47,17 @@ public:
&gt; &gt;      virtual void suspend(int bridgeId) = 0;
&gt; &gt;      virtual void resume(int bridgeId) = 0;
&gt; &gt;  
&gt; &gt; +    // Attaches the WebGeolocationServiceBridge to the embedder and returns its
&gt; &gt; +    // id, which should be used on subsequent calls for the methods above.
&gt; &gt; +    virtual int attachBridge(WebGeolocationServiceBridge*) = 0;
&gt; &gt;  
&gt; &gt; +    // Detaches the WebGeolocationServiceBridge from the embedder.
&gt; &gt; +    virtual void detachBridge(int bridgeId) { dettachBridge(bridgeId); }
&gt; &gt; +
&gt; &gt; +    // DEPRECATED: this is a temporary compatibility layer, remove this method.
&gt; &gt;      virtual void dettachBridge(int bridgeId) = 0;
&gt; &gt;  };
&gt; 
&gt; Please note that we generally provide default implementations for all
&gt; virtual WebKit API methods so that it is easier to deprecate methods.
&gt; I would recommend doing so for dettachBridge at least.
&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/public/WebGeoposition.h
&gt; ...
&gt; &gt; +struct WebGeoposition {
&gt; &gt; +    double latitude;
&gt; &gt; +    double longitude;
&gt; &gt; +    bool providesAltitude;
&gt; &gt; +    double altitude;
&gt; &gt; +    double accuracy;
&gt; &gt; +    bool providesAltitudeAccuracy;
&gt; &gt; +    double altitudeAccuracy;
&gt; &gt; +    bool providesHeading;
&gt; &gt; +    double heading;
&gt; &gt; +    bool providesSpeed;
&gt; &gt; +    double speed;
&gt; &gt; +    long long timestamp;
&gt; &gt; +};
&gt; 
&gt; It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
&gt; for converting to/from WebCore::Geoposition.
&gt; 
&gt; Also, since Geoposition is reference counted, the way we&apos;d normally
&gt; expose it through the WebKit API is to leverage WebPrivatePtr, such
&gt; that WebGeoposition is really just a wrapper around a Geoposition
&gt; object.  Is there a reason why a struct as you have done is better?
&gt; 
&gt; Are you planning on serializing this struct over Chromium IPC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205605</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-29 12:36:45 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; General question: after an &quot;r+&quot;, should I make the changes your suggested here
&gt; or as a follow up? I&apos;m happy to do either way, I&apos;m just not yet familiar with
&gt; the flow here.

Sorry, r+ means you can commit.  I am happy if you address the remaining
feedback now or later or not at all pending further discussion.


&gt; &gt; Please note that we generally provide default implementations for all
&gt; &gt; virtual WebKit API methods so that it is easier to deprecate methods.
&gt; &gt; I would recommend doing so for dettachBridge at least.
&gt; 
&gt; Good point. As above, should I do this now or as a follow up?
&gt; Also: should I add default impl for all methods, not just the ones being
&gt; deprecated / changed?

We generally add default implementations to all methods.  Note:  There are
some older interfaces where this wasn&apos;t the case.  The decision to add
default implementations happened mid-way through the API development.  It
just makes life easier when you wish to change the API.


&gt; &gt; It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
&gt; &gt; for converting to/from WebCore::Geoposition.
&gt; &gt; 
&gt; &gt; Also, since Geoposition is reference counted, the way we&apos;d normally
&gt; &gt; expose it through the WebKit API is to leverage WebPrivatePtr, such
&gt; &gt; that WebGeoposition is really just a wrapper around a Geoposition
&gt; &gt; object.  Is there a reason why a struct as you have done is better?
&gt; &gt; 
&gt; &gt; Are you planning on serializing this struct over Chromium IPC?
&gt; 
&gt; Hmm, good point. On the embedder side, we have our own &quot;Geoposition&quot; datatype,
&gt; which we need to pass to WebKit, then WebCore (it&apos;s one way only, there&apos;s no
&gt; communication back to the embedder).
&gt;
&gt; This struct is then only used as you suggested, to avoid a long param list for
&gt; &quot;setLastPosition&quot;. If we make turn this into a class aggregating Geoposition
&gt; via WebPrivatePtr, it&apos;d require a ctor with the same long list of params, or a
&gt; long list of setters (for each individual field), no?
&gt; 
&gt; If so, wouldn&apos;t it be more straightforward to just keep the long list of param
&gt; on setLastPosition in the first place?
&gt; 
&gt; Please, let me know what&apos;s the preferred way.

I see.  The problem seems to stem from the Coordinates constructor, which
takes a big list of arguments.  I think that was probably a poor design
choice since it suffers from the problem that led me to encourage you to
break up setLastPosition.

If Coordinates instead had a bunch of setters, then it would be easy to
create a WebGeoposition object with a similar array of setters.  I guess
the downside to that approach is that someone might forget to call one of
the setters.

My preference would be to change Coordinates to have setters with each
property having a reasonable default value.  Then, make a WebGeoposition
object that wraps Geoposition and provides similar setters (and getters).

Of course, this seems like a lot of work for the benefit of a single method.
If you want to ditch WebGeoposition and make setLastPosition have a
bazillion parameters again, I won&apos;t object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205928</commentid>
    <comment_count>18</comment_count>
      <attachid>52020</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-30 03:28:59 -0700</bug_when>
    <thetext>Created attachment 52020
Final round of comments. Reverts back to multiple params instead of a WebGeolocation struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205931</commentid>
    <comment_count>19</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-03-30 03:40:27 -0700</bug_when>
    <thetext>Thanks Darin!
Replies inline, would you mind a final look please?

(In reply to comment #17)
&gt; (In reply to comment #13)
&gt; &gt; General question: after an &quot;r+&quot;, should I make the changes your suggested here
&gt; &gt; or as a follow up? I&apos;m happy to do either way, I&apos;m just not yet familiar with
&gt; &gt; the flow here.
&gt; 
&gt; Sorry, r+ means you can commit.  I am happy if you address the remaining
&gt; feedback now or later or not at all pending further discussion.

Ahn, ok, thanks for the clarification!
I went back one step and removed the struct, is now back to multiple params. More details below.

&gt; 
&gt; 
&gt; &gt; &gt; Please note that we generally provide default implementations for all
&gt; &gt; &gt; virtual WebKit API methods so that it is easier to deprecate methods.
&gt; &gt; &gt; I would recommend doing so for dettachBridge at least.
&gt; &gt; 
&gt; &gt; Good point. As above, should I do this now or as a follow up?
&gt; &gt; Also: should I add default impl for all methods, not just the ones being
&gt; &gt; deprecated / changed?
&gt; 
&gt; We generally add default implementations to all methods.  Note:  There are
&gt; some older interfaces where this wasn&apos;t the case.  The decision to add
&gt; default implementations happened mid-way through the API development.  It
&gt; just makes life easier when you wish to change the API.

Got it, I probably based on some older interface when implemented this, thanks for the heads up.

&gt; 
&gt; 
&gt; &gt; &gt; It seems like it might be nice to have WEBKIT_IMPLEMENTATION methods
&gt; &gt; &gt; for converting to/from WebCore::Geoposition.
&gt; &gt; &gt; 
&gt; &gt; &gt; Also, since Geoposition is reference counted, the way we&apos;d normally
&gt; &gt; &gt; expose it through the WebKit API is to leverage WebPrivatePtr, such
&gt; &gt; &gt; that WebGeoposition is really just a wrapper around a Geoposition
&gt; &gt; &gt; object.  Is there a reason why a struct as you have done is better?
&gt; &gt; &gt; 
&gt; &gt; &gt; Are you planning on serializing this struct over Chromium IPC?
&gt; &gt; 
&gt; &gt; Hmm, good point. On the embedder side, we have our own &quot;Geoposition&quot; datatype,
&gt; &gt; which we need to pass to WebKit, then WebCore (it&apos;s one way only, there&apos;s no
&gt; &gt; communication back to the embedder).
&gt; &gt;
&gt; &gt; This struct is then only used as you suggested, to avoid a long param list for
&gt; &gt; &quot;setLastPosition&quot;. If we make turn this into a class aggregating Geoposition
&gt; &gt; via WebPrivatePtr, it&apos;d require a ctor with the same long list of params, or a
&gt; &gt; long list of setters (for each individual field), no?
&gt; &gt; 
&gt; &gt; If so, wouldn&apos;t it be more straightforward to just keep the long list of param
&gt; &gt; on setLastPosition in the first place?
&gt; &gt; 
&gt; &gt; Please, let me know what&apos;s the preferred way.
&gt; 
&gt; I see.  The problem seems to stem from the Coordinates constructor, which
&gt; takes a big list of arguments.  I think that was probably a poor design
&gt; choice since it suffers from the problem that led me to encourage you to
&gt; break up setLastPosition.
&gt; 
&gt; If Coordinates instead had a bunch of setters, then it would be easy to
&gt; create a WebGeoposition object with a similar array of setters.  I guess
&gt; the downside to that approach is that someone might forget to call one of
&gt; the setters.
&gt; 
&gt; My preference would be to change Coordinates to have setters with each
&gt; property having a reasonable default value.  Then, make a WebGeoposition
&gt; object that wraps Geoposition and provides similar setters (and getters).
&gt; 
&gt; Of course, this seems like a lot of work for the benefit of a single method.
&gt; If you want to ditch WebGeoposition and make setLastPosition have a
&gt; bazillion parameters again, I won&apos;t object.

I reverted back to multiple params so that we can get the rest of the change in place.

I&apos;m happy to follow up on this, but I&apos;d appreciate your help clarifying the following:
There&apos;s a Coordinates.idl which marks all fields as read-only, afaict that&apos;s what&apos;s exposed to javascript.
Is there any constraint in diverging the .idl and the .h? That is, adding the list of setters (rather than passing all params at ctor / factory time), might introduce some confusion.
If there&apos;s no such constraint, I&apos;ll add the setters and a factory method with no params as a separate change.
Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206072</commentid>
    <comment_count>20</comment_count>
      <attachid>52020</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-30 10:45:22 -0700</bug_when>
    <thetext>Comment on attachment 52020
Final round of comments. Reverts back to multiple params instead of a WebGeolocation struct.

No worries about refactoring the API to introduce WebGeoposition at this point.  I&apos;m not sure it is worth your time.  Sorry for the distraction!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206127</commentid>
    <comment_count>21</comment_count>
      <attachid>52020</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-30 12:51:40 -0700</bug_when>
    <thetext>Comment on attachment 52020
Final round of comments. Reverts back to multiple params instead of a WebGeolocation struct.

Clearing flags on attachment: 52020

Committed r56803: &lt;http://trac.webkit.org/changeset/56803&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206128</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-30 12:51:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51500</attachid>
            <date>2010-03-24 08:37:20 -0700</date>
            <delta_ts>2010-03-24 08:39:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>77014</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjUzNQorCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpzZXRJc0Fs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNl
dExhc3RQb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW0uaDoKKwogMjAxMC0wMy0xOSAgTWlpa2thIEhlaWtraW5lbiAgPG1paWtr
YS5oZWlra2luZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAor
ICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM5LDE5
ICszOSwxOCBAQCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6R2VvbG9jYXRpb25TCiAgICAg
ICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGMpLAogICAgICAgICAgIG1fZ2VvbG9jYXRpb24ocmVp
bnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KGMpKSwKICAgICAgICAgICBtX2dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZShDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKHRoaXMpKSwKLSAgICAgICAgICBtX2xhc3RQb3NpdGlvbihHZW9wb3NpdGlvbjo6Y3JlYXRl
KENvb3JkaW5hdGVzOjpjcmVhdGUoMC4wLCAwLjAsIGZhbHNlLCAwLjAsIDAuMCwgZmFsc2UsIDAu
MCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCksIDApKSwKICAgICAgICAgICBtX2xhc3RFcnJvcihQ
b3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUs
ICIiKSkKIHsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxs
b3dlZCk7ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBo
ZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVz
dGFtcCkKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihQ
YXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsKLSAgICBtX2xhc3RQb3NpdGlv
biA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9sYXN0UG9zaXRpb24g
PSBnZW9wb3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0uaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAq
IAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBA
CiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKSBjb25z
dCB7IHJldHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5nZXQoKTsgfQogICAgIHZvaWQg
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRv
dWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3Vi
bGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0
aW1lc3RhbXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8R2VvcG9zaXRp
b24+KTsKICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9sb2NhdGlvbjsKLSAgICBPd25Q
dHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsg
ICAgCisgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZT4gbV9nZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKICAg
ICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9OwpJbmRleDogV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wMy0yNCAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFj
aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBicmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NTM1CisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaDogQ29waWVk
IGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaDog
Q29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAg
IChXZWJLaXQ6Oik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWUpOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAgICAgICog
c3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3Bw
LgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6V2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRV
cGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RF
cnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OmdldFdlYlZpZXdDbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmg6IENvcGllZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaC4KKwogMjAxMC0wMy0yNCAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQAogICAgICAgICAgICAgICAg
ICdXRUJLSVRfSU1QTEVNRU5UQVRJT04nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdz
b3VyY2VzJzogWwotICAgICAgICAgICAgICAgICdwdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9ndGsvV2ViSW5wdXRFdmVu
dEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVy
aW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRlclN0eWxl
LmgnLApAQCAtMTIxLDYgKzEyMCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcs
CkBAIC0yNDAsNyArMjQxLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJX
cmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAnLAkJ
CiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9X
ZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzEyLDYgKzMxMiw4IEBACiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtLmgJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MyArMzEs
MTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAogI2RlZmlu
ZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNzIEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwotCi0v
LyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KLWNsYXNzIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVh
ZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBs
b25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihp
bnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07Ci0KLS8vIFBy
b3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJV
UkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlk
KSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBv
biBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGlu
dCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2Nh
dGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hC
cmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlzIGZp
bGUsIHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciBmb3IKKy8vIHJlbmFt
aW5nIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB0byBXZWJHZW9sb2NhdGlvblNlcnZp
Y2UuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgOiBwdWJsaWMgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlIHsKIH07CiAKLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8v
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAkocmV2aXNpb24gNTY0MzgpCShm
cm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJv
dmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Fs
bG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVy
cm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRl
cyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9u
U2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1
cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BV
cGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQg
YnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAw
OworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRl
ciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vi
c2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0
YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25T
ZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdl
KGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCShyZXZpc2lvbiA1NjQzOCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDI5ICsyOCwxOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKLSNkZWZpbmUgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBXZWJHZW9sb2NhdGlvblNlcnZpY2Vf
aAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTsKLX0KKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaCIK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsK
IAotLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCi1jbGFz
cyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExh
c3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVl
ZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci19OwotCiAv
LyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KLWNsYXNzIFdlYkdl
b2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2Ug
ewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSkgPSAwOwpAQCAtNjAsMTQgKzQ5LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIEF0
dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMg
aXRzIGlkLCB3aGljaAogICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMg
Zm9yIHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
KSA9IDA7CisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CiAKICAgICAvLyBEZXR0YWNo
ZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KICAgICB2aXJ0dWFs
IHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKIH07CiAKLVdlYkNvcmU6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gK
KyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UuaAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNk
ZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0
cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBi
eSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUg
YWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVB
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3Zp
ZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5
IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlk
LCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5n
KGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdl
b2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNo
CisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhv
ZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAg
IC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgor
ICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKwor
V2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKKyNk
ZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtNDQsMzAgKzQ0LDI3IEBAIGNs
YXNzIFdlYlVSTDsKIC8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVk
ZGVyLgogY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKIHB1YmxpYzoKKyAgICBz
dHJ1Y3QgV2ViR2VvcG9zaXRpb24geworICAgICAgZG91YmxlIGxhdGl0dWRlOworICAgICAgZG91
YmxlIGxvbmdpdHVkZTsKKyAgICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZTsKKyAgICAgIGRvdWJs
ZSBhbHRpdHVkZTsKKyAgICAgIGRvdWJsZSBhY2N1cmFjeTsKKyAgICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5OworICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3k7CisgICAgICBi
b29sIHByb3ZpZGVzSGVhZGluZzsKKyAgICAgIGRvdWJsZSBoZWFkaW5nOworICAgICAgYm9vbCBw
cm92aWRlc1NwZWVkOworICAgICAgZG91YmxlIHNwZWVkOworICAgICAgbG9uZyBsb25nIHRpbWVz
dGFtcDsKKyAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2Vk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihjb25zdCBXZWJHZW9wb3Np
dGlvbiYgZ2VvcG9zaXRpb24pID0gMDsKKyAgICAvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlz
IG1ldGhvZC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBX
ZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQ
SSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNl
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShp
bnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVI
aWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlk
Z2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRh
Y2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0
cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZv
ciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkg
PSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUg
ZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9
IDA7Ci19OwotCi1XZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0qKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwog
ICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXdDbGllbnQuaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBX
ZWJWaWV3Q2xpZW50X2gKICNkZWZpbmUgV2ViVmlld0NsaWVudF9oCiAKKyNpbmNsdWRlICJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRmlsZUNo
b29zZXJDb21wbGV0aW9uLmgiCkBAIC00Niw3ICs0Nyw2IEBAIGNsYXNzIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q7CiBjbGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbjsKIGNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNs
YXNzIFdlYlJhbmdlOwpAQCAtNjIsMjM2ICs2MiwzMDAgQEAgc3RydWN0IFdlYlBvcHVwTWVudUlu
Zm87CiAvLyBTaW5jZSBhIFdlYlZpZXcgaXMgYSBXZWJXaWRnZXQsIGEgV2ViVmlld0NsaWVudCBp
cyBhIFdlYldpZGdldENsaWVudC4KIC8vIFZpcnR1YWwgaW5oZXJpdGFuY2UgYWxsb3dzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIFdlYldpZGdldENsaWVudCB0byBiZQogLy8gZWFzaWx5IHJldXNlZCBh
cyBwYXJ0IG9mIGFuIGltcGxlbWVudGF0aW9uIG9mIFdlYlZpZXdDbGllbnQuCi1jbGFzcyBXZWJW
aWV3Q2xpZW50IDogdmlydHVhbCBwdWJsaWMgV2ViV2lkZ2V0Q2xpZW50IHsKK2NsYXNzIFdlYlZp
ZXdDbGllbnQ6IHZpcnR1YWwgcHVibGljIFdlYldpZGdldENsaWVudCB7CiBwdWJsaWM6Ci0gICAg
Ly8gRmFjdG9yeSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgIC8vIEZhY3RvcnkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgLy8gQ3JlYXRlIGEgbmV3
IHJlbGF0ZWQgV2ViVmlldy4gIFRoaXMgbWV0aG9kIG11c3QgY2xvbmUgaXRzIHNlc3Npb24gc3Rv
cmFnZQotICAgIC8vIHNvIGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIGNyZWF0ZVNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlIGNvbmZvcm0gdG8gdGhlCi0gICAgLy8gV2ViU3RvcmFnZSBzcGVjaWZpY2F0
aW9uLgotICAgIHZpcnR1YWwgV2ViVmlldyogY3JlYXRlVmlldyhXZWJGcmFtZSogY3JlYXRvcikg
eyByZXR1cm4gMDsgfQotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IFdlYlBvcHVwTWVudS4gIEluIHRo
ZSBzZWNvbmQgZm9ybSwgdGhlIGNsaWVudCBpcwotICAgIC8vIHJlc3BvbnNpYmxlIGZvciByZW5k
ZXJpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwb3B1cCBtZW51LgotICAgIHZpcnR1YWwgV2ViV2lk
Z2V0KiBjcmVhdGVQb3B1cE1lbnUoYm9vbCBhY3RpdmF0YWJsZSkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgV2ViV2lkZ2V0KiBjcmVhdGVQb3B1cE1lbnUoY29uc3QgV2ViUG9wdXBNZW51SW5m
byYpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIENyZWF0ZSBhIHNlc3Npb24gc3RvcmFnZSBuYW1l
c3BhY2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdlYlZpZXcuCi0gICAgdmlydHVhbCBX
ZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpIHsgcmV0
dXJuIDA7IH0KLQotICAgIC8vIE1pc2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gQSBuZXcgbWVzc2FnZSB3
YXMgYWRkZWQgdG8gdGhlIGNvbnNvbGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZE1lc3NhZ2VU
b0NvbnNvbGUoCi0gICAgICAgIGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJiwgY29uc3QgV2ViU3Ry
aW5nJiBzb3VyY2VOYW1lLCB1bnNpZ25lZCBzb3VyY2VMaW5lKSB7IH0KLQotICAgIC8vIENhbGxl
ZCB3aGVuIHNjcmlwdCBpbiB0aGUgcGFnZSBjYWxscyB3aW5kb3cucHJpbnQoKS4gIElmIGZyYW1l
IGlzCi0gICAgLy8gbm9uLW51bGwsIHRoZW4gaXQgc2VsZWN0cyBhIHBhcnRpY3VsYXIgZnJhbWUs
IGluY2x1ZGluZyBpdHMKLSAgICAvLyBjaGlsZHJlbiwgdG8gcHJpbnQuICBPdGhlcndpc2UsIHRo
ZSBtYWluIGZyYW1lIGFuZCBpdHMgY2hpbGRyZW4KLSAgICAvLyBzaG91bGQgYmUgcHJpbnRlZC4K
LSAgICB2aXJ0dWFsIHZvaWQgcHJpbnRQYWdlKFdlYkZyYW1lKikgeyB9Ci0KLSAgICAvLyBDYWxs
ZWQgdG8gcmV0cmlldmUgdGhlIHByb3ZpZGVyIG9mIGRlc2t0b3Agbm90aWZpY2F0aW9ucy4KLSAg
ICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVy
KCkgeyByZXR1cm4gMDsgfQotCi0KLSAgICAvLyBOYXZpZ2F0aW9uYWwgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFRoZXNl
IG5vdGlmaWNhdGlvbnMgYnJhY2tldCBhbnkgbG9hZGluZyB0aGF0IG9jY3VycyBpbiB0aGUgV2Vi
Vmlldy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFN0b3BMb2FkaW5nKCkgeyB9Ci0KLQotICAgIC8vIEVkaXRpbmcgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLy8gVGhlc2UgbWV0aG9kcyBhbGxvdyB0aGUgY2xpZW50IHRvIGludGVyY2VwdCBhbmQgb3Zl
cnJ1bGUgZWRpdGluZwotICAgIC8vIG9wZXJhdGlvbnMuCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhjb25zdCBXZWJSYW5nZSYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJSYW5nZSYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZSgKLSAgICAgICAgY29uc3QgV2Vi
Tm9kZSYsIGNvbnN0IFdlYlJhbmdlJiwgV2ViRWRpdGluZ0FjdGlvbikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KAotICAgICAgICBjb25zdCBXZWJT
dHJpbmcmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVkaXRpbmdBY3Rpb24pIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgKLSAgICAgICAg
Y29uc3QgV2ViUmFuZ2UmIGZyb20sIGNvbnN0IFdlYlJhbmdlJiB0bywgV2ViVGV4dEFmZmluaXR5
LAotICAgICAgICBib29sIHN0aWxsU2VsZWN0aW5nKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IFdlYlJhbmdlJikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYlN0cmluZyYg
c3R5bGUsIGNvbnN0IFdlYlJhbmdlJikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBi
b29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJs
ZWQpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oYm9vbCBpc1NlbGVjdGlvbkVtcHR5KSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHMoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkRXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kTmFtZSkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSB7IH0KLQotICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byBXZWJWaWV3J3MgaGFuZGxlSW5wdXRFdmVudCgpCi0g
ICAgLy8gd2hlbiB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2
ZW50IGlzIG5vdAotICAgIC8vIHN1cHByZXNzZWQgYnkgdGhlIHBhZ2UsIHRvIGdpdmUgdGhlIGVt
YmVkZGVyIGEgY2hhbmNlIHRvIGhhbmRsZQotICAgIC8vIHRoZSBrZXlib2FyZCBldmVudCBzcGVj
aWFsbHkuCi0gICAgLy8KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGtleWJvYXJkIGV2ZW50
IHdhcyBoYW5kbGVkIGJ5IHRoZSBlbWJlZGRlciwKLSAgICAvLyBpbmRpY2F0aW5nIHRoYXQgdGhl
IGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBzdXBwcmVzc2VkLgotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVDdXJyZW50S2V5Ym9hcmRFdmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLQotICAgIC8v
IFNwZWxsY2hlY2tlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgLy8gVGhlIGNsaWVudCBzaG91bGQgcGVyZm9ybSBzcGVsbC1j
aGVja2luZyBvbiB0aGUgZ2l2ZW4gdGV4dC4gIElmIHRoZQotICAgIC8vIHRleHQgY29udGFpbnMg
YSBtaXNzcGVsbGVkIHdvcmQsIHRoZW4gdXBvbiByZXR1cm4gbWlzc3BlbGxlZE9mZnNldAotICAg
IC8vIHdpbGwgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtaXNzcGVsbGVkIHdvcmQsIGFuZCBt
aXNzcGVsbGVkTGVuZ3RoCi0gICAgLy8gd2lsbCBpbmRpY2F0ZXMgaXRzIGxlbmd0aC4gIE90aGVy
d2lzZSwgaWYgdGhlcmUgd2FzIG5vdCBhIHNwZWxsaW5nCi0gICAgLy8gZXJyb3IsIHRoZW4gdXBv
biByZXR1cm4gbWlzc3BlbGxlZExlbmd0aCBpcyAwLgotICAgIHZpcnR1YWwgdm9pZCBzcGVsbENo
ZWNrKAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsIGludCYgbWlzc3BlbGxlZE9mZnNl
dCwgaW50JiBtaXNzcGVsbGVkTGVuZ3RoKSB7IH0KLQotICAgIC8vIENvbXB1dGVzIGFuIGF1dG8t
Y29ycmVjdGVkIHJlcGxhY2VtZW50IGZvciBhIG1pc3NwZWxsZWQgd29yZC4gIElmIG5vCi0gICAg
Ly8gcmVwbGFjZW1lbnQgaXMgZm91bmQsIHRoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVk
LgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJTdHJpbmcm
IG1pc3NwZWxsZWRXb3JkKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotCi0gICAgLy8gU2hvdyBv
ciBoaWRlIHRoZSBzcGVsbGluZyBVSS4KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUko
Ym9vbCBzaG93KSB7IH0KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlbGxpbmcgVUkg
aXMgc2hvd2luZy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nU3BlbGxpbmdVSSgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIFVJIHdpdGggdGhlIGdp
dmVuIHdvcmQuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoY29uc3QgV2ViU3RyaW5nJiB3b3JkKSB7IH0KLQotCi0gICAgLy8gRGlhbG9ncyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIHNob3dpbmcg
dGhlIGRpYWxvZy4gV2hlbiB0aGUKLSAgICAvLyBkaWFsb2cgaXMgY2xvc2VkLCBpdCBzaG91bGQg
Y2FsbCB0aGUgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uIHRvCi0gICAgLy8gcGFzcyB0aGUgcmVz
dWx0cyBvZiB0aGUgZGlhbG9nLiBSZXR1cm5zIGZhbHNlIGlmCi0gICAgLy8gV2ViRmlsZUNob29z
ZUNvbXBsZXRpb24gd2lsbCBuZXZlciBiZSBjYWxsZWQuCi0gICAgdmlydHVhbCBib29sIHJ1bkZp
bGVDaG9vc2VyKGNvbnN0IFdlYkZpbGVDaG9vc2VyUGFyYW1zJiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uKikgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIC8vIERpc3BsYXlzIGEgbW9kYWwgYWxlcnQgZGlhbG9nIGNvbnRhaW5pbmcgdGhl
IGdpdmVuIG1lc3NhZ2UuICBSZXR1cm5zCi0gICAgLy8gb25jZSB0aGUgdXNlciBkaXNtaXNzZXMg
dGhlIGRpYWxvZy4KLSAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWxBbGVydERpYWxvZygKLSAgICAg
ICAgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsgfQotCi0gICAgLy8gRGlz
cGxheXMgYSBtb2RhbCBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2Ug
YXMKLSAgICAvLyBkZXNjcmlwdGlvbiBhbmQgT0svQ2FuY2VsIGNob2ljZXMuICBSZXR1cm5zIHRy
dWUgaWYgdGhlIHVzZXIgc2VsZWN0cwotICAgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3aXNlLgot
ICAgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbENvbmZpcm1EaWFsb2coCi0gICAgICAgIFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8g
RGlzcGxheXMgYSBtb2RhbCBpbnB1dCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhcyBk
ZXNjcmlwdGlvbgotICAgIC8vIGFuZCBPSy9DYW5jZWwgY2hvaWNlcy4gIFRoZSBpbnB1dCBmaWVs
ZCBpcyBwcmUtZmlsbGVkIHdpdGgKLSAgICAvLyBkZWZhdWx0VmFsdWUuICBSZXR1cm5zIHRydWUg
aWYgdGhlIHVzZXIgc2VsZWN0cyAnT0snIG9yIGZhbHNlCi0gICAgLy8gb3RoZXJ3aXNlLiAgVXBv
biByZXR1cm5pbmcgdHJ1ZSwgYWN0dWFsVmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIG9mCi0gICAg
Ly8gdGhlIGlucHV0IGZpZWxkLgotICAgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbFByb21wdERpYWxv
ZygKLSAgICAgICAgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdl
YlN0cmluZyYgZGVmYXVsdFZhbHVlLAotICAgICAgICBXZWJTdHJpbmcqIGFjdHVhbFZhbHVlKSB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRGlzcGxheXMgYSBtb2RhbCBjb25maXJtYXRpb24g
ZGlhbG9nIGNvbnRhaW5pbmcgdGhlIGdpdmVuIG1lc3NhZ2UgYXMKLSAgICAvLyBkZXNjcmlwdGlv
biBhbmQgT0svQ2FuY2VsIGNob2ljZXMsIHdoZXJlICdPSycgbWVhbnMgdGhhdCBpdCBpcyBva2F5
Ci0gICAgLy8gdG8gcHJvY2VlZCB3aXRoIGNsb3NpbmcgdGhlIHZpZXcuICBSZXR1cm5zIHRydWUg
aWYgdGhlIHVzZXIgc2VsZWN0cwotICAgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3aXNlLgotICAg
IHZpcnR1YWwgYm9vbCBydW5Nb2RhbEJlZm9yZVVubG9hZERpYWxvZygKLSAgICAgICAgV2ViRnJh
bWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJuIHRydWU7IH0KLQotCi0gICAg
Ly8gVUkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBDYWxsZWQgd2hlbiBzY3JpcHQgbW9kaWZpZXMgd2lu
ZG93LnN0YXR1cwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYlN0cmlu
ZyYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gaG92ZXJpbmcgb3ZlciBhbiBhbmNob3Igd2l0
aCB0aGUgZ2l2ZW4gVVJMLgotICAgIHZpcnR1YWwgdm9pZCBzZXRNb3VzZU92ZXJVUkwoY29uc3Qg
V2ViVVJMJikgeyB9Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBrZXlib2FyZCBmb2N1cyBzd2l0Y2hl
cyB0byBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gVVJMLgotICAgIHZpcnR1YWwgdm9pZCBzZXRL
ZXlib2FyZEZvY3VzVVJMKGNvbnN0IFdlYlVSTCYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4g
YSB0b29sdGlwIHNob3VsZCBiZSBzaG93biBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24u
Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXBUZXh0KGNvbnN0IFdlYlN0cmluZyYsIFdlYlRl
eHREaXJlY3Rpb24gaGludCkgeyB9Ci0KLSAgICAvLyBTaG93cyBhIGNvbnRleHQgbWVudSB3aXRo
IGNvbW1hbmRzIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgZWxlbWVudCBvbgotICAgIC8vIHRoZSBn
aXZlbiBmcmFtZS4gQWRkaXRpb25hbCBjb250ZXh0IGRhdGEgaXMgc3VwcGxpZWQuCi0gICAgdmly
dHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShXZWJGcmFtZSosIGNvbnN0IFdlYkNvbnRleHRNZW51
RGF0YSYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24g
c2hvdWxkIGJlZ2luLgotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWdnaW5nKAotICAgICAgICBj
b25zdCBXZWJQb2ludCYgZnJvbSwgY29uc3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9u
c01hc2spIHsgfQotCi0gICAgLy8gQ2FsbGVkIHRvIGRldGVybWluZSBpZiBkcmFnLW4tZHJvcCBv
cGVyYXRpb25zIG1heSBpbml0aWF0ZSBhIHBhZ2UKLSAgICAvLyBuYXZpZ2F0aW9uLgotICAgIHZp
cnR1YWwgYm9vbCBhY2NlcHRzTG9hZERyb3BzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8g
VGFrZSBmb2N1cyBhd2F5IGZyb20gdGhlIFdlYlZpZXcgYnkgZm9jdXNpbmcgYW4gYWRqYWNlbnQg
VUkgZWxlbWVudAotICAgIC8vIGluIHRoZSBjb250YWluaW5nIHdpbmRvdy4KLSAgICB2aXJ0dWFs
IHZvaWQgZm9jdXNOZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzUHJldmlvdXMoKSB7
IH0KLQotCi0gICAgLy8gU2Vzc2lvbiBoaXN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBUZWxscyB0aGUgZW1iZWRkZXIg
dG8gbmF2aWdhdGUgYmFjayBvciBmb3J3YXJkIGluIHNlc3Npb24gaGlzdG9yeSBieQotICAgIC8v
IHRoZSBnaXZlbiBvZmZzZXQgKHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHNl
c3Npb24KLSAgICAvLyBoaXN0b3J5KS4KLSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9y
d2FyZFNvb24oaW50IG9mZnNldCkgeyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
aGlzdG9yeSBpdGVtcyBiZWZvcmUvYWZ0ZXIgdGhlIGN1cnJlbnQKLSAgICAvLyBoaXN0b3J5IGl0
ZW0uCi0gICAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tMaXN0Q291bnQoKSB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBpbnQgaGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKSB7IHJldHVybiAwOyB9
Ci0KLSAgICAvLyBDYWxsZWQgdG8gbm90aWZ5IHRoZSBlbWJlZGRlciB3aGVuIGEgbmV3IGhpc3Rv
cnkgaXRlbSBpcyBhZGRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSGlzdG9yeUl0ZW0oKSB7
IH0KLQotCi0gICAgLy8gQWNjZXNzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBOb3RpZmllcyBlbWJlZGRlciB0
aGF0IHRoZSBmb2N1cyBoYXMgY2hhbmdlZCB0byB0aGUgZ2l2ZW4KLSAgICAvLyBhY2Nlc3NpYmls
aXR5IG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNBY2Nlc3NpYmlsaXR5T2JqZWN0KGNv
bnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSB7IH0KLQotICAgIC8vIE5vdGlmaWVzIGVtYmVk
ZGVyIHRoYXQgdGhlIHN0YXRlIG9mIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGhhcyBjaGFuZ2Vk
LgotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0U3RhdGUoY29u
c3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpIHsgfQotCi0KLSAgICAvLyBEZXZlbG9wZXIgdG9v
bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgIC8vIENhbGxlZCB0byBub3RpZnkgdGhlIGNsaWVudCB0aGF0IHRoZSBpbnNwZWN0b3In
cyBzZXR0aW5ncyB3ZXJlCi0gICAgLy8gY2hhbmdlZCBhbmQgc2hvdWxkIGJlIHNhdmVkLiAgU2Vl
IFdlYlZpZXc6Omluc3BlY3RvclNldHRpbmdzLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVJ
bnNwZWN0b3JTZXR0aW5ncygpIHsgfQotCi0KLSAgICAvLyBBdXRvZmlsbCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8v
IFF1ZXJpZXMgdGhlIGJyb3dzZXIgZm9yIHN1Z2dlc3Rpb25zIHRvIGJlIHNob3duIGZvciB0aGUg
Zm9ybSB0ZXh0Ci0gICAgLy8gZmllbGQgbmFtZWQgfG5hbWV8LiAgfHZhbHVlfCBpcyB0aGUgdGV4
dCBlbnRlcmVkIGJ5IHRoZSB1c2VyIHNvCi0gICAgLy8gZmFyIGFuZCB0aGUgV2ViTm9kZSBjb3Jy
ZXNwb25kcyB0byB0aGUgaW5wdXQgZmllbGQuCi0gICAgdmlydHVhbCB2b2lkIHF1ZXJ5QXV0b2Zp
bGxTdWdnZXN0aW9ucyhjb25zdCBXZWJOb2RlJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQotCi0g
ICAgLy8gSW5zdHJ1Y3RzIHRoZSBicm93c2VyIHRvIHJlbW92ZSB0aGUgYXV0b2ZpbGwgZW50cnkg
c3BlY2lmaWVkIGZyb20KLSAgICAvLyBpdHMgREIuCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUF1
dG9maWxsU3VnZ2VzdGlvbnMoY29uc3QgV2ViU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQot
Ci0gICAgLy8gSW5mb3JtcyB0aGUgYnJvd3NlciB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBh
biBBdXRvRmlsbCBzdWdnZXN0aW9uCi0gICAgLy8gZm9yIGEgV2ViTm9kZS4gIHxuYW1lfCBhbmQg
fGxhYmVsfCBmb3JtIGEga2V5IGludG8gdGhlIHNldCBvZiBBdXRvRmlsbAotICAgIC8vIHByb2Zp
bGVzLgotICAgIHZpcnR1YWwgdm9pZCBkaWRBY2NlcHRBdXRvRmlsbFN1Z2dlc3Rpb24oY29uc3Qg
V2ViTm9kZSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxhYmVsKSB7IH0KLQotICAgIC8vIEdlb2xvY2F0
aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGdlb2xvY2F0aW9uIHNl
cnZpY2VzLgotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZh
Y2UqIGdldEdlb2xvY2F0aW9uU2VydmljZSgpIHsgcmV0dXJuIDA7IH0KKyAgLy8gQ3JlYXRlIGEg
bmV3IHJlbGF0ZWQgV2ViVmlldy4gIFRoaXMgbWV0aG9kIG11c3QgY2xvbmUgaXRzIHNlc3Npb24g
c3RvcmFnZQorICAvLyBzbyBhbnkgc3Vic2VxdWVudCBjYWxscyB0byBjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSBjb25mb3JtIHRvIHRoZQorICAvLyBXZWJTdG9yYWdlIHNwZWNpZmljYXRp
b24uCisgIHZpcnR1YWwgV2ViVmlldyogY3JlYXRlVmlldyhXZWJGcmFtZSogY3JlYXRvcikgewor
ICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ3JlYXRlIGEgbmV3IFdlYlBvcHVwTWVudS4gIElu
IHRoZSBzZWNvbmQgZm9ybSwgdGhlIGNsaWVudCBpcworICAvLyByZXNwb25zaWJsZSBmb3IgcmVu
ZGVyaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcG9wdXAgbWVudS4KKyAgdmlydHVhbCBXZWJXaWRn
ZXQqIGNyZWF0ZVBvcHVwTWVudShib29sIGFjdGl2YXRhYmxlKSB7CisgICAgcmV0dXJuIDA7Cisg
IH0KKyAgdmlydHVhbCBXZWJXaWRnZXQqIGNyZWF0ZVBvcHVwTWVudShjb25zdCBXZWJQb3B1cE1l
bnVJbmZvJikgeworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ3JlYXRlIGEgc2Vzc2lvbiBz
dG9yYWdlIG5hbWVzcGFjZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgV2ViVmlldy4KKyAg
dmlydHVhbCBXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSgpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8vIE1pc2MgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIEEg
bmV3IG1lc3NhZ2Ugd2FzIGFkZGVkIHRvIHRoZSBjb25zb2xlLgorICB2aXJ0dWFsIHZvaWQgZGlk
QWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2FnZSYsIGNvbnN0IFdlYlN0
cmluZyYgc291cmNlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc291cmNlTGluZSkgeworICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gc2NyaXB0IGlu
IHRoZSBwYWdlIGNhbGxzIHdpbmRvdy5wcmludCgpLiAgSWYgZnJhbWUgaXMKKyAgLy8gbm9uLW51
bGwsIHRoZW4gaXQgc2VsZWN0cyBhIHBhcnRpY3VsYXIgZnJhbWUsIGluY2x1ZGluZyBpdHMKKyAg
Ly8gY2hpbGRyZW4sIHRvIHByaW50LiAgT3RoZXJ3aXNlLCB0aGUgbWFpbiBmcmFtZSBhbmQgaXRz
IGNoaWxkcmVuCisgIC8vIHNob3VsZCBiZSBwcmludGVkLgorICB2aXJ0dWFsIHZvaWQgcHJpbnRQ
YWdlKFdlYkZyYW1lKikgeworICB9CisKKyAgLy8gQ2FsbGVkIHRvIHJldHJpZXZlIHRoZSBwcm92
aWRlciBvZiBkZXNrdG9wIG5vdGlmaWNhdGlvbnMuCisgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSB7CisgICAgcmV0dXJuIDA7CisgIH0K
KworICAvLyBOYXZpZ2F0aW9uYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBUaGVzZSBub3RpZmljYXRpb25zIGJyYWNrZXQg
YW55IGxvYWRpbmcgdGhhdCBvY2N1cnMgaW4gdGhlIFdlYlZpZXcuCisgIHZpcnR1YWwgdm9pZCBk
aWRTdGFydExvYWRpbmcoKSB7CisgIH0KKyAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2FkaW5nKCkg
eworICB9CisKKyAgLy8gRWRpdGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gVGhlc2UgbWV0aG9kcyBhbGxvdyB0
aGUgY2xpZW50IHRvIGludGVyY2VwdCBhbmQgb3ZlcnJ1bGUgZWRpdGluZworICAvLyBvcGVyYXRp
b25zLgorICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYlJhbmdlJikg
eworICAgIHJldHVybiB0cnVlOworICB9CisgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5n
KGNvbnN0IFdlYlJhbmdlJikgeworICAgIHJldHVybiB0cnVlOworICB9CisgIHZpcnR1YWwgYm9v
bCBzaG91bGRJbnNlcnROb2RlKGNvbnN0IFdlYk5vZGUmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVk
aXRpbmdBY3Rpb24pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVkaXRp
bmdBY3Rpb24pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBXZWJSYW5nZSYgZnJvbSwgY29uc3QgV2ViUmFuZ2Um
IHRvLCBXZWJUZXh0QWZmaW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3RpbGxTZWxlY3RpbmcpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2Vi
U3RyaW5nJiBzdHlsZSwgY29uc3QgV2ViUmFuZ2UmKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KworICB2aXJ0dWFsIGJvb2wgaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgdmlydHVhbCBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZCgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlZCkgeworICB9CisKKyAgdmlydHVhbCB2b2lkIGRp
ZEJlZ2luRWRpdGluZygpIHsKKyAgfQorICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9u
KGJvb2wgaXNTZWxlY3Rpb25FbXB0eSkgeworICB9CisgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50cygpIHsKKyAgfQorICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZUNvbW1hbmQoY29uc3Qg
V2ViU3RyaW5nJiBjb21tYW5kTmFtZSkgeworICB9CisgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0
aW5nKCkgeworICB9CisKKyAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRv
IFdlYlZpZXcncyBoYW5kbGVJbnB1dEV2ZW50KCkKKyAgLy8gd2hlbiB0aGUgZGVmYXVsdCBhY3Rp
b24gZm9yIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2ZW50IGlzIG5vdAorICAvLyBzdXBwcmVzc2Vk
IGJ5IHRoZSBwYWdlLCB0byBnaXZlIHRoZSBlbWJlZGRlciBhIGNoYW5jZSB0byBoYW5kbGUKKyAg
Ly8gdGhlIGtleWJvYXJkIGV2ZW50IHNwZWNpYWxseS4KKyAgLy8KKyAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBrZXlib2FyZCBldmVudCB3YXMgaGFuZGxlZCBieSB0aGUgZW1iZWRkZXIsCisgIC8v
IGluZGljYXRpbmcgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHN1cHByZXNzZWQu
CisgIHZpcnR1YWwgYm9vbCBoYW5kbGVDdXJyZW50S2V5Ym9hcmRFdmVudCgpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICAvLyBTcGVsbGNoZWNrZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBUaGUgY2xpZW50IHNo
b3VsZCBwZXJmb3JtIHNwZWxsLWNoZWNraW5nIG9uIHRoZSBnaXZlbiB0ZXh0LiAgSWYgdGhlCisg
IC8vIHRleHQgY29udGFpbnMgYSBtaXNzcGVsbGVkIHdvcmQsIHRoZW4gdXBvbiByZXR1cm4gbWlz
c3BlbGxlZE9mZnNldAorICAvLyB3aWxsIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgbWlzc3Bl
bGxlZCB3b3JkLCBhbmQgbWlzc3BlbGxlZExlbmd0aAorICAvLyB3aWxsIGluZGljYXRlcyBpdHMg
bGVuZ3RoLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSB3YXMgbm90IGEgc3BlbGxpbmcKKyAgLy8gZXJy
b3IsIHRoZW4gdXBvbiByZXR1cm4gbWlzc3BlbGxlZExlbmd0aCBpcyAwLgorICB2aXJ0dWFsIHZv
aWQgc3BlbGxDaGVjayhjb25zdCBXZWJTdHJpbmcmIHRleHQsIGludCYgbWlzc3BlbGxlZE9mZnNl
dCwgaW50JiBtaXNzcGVsbGVkTGVuZ3RoKSB7CisgIH0KKworICAvLyBDb21wdXRlcyBhbiBhdXRv
LWNvcnJlY3RlZCByZXBsYWNlbWVudCBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuICBJZiBubworICAv
LyByZXBsYWNlbWVudCBpcyBmb3VuZCwgdGhlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQu
CisgIHZpcnR1YWwgV2ViU3RyaW5nIGF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJTdHJpbmcmIG1p
c3NwZWxsZWRXb3JkKSB7CisgICAgcmV0dXJuIFdlYlN0cmluZygpOworICB9CisKKyAgLy8gU2hv
dyBvciBoaWRlIHRoZSBzcGVsbGluZyBVSS4KKyAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJ
KGJvb2wgc2hvdykgeworICB9CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVsbGluZyBV
SSBpcyBzaG93aW5nLgorICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nU3BlbGxpbmdVSSgpIHsKKyAg
ICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIFVJIHdpdGgg
dGhlIGdpdmVuIHdvcmQuCisgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFdlYlN0cmluZyYgd29yZCkgeworICB9CisKKyAgLy8gRGlhbG9ncyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciBzaG93aW5n
IHRoZSBkaWFsb2cuIFdoZW4gdGhlCisgIC8vIGRpYWxvZyBpcyBjbG9zZWQsIGl0IHNob3VsZCBj
YWxsIHRoZSBXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb24gdG8KKyAgLy8gcGFzcyB0aGUgcmVzdWx0
cyBvZiB0aGUgZGlhbG9nLiBSZXR1cm5zIGZhbHNlIGlmCisgIC8vIFdlYkZpbGVDaG9vc2VDb21w
bGV0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLgorICB2aXJ0dWFsIGJvb2wgcnVuRmlsZUNob29z
ZXIoY29uc3QgV2ViRmlsZUNob29zZXJQYXJhbXMmLCBXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb24q
KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gRGlzcGxheXMgYSBtb2RhbCBhbGVy
dCBkaWFsb2cgY29udGFpbmluZyB0aGUgZ2l2ZW4gbWVzc2FnZS4gIFJldHVybnMKKyAgLy8gb25j
ZSB0aGUgdXNlciBkaXNtaXNzZXMgdGhlIGRpYWxvZy4KKyAgdmlydHVhbCB2b2lkIHJ1bk1vZGFs
QWxlcnREaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsKKyAgfQor
CisgIC8vIERpc3BsYXlzIGEgbW9kYWwgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIHRoZSBnaXZl
biBtZXNzYWdlIGFzCisgIC8vIGRlc2NyaXB0aW9uIGFuZCBPSy9DYW5jZWwgY2hvaWNlcy4gIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBzZWxlY3RzCisgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3
aXNlLgorICB2aXJ0dWFsIGJvb2wgcnVuTW9kYWxDb25maXJtRGlhbG9nKFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBtZXNzYWdlKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8g
RGlzcGxheXMgYSBtb2RhbCBpbnB1dCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhcyBk
ZXNjcmlwdGlvbgorICAvLyBhbmQgT0svQ2FuY2VsIGNob2ljZXMuICBUaGUgaW5wdXQgZmllbGQg
aXMgcHJlLWZpbGxlZCB3aXRoCisgIC8vIGRlZmF1bHRWYWx1ZS4gIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdXNlciBzZWxlY3RzICdPSycgb3IgZmFsc2UKKyAgLy8gb3RoZXJ3aXNlLiAgVXBvbiByZXR1
cm5pbmcgdHJ1ZSwgYWN0dWFsVmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIG9mCisgIC8vIHRoZSBp
bnB1dCBmaWVsZC4KKyAgdmlydHVhbCBib29sIHJ1bk1vZGFsUHJvbXB0RGlhbG9nKFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYlN0cmluZyogYWN0dWFs
VmFsdWUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBEaXNwbGF5cyBhIG1vZGFs
IGNvbmZpcm1hdGlvbiBkaWFsb2cgY29udGFpbmluZyB0aGUgZ2l2ZW4gbWVzc2FnZSBhcworICAv
LyBkZXNjcmlwdGlvbiBhbmQgT0svQ2FuY2VsIGNob2ljZXMsIHdoZXJlICdPSycgbWVhbnMgdGhh
dCBpdCBpcyBva2F5CisgIC8vIHRvIHByb2NlZWQgd2l0aCBjbG9zaW5nIHRoZSB2aWV3LiAgUmV0
dXJucyB0cnVlIGlmIHRoZSB1c2VyIHNlbGVjdHMKKyAgLy8gJ09LJyBvciBmYWxzZSBvdGhlcndp
c2UuCisgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbEJlZm9yZVVubG9hZERpYWxvZyhXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAg
Ly8gVUkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gQ2FsbGVkIHdoZW4gc2NyaXB0IG1vZGlmaWVzIHdpbmRv
dy5zdGF0dXMKKyAgdmlydHVhbCB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJikg
eworICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gaG92ZXJpbmcgb3ZlciBhbiBhbmNob3Igd2l0aCB0
aGUgZ2l2ZW4gVVJMLgorICB2aXJ0dWFsIHZvaWQgc2V0TW91c2VPdmVyVVJMKGNvbnN0IFdlYlVS
TCYpIHsKKyAgfQorCisgIC8vIENhbGxlZCB3aGVuIGtleWJvYXJkIGZvY3VzIHN3aXRjaGVzIHRv
IGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBVUkwuCisgIHZpcnR1YWwgdm9pZCBzZXRLZXlib2Fy
ZEZvY3VzVVJMKGNvbnN0IFdlYlVSTCYpIHsKKyAgfQorCisgIC8vIENhbGxlZCB3aGVuIGEgdG9v
bHRpcCBzaG91bGQgYmUgc2hvd24gYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICB2
aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcFRleHQoY29uc3QgV2ViU3RyaW5nJiwgV2ViVGV4dERpcmVj
dGlvbiBoaW50KSB7CisgIH0KKworICAvLyBTaG93cyBhIGNvbnRleHQgbWVudSB3aXRoIGNvbW1h
bmRzIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgZWxlbWVudCBvbgorICAvLyB0aGUgZ2l2ZW4gZnJh
bWUuIEFkZGl0aW9uYWwgY29udGV4dCBkYXRhIGlzIHN1cHBsaWVkLgorICB2aXJ0dWFsIHZvaWQg
c2hvd0NvbnRleHRNZW51KFdlYkZyYW1lKiwgY29uc3QgV2ViQ29udGV4dE1lbnVEYXRhJikgewor
ICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24gc2hvdWxkIGJl
Z2luLgorICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnZ2luZyhjb25zdCBXZWJQb2ludCYgZnJvbSwg
Y29uc3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9uc01hc2spIHsKKyAgfQorCisgIC8v
IENhbGxlZCB0byBkZXRlcm1pbmUgaWYgZHJhZy1uLWRyb3Agb3BlcmF0aW9ucyBtYXkgaW5pdGlh
dGUgYSBwYWdlCisgIC8vIG5hdmlnYXRpb24uCisgIHZpcnR1YWwgYm9vbCBhY2NlcHRzTG9hZERy
b3BzKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8gVGFrZSBmb2N1cyBhd2F5IGZy
b20gdGhlIFdlYlZpZXcgYnkgZm9jdXNpbmcgYW4gYWRqYWNlbnQgVUkgZWxlbWVudAorICAvLyBp
biB0aGUgY29udGFpbmluZyB3aW5kb3cuCisgIHZpcnR1YWwgdm9pZCBmb2N1c05leHQoKSB7Cisg
IH0KKyAgdmlydHVhbCB2b2lkIGZvY3VzUHJldmlvdXMoKSB7CisgIH0KKworICAvLyBTZXNzaW9u
IGhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAvLyBUZWxscyB0aGUgZW1iZWRkZXIgdG8gbmF2aWdhdGUgYmFjayBvciBmb3J3
YXJkIGluIHNlc3Npb24gaGlzdG9yeSBieQorICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0IChyZWxhdGl2
ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiBzZXNzaW9uCisgIC8vIGhpc3RvcnkpLgorICB2
aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9yd2FyZFNvb24oaW50IG9mZnNldCkgeworICB9CisK
KyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGhpc3RvcnkgaXRlbXMgYmVmb3JlL2FmdGVyIHRo
ZSBjdXJyZW50CisgIC8vIGhpc3RvcnkgaXRlbS4KKyAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tM
aXN0Q291bnQoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgdmlydHVhbCBpbnQgaGlzdG9yeUZv
cndhcmRMaXN0Q291bnQoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvLyBDYWxsZWQgdG8g
bm90aWZ5IHRoZSBlbWJlZGRlciB3aGVuIGEgbmV3IGhpc3RvcnkgaXRlbSBpcyBhZGRlZC4KKyAg
dmlydHVhbCB2b2lkIGRpZEFkZEhpc3RvcnlJdGVtKCkgeworICB9CisKKyAgLy8gQWNjZXNzaWJp
bGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gTm90aWZpZXMgZW1iZWRkZXIgdGhhdCB0aGUgZm9jdXMgaGFzIGNoYW5nZWQg
dG8gdGhlIGdpdmVuCisgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0LgorICB2aXJ0dWFsIHZvaWQg
Zm9jdXNBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSB7
CisgIH0KKworICAvLyBOb3RpZmllcyBlbWJlZGRlciB0aGF0IHRoZSBzdGF0ZSBvZiBhbiBhY2Nl
c3NpYmlsaXR5IG9iamVjdCBoYXMgY2hhbmdlZC4KKyAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUFj
Y2Vzc2liaWxpdHlPYmplY3RTdGF0ZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jikgewor
ICB9CisKKyAgLy8gRGV2ZWxvcGVyIHRvb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gQ2FsbGVkIHRvIG5vdGlmeSB0aGUgY2xp
ZW50IHRoYXQgdGhlIGluc3BlY3RvcidzIHNldHRpbmdzIHdlcmUKKyAgLy8gY2hhbmdlZCBhbmQg
c2hvdWxkIGJlIHNhdmVkLiAgU2VlIFdlYlZpZXc6Omluc3BlY3RvclNldHRpbmdzLgorICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlSW5zcGVjdG9yU2V0dGluZ3MoKSB7CisgIH0KKworICAvLyBBdXRv
ZmlsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAvLyBRdWVyaWVzIHRoZSBicm93c2VyIGZvciBzdWdnZXN0aW9ucyB0byBi
ZSBzaG93biBmb3IgdGhlIGZvcm0gdGV4dAorICAvLyBmaWVsZCBuYW1lZCB8bmFtZXwuICB8dmFs
dWV8IGlzIHRoZSB0ZXh0IGVudGVyZWQgYnkgdGhlIHVzZXIgc28KKyAgLy8gZmFyIGFuZCB0aGUg
V2ViTm9kZSBjb3JyZXNwb25kcyB0byB0aGUgaW5wdXQgZmllbGQuCisgIHZpcnR1YWwgdm9pZCBx
dWVyeUF1dG9maWxsU3VnZ2VzdGlvbnMoY29uc3QgV2ViTm9kZSYsIGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIHZhbHVlKSB7CisgIH0KKworICAvLyBJbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8gcmVt
b3ZlIHRoZSBhdXRvZmlsbCBlbnRyeSBzcGVjaWZpZWQgZnJvbQorICAvLyBpdHMgREIuCisgIHZp
cnR1YWwgdm9pZCByZW1vdmVBdXRvZmlsbFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkgeworICB9CisKKyAgLy8gSW5mb3JtcyB0aGUgYnJv
d3NlciB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbiBBdXRvRmlsbCBzdWdnZXN0aW9uCisg
IC8vIGZvciBhIFdlYk5vZGUuICB8bmFtZXwgYW5kIHxsYWJlbHwgZm9ybSBhIGtleSBpbnRvIHRo
ZSBzZXQgb2YgQXV0b0ZpbGwKKyAgLy8gcHJvZmlsZXMuCisgIHZpcnR1YWwgdm9pZCBkaWRBY2Nl
cHRBdXRvRmlsbFN1Z2dlc3Rpb24oY29uc3QgV2ViTm9kZSYsIGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIGxhYmVsKSB7CisgIH0KKworICAvLyBHZW9sb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBBY2Nlc3Mg
dGhlIGVtYmVkZGVyIEFQSSBmb3IgZ2VvbG9jYXRpb24gc2VydmljZXMuCisgIHZpcnR1YWwgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlKiBnZW9sb2NhdGlvblNlcnZpY2UoKSB7CisgICAgcmV0dXJuIGdl
dEdlb2xvY2F0aW9uU2VydmljZSgpOworICB9CisKKyAgLy8gVE9ETyhidWxhY2gpOiB0aGlzIGlz
IGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgbGF5ZXIsIHJlbW92ZSBpdC4KKyAgdmlydHVhbCBX
ZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdldEdlb2xvY2F0aW9uU2VydmljZSgpIHsK
KyAgICByZXR1cm4gMDsKKyAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgfldlYlZpZXdDbGllbnQoKSB7
IH0KKyAgfldlYlZpZXdDbGllbnQoKSB7CisgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCShyZXZpc2lv
biA1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgot
I2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisjaW5jbHVkZSAi
V2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgpAQCAtNjk1LDcgKzY5NSw3IEBAIE5vdGlmaWNhdGlvblByZXNlbnRlciogQ2hyb21l
Q2xpZW50SW1wbDoKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQog
ewogICAgIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBy
ZWludGVycHJldF9jYXN0PEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKj4oZ2VvbG9jYXRpb24t
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpKTsKLSAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5nZXRH
ZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShnZW9sb2NhdGlv
blNlcnZpY2UtPmdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpLT5nZXRCcmlkZ2VJZCgpLCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmdlb2xvY2F0
aW9uU2VydmljZSgpLT5yZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uU2Vydmlj
ZS0+Z2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKCktPmdldEJyaWRnZUlkKCksIGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNpb24gNTY0Mzgp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAi
Q29va2llLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTgz
LDYgKzgyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5j
bHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
R2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBv
c2l0aW9uRXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKLSNpbmNsdWRlICJX
ZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotCi0jaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQotCi11c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKLXVzaW5nIFdlYkNvcmU6OkZyYW1l
OwotdXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2U7Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bTsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsKLXVzaW5nIFdlYkNv
cmU6Okdlb3Bvc2l0aW9uOwotdXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJvcjsKLXVzaW5nIFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczsKLXVzaW5nIFdlYkNvcmU6OlN0cmluZzsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJs
aWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0gICAgdmlydHVhbCB+R2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbCgpOwotCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Ci0gICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKik7Ci0gICAg
dmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOwotICAgIHZpcnR1YWwgaW50IGdldEJyaWRnZUlk
KCkgY29uc3Q7Ci0KLSAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBz
cGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJv
cihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgot
ICAgIFdlYlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKLQotICAgIC8vIEdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBvaW50ZXIgYmFjayB0
byBpdC4KLSAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTsKLSAgICBpbnQgbV9icmlkZ2VJZDsKLX07Ci0KLUdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCi17Ci0gICAgcmV0dXJu
IG5ldyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0pCi0gICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKGdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKQotewotICAgIC8vIFdlIG5lZWQgdG8gYXR0YWNoIG91cnNlbHZl
cyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKCkKLSAg
ICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28gdGhhdCB0aGUgZW1i
ZWRkZXIgY2FuIGNhbGwKLSAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCi0gICAgbV9icmlkZ2VJ
ZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJy
aWRnZSh0aGlzKTsKLSAgICBBU1NFUlQobV9icmlkZ2VJZCk7Ci19Ci0KLUdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKLXsKLSAgICBX
ZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7
Ci0gICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJv
eWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKLSAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5l
Y3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQotICAgIC8vIGhhcyBi
ZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAg
aWYgKCF3ZWJWaWV3Q2xpZW50KSB7Ci0gICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7Ci0gICAg
fSBlbHNlIGlmIChtX2JyaWRnZUlkKQotICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRHZW9sb2Nh
dGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLX0KLQotYm9vbCBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyog
cG9zaXRpb25PcHRpb25zKQotewotICAgIGlmICghbV9icmlkZ2VJZCkKLSAgICAgICAgbV9icmlk
Z2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFj
aEJyaWRnZSh0aGlzKTsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9wdGlvbnMtPmVuYWJs
ZUhpZ2hBY2N1cmFjeSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQotewotICAgIGlmIChtX2JyaWRnZUlk
KSB7Ci0gICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2VvbG9jYXRpb25T
ZXJ2aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsKLSAg
ICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7Ci0gICAg
ICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLSAgICAg
ICAgbV9icmlkZ2VJZCA9IDA7Ci0gICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6OnN1c3BlbmQoKQotewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9j
YXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKLXsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCkt
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7Ci19Ci0KLWludCBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fYnJpZGdlSWQ7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQotewotICAgIG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2Vi
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNl
dExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOwotfQotCi1XZWJWaWV3Q2xpZW50KiBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKLXsKLSAgICBGcmFt
ZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwotICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRpY19jYXN0PFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSk7
Ci0gICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gY2hyb21lQ2xpZW50
SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKLSAgICByZXR1cm4gd2ViVmlld0NsaWVudDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04p
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21p
dW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDo1NjQzOCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1
ZGUgIldlYlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCisjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorCit1c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKK3VzaW5nIFdl
YkNvcmU6OkZyYW1lOwordXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Cit1c2luZyBXZWJDb3Jl
OjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsK
K3VzaW5nIFdlYkNvcmU6Okdlb3Bvc2l0aW9uOwordXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJv
cjsKK3VzaW5nIFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczsKK3VzaW5nIFdlYkNvcmU6OlN0cmlu
ZzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwgOiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisgICAgdmlydHVh
bCB+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpOworCisgICAgLy8gR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlCisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRp
b25zKik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworICAgIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZpcnR1YWwgaW50
IGdldEJyaWRnZUlkKCkgY29uc3Q7CisKKyAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmly
dHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFj
eSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3Bl
ZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7CisgICAgdmlydHVhbCB2b2lk
IHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwor
Citwcml2YXRlOgorICAgIFdlYlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKKworICAg
IC8vIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBv
aW50ZXIgYmFjayB0byBpdC4KKyAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKKyAgICBpbnQgbV9icmlkZ2VJZDsKK307CisKK0dlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChH
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCit7
CisgICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtKTsKK30KKworR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCisgICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQoreworICAgIC8vIFdlIG5lZWQgdG8gYXR0
YWNoIG91cnNlbHZlcyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZv
ckZyYW1lKCkKKyAgICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28g
dGhhdCB0aGUgZW1iZWRkZXIgY2FuIGNhbGwKKyAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCisg
ICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNl
KCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBBU1NFUlQobV9icmlkZ2VJZCk7Cit9CisKK0dl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KCkKK3sKKyAgICBXZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJW
aWV3Q2xpZW50KCk7CisgICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5k
IGl0J3MgZGVzdHJveWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKKyAgICAvLyBiZWVuIHBvdGVudGlh
bGx5IGRpc2Nvbm5lY3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQor
ICAgIC8vIGhhcyBiZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJz
ZWx2ZXMuCisgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9icmlk
Z2VJZCk7CisgICAgfSBlbHNlIGlmIChtX2JyaWRnZUlkKQorICAgICAgICB3ZWJWaWV3Q2xpZW50
LT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKK30K
KworYm9vbCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0
aW9uT3B0aW9ucyogcG9zaXRpb25PcHRpb25zKQoreworICAgIGlmICghbV9icmlkZ2VJZCkKKyAg
ICAgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2
aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9w
dGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQoreworICAgIGlm
IChtX2JyaWRnZUlkKSB7CisgICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSog
Z2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNl
cnZpY2UoKTsKKyAgICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlk
Z2VJZCk7CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRn
ZUlkKTsKKyAgICAgICAgbV9icmlkZ2VJZCA9IDA7CisgICAgfQorfQorCit2b2lkIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQoreworICAgIGdldFdlYlZpZXdDbGllbnQo
KS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKK3sKKyAgICBnZXRXZWJW
aWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7
Cit9CisKK2ludCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYnJpZGdlSWQ7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKK3sKKyAgICBtX0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFk
aW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKK30KKwordm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29k
ZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0tPnNldExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOworfQorCitXZWJWaWV3
Q2xpZW50KiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRp
Y19jYXN0PFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKSk7CisgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0g
Y2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKKyAgICByZXR1cm4gd2ViVmll
d0NsaWVudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R0VPTE9DQVRJT04pCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
bmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCIKIAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRl
ICJQb3NpdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldl
YkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgorI2luY2x1
ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCkBAIC02MSwxMCArNjMsMTAgQEAgdXNp
bmcgV2ViQ29yZTo6U3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Us
IHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworY2xhc3MgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UsIHB1
YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewogcHVibGljOgotICAgIGV4cGxpY2l0
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0q
KTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCk7CisgICAgZXhw
bGljaXQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bSopOworICAgIHZpcnR1YWwgfldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
KTsKIAogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQogICAgIHZpcnR1YWwgYm9vbCBz
dGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwpAQCAtNzUsNiArNzcsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3Np
dGlvbihjb25zdCBXZWJHZW9wb3NpdGlvbiYgZ2VvcG9zaXRpb24pOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3Vi
bGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOwogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0
RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsKIApAQCAtODgs
ODAgKzkxLDg4IEBAIHByaXZhdGU6CiAKIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRl
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSog
Z2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsKKyAgICByZXR1
cm4gbmV3IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0pOwogfQogCi1HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKQogICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGF0
dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Npb25G
b3JGcmFtZSgpCiAgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVkIHNv
IHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCiAgICAgLy8gb3VyIHNldElzQWxsb3dlZCgpLgot
ICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vydmlj
ZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGll
bnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKICAgICBBU1NF
UlQobV9icmlkZ2VJZCk7CiB9CiAKLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKIHsKICAgICBXZWJLaXQ6Oldl
YlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7CiAgICAgLy8g
R2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJveWVkIGFmdGVy
IHRoZSBmcmFtZSBoYXMKICAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RlZC4gSW4g
dGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQogICAgIC8vIGhhcyBiZWVuIGNhbGxl
ZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAgaWYgKCF3ZWJW
aWV3Q2xpZW50KSB7CisgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KQogICAgICAgICBBU1NFUlQoIW1f
YnJpZGdlSWQpOwotICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKLSAgICAgICAgd2ViVmlld0Ns
aWVudC0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7
CisgICAgZWxzZSBpZiAobV9icmlkZ2VJZCkKKyAgICAgICAgd2ViVmlld0NsaWVudC0+Z2VvbG9j
YXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiB9CiAKLWJvb2wgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMq
IHBvc2l0aW9uT3B0aW9ucykKK2Jvb2wgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKIHsKICAgICBp
ZiAoIW1fYnJpZGdlSWQpCi0gICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCkt
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAgZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2Jy
aWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CisgICAgICAg
IG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5h
dHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNl
cnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFi
bGVIaWdoQWNjdXJhY3koKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKIHsKICAgICBpZiAobV9icmlkZ2VJZCkg
ewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdlb2xvY2F0aW9uU2Vy
dmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCk7CisgICAg
ICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZSogZ2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0V2ViVmll
d0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKTsKICAgICAgICAgZ2VvbG9jYXRpb25TZXJ2
aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7CiAgICAgICAgIGdlb2xvY2F0aW9uU2Vydmlj
ZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKICAgICAgICAgbV9icmlkZ2VJZCA9IDA7CiAg
ICAgfQogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQor
dm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKIHsKLSAgICBn
ZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJp
ZGdlSWQpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1
c3BlbmQobV9icmlkZ2VJZCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6cmVzdW1lKCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1l
KCkKIHsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5y
ZXN1bWUobV9icmlkZ2VJZCk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNl
cnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdlSWQpOwogfQogCi1pbnQgR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQoKSBjb25zdAoraW50IFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9icmlkZ2VJ
ZDsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93ZWQo
Ym9vbCBhbGxvd2VkKQordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogewogICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0tPnNldElzQWxsb3dlZChhbGxvd2VkKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1Nw
ZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCisKK3ZvaWQgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGNvbnN0IFdlYkdlb3Bvc2l0
aW9uJiB3ZWJnZW9wb3NpdGlvbikKK3sKKyAgICBSZWZQdHI8R2VvcG9zaXRpb24+IGdlb3Bvc2l0
aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShDb29yZGluYXRlczo6Y3JlYXRlKHdlYmdlb3Bvc2l0
aW9uLmxhdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5sb25naXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLnBy
b3ZpZGVzQWx0aXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLmFsdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5h
Y2N1cmFjeSwgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCB3ZWJnZW9w
b3NpdGlvbi5hbHRpdHVkZUFjY3VyYWN5LCB3ZWJnZW9wb3NpdGlvbi5wcm92aWRlc0hlYWRpbmcs
IHdlYmdlb3Bvc2l0aW9uLmhlYWRpbmcsIHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzU3BlZWQsIHdl
Ymdlb3Bvc2l0aW9uLnNwZWVkKSwgd2ViZ2VvcG9zaXRpb24udGltZXN0YW1wKTsKKyAgICBtX0dl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24oZ2VvcG9zaXRpb24pOwor
fQorCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkKIHsKLSAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRM
YXN0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1
ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFt
cCk7CisgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpj
cmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0Fs
dGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0
TGFzdFBvc2l0aW9uKGdlb3Bvc2l0aW9uKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKQordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogewogICAgIG1fR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2Up
OwogfQogCi1XZWJWaWV3Q2xpZW50KiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRX
ZWJWaWV3Q2xpZW50KCkKK1dlYlZpZXdDbGllbnQqIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUt
PnBhZ2UoKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdl
aW5mbwogICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlQ2hyb21pdW0uY3BwOnI1MzQ1NQoKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCShyZXZpc2lvbiA1
NjQzOCkJKGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdl
YlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIu
CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJs
ZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cit9
OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2NsYXNz
IFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwm
IHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwg
Y29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGlu
dCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdl
IHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hvdWxk
IGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAg
dmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hlcyB0
aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9p
ZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmgJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbF9oCisjZGVmaW5lIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CkBAIC0zNywzNyArMzcsMTAgQEAgY2xhc3Mg
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci0KLS8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQ
SSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dl
ZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91Ymxl
IGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywg
Ym9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdl
YlN0cmluZyYgbWVzc2FnZSkgPSAwOwotfTsKLQotLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJ
IGNhbGxlZCBieSBXZWJLaXQuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Ug
ewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRn
ZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsKLQotICAgIC8vIEF0dGFj
aGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRz
IGlkLCB3aGljaAotICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9y
IHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6
OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9
IDA7Ci0KLSAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBl
bWJlZGRlci4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0g
MDsKLX07Ci0KKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KIFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3Jl
OjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCi0jZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAor
I2VuZGlmIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwogICBNZXJnZWQgL3RydW5rL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDpy
NTM0NTUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51502</attachid>
            <date>2010-03-24 08:43:29 -0700</date>
            <delta_ts>2010-03-24 08:45:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>77507</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjUzNQorCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpzZXRJc0Fs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNl
dExhc3RQb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW0uaDoKKwogMjAxMC0wMy0xOSAgTWlpa2thIEhlaWtraW5lbiAgPG1paWtr
YS5oZWlra2luZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAor
ICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM5LDE5
ICszOSwxOCBAQCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6R2VvbG9jYXRpb25TCiAgICAg
ICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGMpLAogICAgICAgICAgIG1fZ2VvbG9jYXRpb24ocmVp
bnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KGMpKSwKICAgICAgICAgICBtX2dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZShDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKHRoaXMpKSwKLSAgICAgICAgICBtX2xhc3RQb3NpdGlvbihHZW9wb3NpdGlvbjo6Y3JlYXRl
KENvb3JkaW5hdGVzOjpjcmVhdGUoMC4wLCAwLjAsIGZhbHNlLCAwLjAsIDAuMCwgZmFsc2UsIDAu
MCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCksIDApKSwKICAgICAgICAgICBtX2xhc3RFcnJvcihQ
b3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUs
ICIiKSkKIHsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxs
b3dlZCk7ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBo
ZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVz
dGFtcCkKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihQ
YXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsKLSAgICBtX2xhc3RQb3NpdGlv
biA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9sYXN0UG9zaXRpb24g
PSBnZW9wb3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0uaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAq
IAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBA
CiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKSBjb25z
dCB7IHJldHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5nZXQoKTsgfQogICAgIHZvaWQg
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRv
dWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3Vi
bGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0
aW1lc3RhbXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8R2VvcG9zaXRp
b24+KTsKICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9sb2NhdGlvbjsKLSAgICBPd25Q
dHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsg
ICAgCisgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZT4gbV9nZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKICAg
ICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9OwpJbmRleDogV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wMy0yNCAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFj
aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBicmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NTM1CisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaDogQ29waWVk
IGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaDog
Q29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAg
IChXZWJLaXQ6Oik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWUpOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAgICAgICog
c3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3Bw
LgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6V2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRV
cGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RF
cnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OmdldFdlYlZpZXdDbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmg6IENvcGllZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaC4KKwogMjAxMC0wMy0yNCAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQAogICAgICAgICAgICAgICAg
ICdXRUJLSVRfSU1QTEVNRU5UQVRJT04nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdz
b3VyY2VzJzogWwotICAgICAgICAgICAgICAgICdwdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9ndGsvV2ViSW5wdXRFdmVu
dEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVy
aW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRlclN0eWxl
LmgnLApAQCAtMTIxLDYgKzEyMCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcs
CkBAIC0yNDAsNyArMjQxLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJX
cmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAnLAkJ
CiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9X
ZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzEyLDYgKzMxMiw4IEBACiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtLmgJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MyArMzEs
MTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAogI2RlZmlu
ZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNzIEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwotCi0v
LyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KLWNsYXNzIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVh
ZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBs
b25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihp
bnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07Ci0KLS8vIFBy
b3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJV
UkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlk
KSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBv
biBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGlu
dCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2Nh
dGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hC
cmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlzIGZp
bGUsIHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciBmb3IKKy8vIHJlbmFt
aW5nIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB0byBXZWJHZW9sb2NhdGlvblNlcnZp
Y2UuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgOiBwdWJsaWMgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlIHsKIH07CiAKLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8v
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAkocmV2aXNpb24gNTY0MzgpCShm
cm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJv
dmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Fs
bG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVy
cm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRl
cyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9u
U2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1
cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BV
cGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQg
YnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAw
OworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRl
ciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vi
c2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0
YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25T
ZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdl
KGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCShyZXZpc2lvbiA1NjQzOCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDI5ICsyOCwxOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKLSNkZWZpbmUgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBXZWJHZW9sb2NhdGlvblNlcnZpY2Vf
aAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTsKLX0KKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaCIK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsK
IAotLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCi1jbGFz
cyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExh
c3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVl
ZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci19OwotCiAv
LyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KLWNsYXNzIFdlYkdl
b2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2Ug
ewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSkgPSAwOwpAQCAtNjAsMTQgKzQ5LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIEF0
dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMg
aXRzIGlkLCB3aGljaAogICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMg
Zm9yIHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
KSA9IDA7CisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CiAKICAgICAvLyBEZXR0YWNo
ZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KICAgICB2aXJ0dWFs
IHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKIH07CiAKLVdlYkNvcmU6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gK
KyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UuaAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNk
ZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0
cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBi
eSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUg
YWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVB
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3Zp
ZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5
IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlk
LCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5n
KGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdl
b2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNo
CisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhv
ZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAg
IC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgor
ICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKwor
V2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKKyNk
ZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtNDQsMzAgKzQ0LDI3IEBAIGNs
YXNzIFdlYlVSTDsKIC8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVk
ZGVyLgogY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKIHB1YmxpYzoKKyAgICBz
dHJ1Y3QgV2ViR2VvcG9zaXRpb24geworICAgICAgZG91YmxlIGxhdGl0dWRlOworICAgICAgZG91
YmxlIGxvbmdpdHVkZTsKKyAgICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZTsKKyAgICAgIGRvdWJs
ZSBhbHRpdHVkZTsKKyAgICAgIGRvdWJsZSBhY2N1cmFjeTsKKyAgICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5OworICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3k7CisgICAgICBi
b29sIHByb3ZpZGVzSGVhZGluZzsKKyAgICAgIGRvdWJsZSBoZWFkaW5nOworICAgICAgYm9vbCBw
cm92aWRlc1NwZWVkOworICAgICAgZG91YmxlIHNwZWVkOworICAgICAgbG9uZyBsb25nIHRpbWVz
dGFtcDsKKyAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2Vk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihjb25zdCBXZWJHZW9wb3Np
dGlvbiYgZ2VvcG9zaXRpb24pID0gMDsKKyAgICAvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlz
IG1ldGhvZC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBX
ZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQ
SSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNl
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShp
bnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVI
aWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlk
Z2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRh
Y2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0
cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZv
ciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkg
PSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUg
ZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9
IDA7Ci19OwotCi1XZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0qKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwog
ICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXdDbGllbnQuaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBX
ZWJWaWV3Q2xpZW50X2gKICNkZWZpbmUgV2ViVmlld0NsaWVudF9oCiAKKyNpbmNsdWRlICJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRmlsZUNo
b29zZXJDb21wbGV0aW9uLmgiCkBAIC00Niw3ICs0Nyw2IEBAIGNsYXNzIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q7CiBjbGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbjsKIGNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNs
YXNzIFdlYlJhbmdlOwpAQCAtNjIsMjM2ICs2MiwzMDAgQEAgc3RydWN0IFdlYlBvcHVwTWVudUlu
Zm87CiAvLyBTaW5jZSBhIFdlYlZpZXcgaXMgYSBXZWJXaWRnZXQsIGEgV2ViVmlld0NsaWVudCBp
cyBhIFdlYldpZGdldENsaWVudC4KIC8vIFZpcnR1YWwgaW5oZXJpdGFuY2UgYWxsb3dzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIFdlYldpZGdldENsaWVudCB0byBiZQogLy8gZWFzaWx5IHJldXNlZCBh
cyBwYXJ0IG9mIGFuIGltcGxlbWVudGF0aW9uIG9mIFdlYlZpZXdDbGllbnQuCi1jbGFzcyBXZWJW
aWV3Q2xpZW50IDogdmlydHVhbCBwdWJsaWMgV2ViV2lkZ2V0Q2xpZW50IHsKK2NsYXNzIFdlYlZp
ZXdDbGllbnQ6IHZpcnR1YWwgcHVibGljIFdlYldpZGdldENsaWVudCB7CiBwdWJsaWM6Ci0gICAg
Ly8gRmFjdG9yeSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgIC8vIEZhY3RvcnkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgLy8gQ3JlYXRlIGEgbmV3
IHJlbGF0ZWQgV2ViVmlldy4gIFRoaXMgbWV0aG9kIG11c3QgY2xvbmUgaXRzIHNlc3Npb24gc3Rv
cmFnZQotICAgIC8vIHNvIGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIGNyZWF0ZVNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlIGNvbmZvcm0gdG8gdGhlCi0gICAgLy8gV2ViU3RvcmFnZSBzcGVjaWZpY2F0
aW9uLgotICAgIHZpcnR1YWwgV2ViVmlldyogY3JlYXRlVmlldyhXZWJGcmFtZSogY3JlYXRvcikg
eyByZXR1cm4gMDsgfQotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IFdlYlBvcHVwTWVudS4gIEluIHRo
ZSBzZWNvbmQgZm9ybSwgdGhlIGNsaWVudCBpcwotICAgIC8vIHJlc3BvbnNpYmxlIGZvciByZW5k
ZXJpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwb3B1cCBtZW51LgotICAgIHZpcnR1YWwgV2ViV2lk
Z2V0KiBjcmVhdGVQb3B1cE1lbnUoYm9vbCBhY3RpdmF0YWJsZSkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgV2ViV2lkZ2V0KiBjcmVhdGVQb3B1cE1lbnUoY29uc3QgV2ViUG9wdXBNZW51SW5m
byYpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIENyZWF0ZSBhIHNlc3Npb24gc3RvcmFnZSBuYW1l
c3BhY2Ugb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFdlYlZpZXcuCi0gICAgdmlydHVhbCBX
ZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpIHsgcmV0
dXJuIDA7IH0KLQotICAgIC8vIE1pc2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gQSBuZXcgbWVzc2FnZSB3
YXMgYWRkZWQgdG8gdGhlIGNvbnNvbGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZE1lc3NhZ2VU
b0NvbnNvbGUoCi0gICAgICAgIGNvbnN0IFdlYkNvbnNvbGVNZXNzYWdlJiwgY29uc3QgV2ViU3Ry
aW5nJiBzb3VyY2VOYW1lLCB1bnNpZ25lZCBzb3VyY2VMaW5lKSB7IH0KLQotICAgIC8vIENhbGxl
ZCB3aGVuIHNjcmlwdCBpbiB0aGUgcGFnZSBjYWxscyB3aW5kb3cucHJpbnQoKS4gIElmIGZyYW1l
IGlzCi0gICAgLy8gbm9uLW51bGwsIHRoZW4gaXQgc2VsZWN0cyBhIHBhcnRpY3VsYXIgZnJhbWUs
IGluY2x1ZGluZyBpdHMKLSAgICAvLyBjaGlsZHJlbiwgdG8gcHJpbnQuICBPdGhlcndpc2UsIHRo
ZSBtYWluIGZyYW1lIGFuZCBpdHMgY2hpbGRyZW4KLSAgICAvLyBzaG91bGQgYmUgcHJpbnRlZC4K
LSAgICB2aXJ0dWFsIHZvaWQgcHJpbnRQYWdlKFdlYkZyYW1lKikgeyB9Ci0KLSAgICAvLyBDYWxs
ZWQgdG8gcmV0cmlldmUgdGhlIHByb3ZpZGVyIG9mIGRlc2t0b3Agbm90aWZpY2F0aW9ucy4KLSAg
ICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVy
KCkgeyByZXR1cm4gMDsgfQotCi0KLSAgICAvLyBOYXZpZ2F0aW9uYWwgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFRoZXNl
IG5vdGlmaWNhdGlvbnMgYnJhY2tldCBhbnkgbG9hZGluZyB0aGF0IG9jY3VycyBpbiB0aGUgV2Vi
Vmlldy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFN0b3BMb2FkaW5nKCkgeyB9Ci0KLQotICAgIC8vIEVkaXRpbmcgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLy8gVGhlc2UgbWV0aG9kcyBhbGxvdyB0aGUgY2xpZW50IHRvIGludGVyY2VwdCBhbmQgb3Zl
cnJ1bGUgZWRpdGluZwotICAgIC8vIG9wZXJhdGlvbnMuCi0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEJlZ2luRWRpdGluZyhjb25zdCBXZWJSYW5nZSYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJSYW5nZSYpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZSgKLSAgICAgICAgY29uc3QgV2Vi
Tm9kZSYsIGNvbnN0IFdlYlJhbmdlJiwgV2ViRWRpdGluZ0FjdGlvbikgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KAotICAgICAgICBjb25zdCBXZWJT
dHJpbmcmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVkaXRpbmdBY3Rpb24pIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSgKLSAgICAgICAg
Y29uc3QgV2ViUmFuZ2UmIGZyb20sIGNvbnN0IFdlYlJhbmdlJiB0bywgV2ViVGV4dEFmZmluaXR5
LAotICAgICAgICBib29sIHN0aWxsU2VsZWN0aW5nKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IFdlYlJhbmdlJikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYlN0cmluZyYg
c3R5bGUsIGNvbnN0IFdlYlJhbmdlJikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBi
b29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJs
ZWQpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZEJlZ2luRWRpdGluZygpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oYm9vbCBpc1NlbGVjdGlvbkVtcHR5KSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHMoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkRXhlY3V0ZUNvbW1hbmQoY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kTmFtZSkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKSB7IH0KLQotICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byBXZWJWaWV3J3MgaGFuZGxlSW5wdXRFdmVudCgpCi0g
ICAgLy8gd2hlbiB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2
ZW50IGlzIG5vdAotICAgIC8vIHN1cHByZXNzZWQgYnkgdGhlIHBhZ2UsIHRvIGdpdmUgdGhlIGVt
YmVkZGVyIGEgY2hhbmNlIHRvIGhhbmRsZQotICAgIC8vIHRoZSBrZXlib2FyZCBldmVudCBzcGVj
aWFsbHkuCi0gICAgLy8KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGtleWJvYXJkIGV2ZW50
IHdhcyBoYW5kbGVkIGJ5IHRoZSBlbWJlZGRlciwKLSAgICAvLyBpbmRpY2F0aW5nIHRoYXQgdGhl
IGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSBzdXBwcmVzc2VkLgotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVDdXJyZW50S2V5Ym9hcmRFdmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLQotICAgIC8v
IFNwZWxsY2hlY2tlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgLy8gVGhlIGNsaWVudCBzaG91bGQgcGVyZm9ybSBzcGVsbC1j
aGVja2luZyBvbiB0aGUgZ2l2ZW4gdGV4dC4gIElmIHRoZQotICAgIC8vIHRleHQgY29udGFpbnMg
YSBtaXNzcGVsbGVkIHdvcmQsIHRoZW4gdXBvbiByZXR1cm4gbWlzc3BlbGxlZE9mZnNldAotICAg
IC8vIHdpbGwgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtaXNzcGVsbGVkIHdvcmQsIGFuZCBt
aXNzcGVsbGVkTGVuZ3RoCi0gICAgLy8gd2lsbCBpbmRpY2F0ZXMgaXRzIGxlbmd0aC4gIE90aGVy
d2lzZSwgaWYgdGhlcmUgd2FzIG5vdCBhIHNwZWxsaW5nCi0gICAgLy8gZXJyb3IsIHRoZW4gdXBv
biByZXR1cm4gbWlzc3BlbGxlZExlbmd0aCBpcyAwLgotICAgIHZpcnR1YWwgdm9pZCBzcGVsbENo
ZWNrKAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHRleHQsIGludCYgbWlzc3BlbGxlZE9mZnNl
dCwgaW50JiBtaXNzcGVsbGVkTGVuZ3RoKSB7IH0KLQotICAgIC8vIENvbXB1dGVzIGFuIGF1dG8t
Y29ycmVjdGVkIHJlcGxhY2VtZW50IGZvciBhIG1pc3NwZWxsZWQgd29yZC4gIElmIG5vCi0gICAg
Ly8gcmVwbGFjZW1lbnQgaXMgZm91bmQsIHRoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVk
LgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJTdHJpbmcm
IG1pc3NwZWxsZWRXb3JkKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotCi0gICAgLy8gU2hvdyBv
ciBoaWRlIHRoZSBzcGVsbGluZyBVSS4KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUko
Ym9vbCBzaG93KSB7IH0KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlbGxpbmcgVUkg
aXMgc2hvd2luZy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nU3BlbGxpbmdVSSgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIFVJIHdpdGggdGhlIGdp
dmVuIHdvcmQuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoY29uc3QgV2ViU3RyaW5nJiB3b3JkKSB7IH0KLQotCi0gICAgLy8gRGlhbG9ncyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGltbWVkaWF0ZWx5IGFmdGVyIHNob3dpbmcg
dGhlIGRpYWxvZy4gV2hlbiB0aGUKLSAgICAvLyBkaWFsb2cgaXMgY2xvc2VkLCBpdCBzaG91bGQg
Y2FsbCB0aGUgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uIHRvCi0gICAgLy8gcGFzcyB0aGUgcmVz
dWx0cyBvZiB0aGUgZGlhbG9nLiBSZXR1cm5zIGZhbHNlIGlmCi0gICAgLy8gV2ViRmlsZUNob29z
ZUNvbXBsZXRpb24gd2lsbCBuZXZlciBiZSBjYWxsZWQuCi0gICAgdmlydHVhbCBib29sIHJ1bkZp
bGVDaG9vc2VyKGNvbnN0IFdlYkZpbGVDaG9vc2VyUGFyYW1zJiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uKikgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIC8vIERpc3BsYXlzIGEgbW9kYWwgYWxlcnQgZGlhbG9nIGNvbnRhaW5pbmcgdGhl
IGdpdmVuIG1lc3NhZ2UuICBSZXR1cm5zCi0gICAgLy8gb25jZSB0aGUgdXNlciBkaXNtaXNzZXMg
dGhlIGRpYWxvZy4KLSAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWxBbGVydERpYWxvZygKLSAgICAg
ICAgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsgfQotCi0gICAgLy8gRGlz
cGxheXMgYSBtb2RhbCBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2Ug
YXMKLSAgICAvLyBkZXNjcmlwdGlvbiBhbmQgT0svQ2FuY2VsIGNob2ljZXMuICBSZXR1cm5zIHRy
dWUgaWYgdGhlIHVzZXIgc2VsZWN0cwotICAgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3aXNlLgot
ICAgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbENvbmZpcm1EaWFsb2coCi0gICAgICAgIFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8g
RGlzcGxheXMgYSBtb2RhbCBpbnB1dCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhcyBk
ZXNjcmlwdGlvbgotICAgIC8vIGFuZCBPSy9DYW5jZWwgY2hvaWNlcy4gIFRoZSBpbnB1dCBmaWVs
ZCBpcyBwcmUtZmlsbGVkIHdpdGgKLSAgICAvLyBkZWZhdWx0VmFsdWUuICBSZXR1cm5zIHRydWUg
aWYgdGhlIHVzZXIgc2VsZWN0cyAnT0snIG9yIGZhbHNlCi0gICAgLy8gb3RoZXJ3aXNlLiAgVXBv
biByZXR1cm5pbmcgdHJ1ZSwgYWN0dWFsVmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIG9mCi0gICAg
Ly8gdGhlIGlucHV0IGZpZWxkLgotICAgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbFByb21wdERpYWxv
ZygKLSAgICAgICAgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdl
YlN0cmluZyYgZGVmYXVsdFZhbHVlLAotICAgICAgICBXZWJTdHJpbmcqIGFjdHVhbFZhbHVlKSB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRGlzcGxheXMgYSBtb2RhbCBjb25maXJtYXRpb24g
ZGlhbG9nIGNvbnRhaW5pbmcgdGhlIGdpdmVuIG1lc3NhZ2UgYXMKLSAgICAvLyBkZXNjcmlwdGlv
biBhbmQgT0svQ2FuY2VsIGNob2ljZXMsIHdoZXJlICdPSycgbWVhbnMgdGhhdCBpdCBpcyBva2F5
Ci0gICAgLy8gdG8gcHJvY2VlZCB3aXRoIGNsb3NpbmcgdGhlIHZpZXcuICBSZXR1cm5zIHRydWUg
aWYgdGhlIHVzZXIgc2VsZWN0cwotICAgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3aXNlLgotICAg
IHZpcnR1YWwgYm9vbCBydW5Nb2RhbEJlZm9yZVVubG9hZERpYWxvZygKLSAgICAgICAgV2ViRnJh
bWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsgcmV0dXJuIHRydWU7IH0KLQotCi0gICAg
Ly8gVUkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBDYWxsZWQgd2hlbiBzY3JpcHQgbW9kaWZpZXMgd2lu
ZG93LnN0YXR1cwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYlN0cmlu
ZyYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gaG92ZXJpbmcgb3ZlciBhbiBhbmNob3Igd2l0
aCB0aGUgZ2l2ZW4gVVJMLgotICAgIHZpcnR1YWwgdm9pZCBzZXRNb3VzZU92ZXJVUkwoY29uc3Qg
V2ViVVJMJikgeyB9Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBrZXlib2FyZCBmb2N1cyBzd2l0Y2hl
cyB0byBhbiBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gVVJMLgotICAgIHZpcnR1YWwgdm9pZCBzZXRL
ZXlib2FyZEZvY3VzVVJMKGNvbnN0IFdlYlVSTCYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4g
YSB0b29sdGlwIHNob3VsZCBiZSBzaG93biBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24u
Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXBUZXh0KGNvbnN0IFdlYlN0cmluZyYsIFdlYlRl
eHREaXJlY3Rpb24gaGludCkgeyB9Ci0KLSAgICAvLyBTaG93cyBhIGNvbnRleHQgbWVudSB3aXRo
IGNvbW1hbmRzIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgZWxlbWVudCBvbgotICAgIC8vIHRoZSBn
aXZlbiBmcmFtZS4gQWRkaXRpb25hbCBjb250ZXh0IGRhdGEgaXMgc3VwcGxpZWQuCi0gICAgdmly
dHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShXZWJGcmFtZSosIGNvbnN0IFdlYkNvbnRleHRNZW51
RGF0YSYpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24g
c2hvdWxkIGJlZ2luLgotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWdnaW5nKAotICAgICAgICBj
b25zdCBXZWJQb2ludCYgZnJvbSwgY29uc3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9u
c01hc2spIHsgfQotCi0gICAgLy8gQ2FsbGVkIHRvIGRldGVybWluZSBpZiBkcmFnLW4tZHJvcCBv
cGVyYXRpb25zIG1heSBpbml0aWF0ZSBhIHBhZ2UKLSAgICAvLyBuYXZpZ2F0aW9uLgotICAgIHZp
cnR1YWwgYm9vbCBhY2NlcHRzTG9hZERyb3BzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8g
VGFrZSBmb2N1cyBhd2F5IGZyb20gdGhlIFdlYlZpZXcgYnkgZm9jdXNpbmcgYW4gYWRqYWNlbnQg
VUkgZWxlbWVudAotICAgIC8vIGluIHRoZSBjb250YWluaW5nIHdpbmRvdy4KLSAgICB2aXJ0dWFs
IHZvaWQgZm9jdXNOZXh0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZvY3VzUHJldmlvdXMoKSB7
IH0KLQotCi0gICAgLy8gU2Vzc2lvbiBoaXN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBUZWxscyB0aGUgZW1iZWRkZXIg
dG8gbmF2aWdhdGUgYmFjayBvciBmb3J3YXJkIGluIHNlc3Npb24gaGlzdG9yeSBieQotICAgIC8v
IHRoZSBnaXZlbiBvZmZzZXQgKHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHNl
c3Npb24KLSAgICAvLyBoaXN0b3J5KS4KLSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9y
d2FyZFNvb24oaW50IG9mZnNldCkgeyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
aGlzdG9yeSBpdGVtcyBiZWZvcmUvYWZ0ZXIgdGhlIGN1cnJlbnQKLSAgICAvLyBoaXN0b3J5IGl0
ZW0uCi0gICAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tMaXN0Q291bnQoKSB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBpbnQgaGlzdG9yeUZvcndhcmRMaXN0Q291bnQoKSB7IHJldHVybiAwOyB9
Ci0KLSAgICAvLyBDYWxsZWQgdG8gbm90aWZ5IHRoZSBlbWJlZGRlciB3aGVuIGEgbmV3IGhpc3Rv
cnkgaXRlbSBpcyBhZGRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSGlzdG9yeUl0ZW0oKSB7
IH0KLQotCi0gICAgLy8gQWNjZXNzaWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBOb3RpZmllcyBlbWJlZGRlciB0
aGF0IHRoZSBmb2N1cyBoYXMgY2hhbmdlZCB0byB0aGUgZ2l2ZW4KLSAgICAvLyBhY2Nlc3NpYmls
aXR5IG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgZm9jdXNBY2Nlc3NpYmlsaXR5T2JqZWN0KGNv
bnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSB7IH0KLQotICAgIC8vIE5vdGlmaWVzIGVtYmVk
ZGVyIHRoYXQgdGhlIHN0YXRlIG9mIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGhhcyBjaGFuZ2Vk
LgotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0U3RhdGUoY29u
c3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpIHsgfQotCi0KLSAgICAvLyBEZXZlbG9wZXIgdG9v
bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgIC8vIENhbGxlZCB0byBub3RpZnkgdGhlIGNsaWVudCB0aGF0IHRoZSBpbnNwZWN0b3In
cyBzZXR0aW5ncyB3ZXJlCi0gICAgLy8gY2hhbmdlZCBhbmQgc2hvdWxkIGJlIHNhdmVkLiAgU2Vl
IFdlYlZpZXc6Omluc3BlY3RvclNldHRpbmdzLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVJ
bnNwZWN0b3JTZXR0aW5ncygpIHsgfQotCi0KLSAgICAvLyBBdXRvZmlsbCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8v
IFF1ZXJpZXMgdGhlIGJyb3dzZXIgZm9yIHN1Z2dlc3Rpb25zIHRvIGJlIHNob3duIGZvciB0aGUg
Zm9ybSB0ZXh0Ci0gICAgLy8gZmllbGQgbmFtZWQgfG5hbWV8LiAgfHZhbHVlfCBpcyB0aGUgdGV4
dCBlbnRlcmVkIGJ5IHRoZSB1c2VyIHNvCi0gICAgLy8gZmFyIGFuZCB0aGUgV2ViTm9kZSBjb3Jy
ZXNwb25kcyB0byB0aGUgaW5wdXQgZmllbGQuCi0gICAgdmlydHVhbCB2b2lkIHF1ZXJ5QXV0b2Zp
bGxTdWdnZXN0aW9ucyhjb25zdCBXZWJOb2RlJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQotCi0g
ICAgLy8gSW5zdHJ1Y3RzIHRoZSBicm93c2VyIHRvIHJlbW92ZSB0aGUgYXV0b2ZpbGwgZW50cnkg
c3BlY2lmaWVkIGZyb20KLSAgICAvLyBpdHMgREIuCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUF1
dG9maWxsU3VnZ2VzdGlvbnMoY29uc3QgV2ViU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQot
Ci0gICAgLy8gSW5mb3JtcyB0aGUgYnJvd3NlciB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBh
biBBdXRvRmlsbCBzdWdnZXN0aW9uCi0gICAgLy8gZm9yIGEgV2ViTm9kZS4gIHxuYW1lfCBhbmQg
fGxhYmVsfCBmb3JtIGEga2V5IGludG8gdGhlIHNldCBvZiBBdXRvRmlsbAotICAgIC8vIHByb2Zp
bGVzLgotICAgIHZpcnR1YWwgdm9pZCBkaWRBY2NlcHRBdXRvRmlsbFN1Z2dlc3Rpb24oY29uc3Qg
V2ViTm9kZSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxhYmVsKSB7IH0KLQotICAgIC8vIEdlb2xvY2F0
aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGdlb2xvY2F0aW9uIHNl
cnZpY2VzLgotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZh
Y2UqIGdldEdlb2xvY2F0aW9uU2VydmljZSgpIHsgcmV0dXJuIDA7IH0KKyAgLy8gQ3JlYXRlIGEg
bmV3IHJlbGF0ZWQgV2ViVmlldy4gIFRoaXMgbWV0aG9kIG11c3QgY2xvbmUgaXRzIHNlc3Npb24g
c3RvcmFnZQorICAvLyBzbyBhbnkgc3Vic2VxdWVudCBjYWxscyB0byBjcmVhdGVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSBjb25mb3JtIHRvIHRoZQorICAvLyBXZWJTdG9yYWdlIHNwZWNpZmljYXRp
b24uCisgIHZpcnR1YWwgV2ViVmlldyogY3JlYXRlVmlldyhXZWJGcmFtZSogY3JlYXRvcikgewor
ICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ3JlYXRlIGEgbmV3IFdlYlBvcHVwTWVudS4gIElu
IHRoZSBzZWNvbmQgZm9ybSwgdGhlIGNsaWVudCBpcworICAvLyByZXNwb25zaWJsZSBmb3IgcmVu
ZGVyaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcG9wdXAgbWVudS4KKyAgdmlydHVhbCBXZWJXaWRn
ZXQqIGNyZWF0ZVBvcHVwTWVudShib29sIGFjdGl2YXRhYmxlKSB7CisgICAgcmV0dXJuIDA7Cisg
IH0KKyAgdmlydHVhbCBXZWJXaWRnZXQqIGNyZWF0ZVBvcHVwTWVudShjb25zdCBXZWJQb3B1cE1l
bnVJbmZvJikgeworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ3JlYXRlIGEgc2Vzc2lvbiBz
dG9yYWdlIG5hbWVzcGFjZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgV2ViVmlldy4KKyAg
dmlydHVhbCBXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSgpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8vIE1pc2MgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIEEg
bmV3IG1lc3NhZ2Ugd2FzIGFkZGVkIHRvIHRoZSBjb25zb2xlLgorICB2aXJ0dWFsIHZvaWQgZGlk
QWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2FnZSYsIGNvbnN0IFdlYlN0
cmluZyYgc291cmNlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc291cmNlTGluZSkgeworICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gc2NyaXB0IGlu
IHRoZSBwYWdlIGNhbGxzIHdpbmRvdy5wcmludCgpLiAgSWYgZnJhbWUgaXMKKyAgLy8gbm9uLW51
bGwsIHRoZW4gaXQgc2VsZWN0cyBhIHBhcnRpY3VsYXIgZnJhbWUsIGluY2x1ZGluZyBpdHMKKyAg
Ly8gY2hpbGRyZW4sIHRvIHByaW50LiAgT3RoZXJ3aXNlLCB0aGUgbWFpbiBmcmFtZSBhbmQgaXRz
IGNoaWxkcmVuCisgIC8vIHNob3VsZCBiZSBwcmludGVkLgorICB2aXJ0dWFsIHZvaWQgcHJpbnRQ
YWdlKFdlYkZyYW1lKikgeworICB9CisKKyAgLy8gQ2FsbGVkIHRvIHJldHJpZXZlIHRoZSBwcm92
aWRlciBvZiBkZXNrdG9wIG5vdGlmaWNhdGlvbnMuCisgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSB7CisgICAgcmV0dXJuIDA7CisgIH0K
KworICAvLyBOYXZpZ2F0aW9uYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBUaGVzZSBub3RpZmljYXRpb25zIGJyYWNrZXQg
YW55IGxvYWRpbmcgdGhhdCBvY2N1cnMgaW4gdGhlIFdlYlZpZXcuCisgIHZpcnR1YWwgdm9pZCBk
aWRTdGFydExvYWRpbmcoKSB7CisgIH0KKyAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2FkaW5nKCkg
eworICB9CisKKyAgLy8gRWRpdGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gVGhlc2UgbWV0aG9kcyBhbGxvdyB0
aGUgY2xpZW50IHRvIGludGVyY2VwdCBhbmQgb3ZlcnJ1bGUgZWRpdGluZworICAvLyBvcGVyYXRp
b25zLgorICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYlJhbmdlJikg
eworICAgIHJldHVybiB0cnVlOworICB9CisgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5n
KGNvbnN0IFdlYlJhbmdlJikgeworICAgIHJldHVybiB0cnVlOworICB9CisgIHZpcnR1YWwgYm9v
bCBzaG91bGRJbnNlcnROb2RlKGNvbnN0IFdlYk5vZGUmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVk
aXRpbmdBY3Rpb24pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSW5zZXJ0VGV4dChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJSYW5nZSYsIFdlYkVkaXRp
bmdBY3Rpb24pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIGJvb2wgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBXZWJSYW5nZSYgZnJvbSwgY29uc3QgV2ViUmFuZ2Um
IHRvLCBXZWJUZXh0QWZmaW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3RpbGxTZWxlY3RpbmcpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgdmlydHVhbCBib29sIHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2Vi
U3RyaW5nJiBzdHlsZSwgY29uc3QgV2ViUmFuZ2UmKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KworICB2aXJ0dWFsIGJvb2wgaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgdmlydHVhbCBib29sIGlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNl
RW5hYmxlZCgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlZCkgeworICB9CisKKyAgdmlydHVhbCB2b2lkIGRp
ZEJlZ2luRWRpdGluZygpIHsKKyAgfQorICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9u
KGJvb2wgaXNTZWxlY3Rpb25FbXB0eSkgeworICB9CisgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50cygpIHsKKyAgfQorICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZUNvbW1hbmQoY29uc3Qg
V2ViU3RyaW5nJiBjb21tYW5kTmFtZSkgeworICB9CisgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0
aW5nKCkgeworICB9CisKKyAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRv
IFdlYlZpZXcncyBoYW5kbGVJbnB1dEV2ZW50KCkKKyAgLy8gd2hlbiB0aGUgZGVmYXVsdCBhY3Rp
b24gZm9yIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2ZW50IGlzIG5vdAorICAvLyBzdXBwcmVzc2Vk
IGJ5IHRoZSBwYWdlLCB0byBnaXZlIHRoZSBlbWJlZGRlciBhIGNoYW5jZSB0byBoYW5kbGUKKyAg
Ly8gdGhlIGtleWJvYXJkIGV2ZW50IHNwZWNpYWxseS4KKyAgLy8KKyAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBrZXlib2FyZCBldmVudCB3YXMgaGFuZGxlZCBieSB0aGUgZW1iZWRkZXIsCisgIC8v
IGluZGljYXRpbmcgdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHN1cHByZXNzZWQu
CisgIHZpcnR1YWwgYm9vbCBoYW5kbGVDdXJyZW50S2V5Ym9hcmRFdmVudCgpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICAvLyBTcGVsbGNoZWNrZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBUaGUgY2xpZW50IHNo
b3VsZCBwZXJmb3JtIHNwZWxsLWNoZWNraW5nIG9uIHRoZSBnaXZlbiB0ZXh0LiAgSWYgdGhlCisg
IC8vIHRleHQgY29udGFpbnMgYSBtaXNzcGVsbGVkIHdvcmQsIHRoZW4gdXBvbiByZXR1cm4gbWlz
c3BlbGxlZE9mZnNldAorICAvLyB3aWxsIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgbWlzc3Bl
bGxlZCB3b3JkLCBhbmQgbWlzc3BlbGxlZExlbmd0aAorICAvLyB3aWxsIGluZGljYXRlcyBpdHMg
bGVuZ3RoLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSB3YXMgbm90IGEgc3BlbGxpbmcKKyAgLy8gZXJy
b3IsIHRoZW4gdXBvbiByZXR1cm4gbWlzc3BlbGxlZExlbmd0aCBpcyAwLgorICB2aXJ0dWFsIHZv
aWQgc3BlbGxDaGVjayhjb25zdCBXZWJTdHJpbmcmIHRleHQsIGludCYgbWlzc3BlbGxlZE9mZnNl
dCwgaW50JiBtaXNzcGVsbGVkTGVuZ3RoKSB7CisgIH0KKworICAvLyBDb21wdXRlcyBhbiBhdXRv
LWNvcnJlY3RlZCByZXBsYWNlbWVudCBmb3IgYSBtaXNzcGVsbGVkIHdvcmQuICBJZiBubworICAv
LyByZXBsYWNlbWVudCBpcyBmb3VuZCwgdGhlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQu
CisgIHZpcnR1YWwgV2ViU3RyaW5nIGF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJTdHJpbmcmIG1p
c3NwZWxsZWRXb3JkKSB7CisgICAgcmV0dXJuIFdlYlN0cmluZygpOworICB9CisKKyAgLy8gU2hv
dyBvciBoaWRlIHRoZSBzcGVsbGluZyBVSS4KKyAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJ
KGJvb2wgc2hvdykgeworICB9CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVsbGluZyBV
SSBpcyBzaG93aW5nLgorICB2aXJ0dWFsIGJvb2wgaXNTaG93aW5nU3BlbGxpbmdVSSgpIHsKKyAg
ICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIFVJIHdpdGgg
dGhlIGdpdmVuIHdvcmQuCisgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFdlYlN0cmluZyYgd29yZCkgeworICB9CisKKyAgLy8gRGlhbG9ncyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSBhZnRlciBzaG93aW5n
IHRoZSBkaWFsb2cuIFdoZW4gdGhlCisgIC8vIGRpYWxvZyBpcyBjbG9zZWQsIGl0IHNob3VsZCBj
YWxsIHRoZSBXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb24gdG8KKyAgLy8gcGFzcyB0aGUgcmVzdWx0
cyBvZiB0aGUgZGlhbG9nLiBSZXR1cm5zIGZhbHNlIGlmCisgIC8vIFdlYkZpbGVDaG9vc2VDb21w
bGV0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLgorICB2aXJ0dWFsIGJvb2wgcnVuRmlsZUNob29z
ZXIoY29uc3QgV2ViRmlsZUNob29zZXJQYXJhbXMmLCBXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb24q
KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gRGlzcGxheXMgYSBtb2RhbCBhbGVy
dCBkaWFsb2cgY29udGFpbmluZyB0aGUgZ2l2ZW4gbWVzc2FnZS4gIFJldHVybnMKKyAgLy8gb25j
ZSB0aGUgdXNlciBkaXNtaXNzZXMgdGhlIGRpYWxvZy4KKyAgdmlydHVhbCB2b2lkIHJ1bk1vZGFs
QWxlcnREaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpIHsKKyAgfQor
CisgIC8vIERpc3BsYXlzIGEgbW9kYWwgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIHRoZSBnaXZl
biBtZXNzYWdlIGFzCisgIC8vIGRlc2NyaXB0aW9uIGFuZCBPSy9DYW5jZWwgY2hvaWNlcy4gIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBzZWxlY3RzCisgIC8vICdPSycgb3IgZmFsc2Ugb3RoZXJ3
aXNlLgorICB2aXJ0dWFsIGJvb2wgcnVuTW9kYWxDb25maXJtRGlhbG9nKFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBtZXNzYWdlKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8g
RGlzcGxheXMgYSBtb2RhbCBpbnB1dCBkaWFsb2cgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhcyBk
ZXNjcmlwdGlvbgorICAvLyBhbmQgT0svQ2FuY2VsIGNob2ljZXMuICBUaGUgaW5wdXQgZmllbGQg
aXMgcHJlLWZpbGxlZCB3aXRoCisgIC8vIGRlZmF1bHRWYWx1ZS4gIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdXNlciBzZWxlY3RzICdPSycgb3IgZmFsc2UKKyAgLy8gb3RoZXJ3aXNlLiAgVXBvbiByZXR1
cm5pbmcgdHJ1ZSwgYWN0dWFsVmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIG9mCisgIC8vIHRoZSBp
bnB1dCBmaWVsZC4KKyAgdmlydHVhbCBib29sIHJ1bk1vZGFsUHJvbXB0RGlhbG9nKFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYlN0cmluZyogYWN0dWFs
VmFsdWUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBEaXNwbGF5cyBhIG1vZGFs
IGNvbmZpcm1hdGlvbiBkaWFsb2cgY29udGFpbmluZyB0aGUgZ2l2ZW4gbWVzc2FnZSBhcworICAv
LyBkZXNjcmlwdGlvbiBhbmQgT0svQ2FuY2VsIGNob2ljZXMsIHdoZXJlICdPSycgbWVhbnMgdGhh
dCBpdCBpcyBva2F5CisgIC8vIHRvIHByb2NlZWQgd2l0aCBjbG9zaW5nIHRoZSB2aWV3LiAgUmV0
dXJucyB0cnVlIGlmIHRoZSB1c2VyIHNlbGVjdHMKKyAgLy8gJ09LJyBvciBmYWxzZSBvdGhlcndp
c2UuCisgIHZpcnR1YWwgYm9vbCBydW5Nb2RhbEJlZm9yZVVubG9hZERpYWxvZyhXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAg
Ly8gVUkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gQ2FsbGVkIHdoZW4gc2NyaXB0IG1vZGlmaWVzIHdpbmRv
dy5zdGF0dXMKKyAgdmlydHVhbCB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJikg
eworICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gaG92ZXJpbmcgb3ZlciBhbiBhbmNob3Igd2l0aCB0
aGUgZ2l2ZW4gVVJMLgorICB2aXJ0dWFsIHZvaWQgc2V0TW91c2VPdmVyVVJMKGNvbnN0IFdlYlVS
TCYpIHsKKyAgfQorCisgIC8vIENhbGxlZCB3aGVuIGtleWJvYXJkIGZvY3VzIHN3aXRjaGVzIHRv
IGFuIGFuY2hvciB3aXRoIHRoZSBnaXZlbiBVUkwuCisgIHZpcnR1YWwgdm9pZCBzZXRLZXlib2Fy
ZEZvY3VzVVJMKGNvbnN0IFdlYlVSTCYpIHsKKyAgfQorCisgIC8vIENhbGxlZCB3aGVuIGEgdG9v
bHRpcCBzaG91bGQgYmUgc2hvd24gYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgorICB2
aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcFRleHQoY29uc3QgV2ViU3RyaW5nJiwgV2ViVGV4dERpcmVj
dGlvbiBoaW50KSB7CisgIH0KKworICAvLyBTaG93cyBhIGNvbnRleHQgbWVudSB3aXRoIGNvbW1h
bmRzIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgZWxlbWVudCBvbgorICAvLyB0aGUgZ2l2ZW4gZnJh
bWUuIEFkZGl0aW9uYWwgY29udGV4dCBkYXRhIGlzIHN1cHBsaWVkLgorICB2aXJ0dWFsIHZvaWQg
c2hvd0NvbnRleHRNZW51KFdlYkZyYW1lKiwgY29uc3QgV2ViQ29udGV4dE1lbnVEYXRhJikgewor
ICB9CisKKyAgLy8gQ2FsbGVkIHdoZW4gYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24gc2hvdWxkIGJl
Z2luLgorICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnZ2luZyhjb25zdCBXZWJQb2ludCYgZnJvbSwg
Y29uc3QgV2ViRHJhZ0RhdGEmLCBXZWJEcmFnT3BlcmF0aW9uc01hc2spIHsKKyAgfQorCisgIC8v
IENhbGxlZCB0byBkZXRlcm1pbmUgaWYgZHJhZy1uLWRyb3Agb3BlcmF0aW9ucyBtYXkgaW5pdGlh
dGUgYSBwYWdlCisgIC8vIG5hdmlnYXRpb24uCisgIHZpcnR1YWwgYm9vbCBhY2NlcHRzTG9hZERy
b3BzKCkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLy8gVGFrZSBmb2N1cyBhd2F5IGZy
b20gdGhlIFdlYlZpZXcgYnkgZm9jdXNpbmcgYW4gYWRqYWNlbnQgVUkgZWxlbWVudAorICAvLyBp
biB0aGUgY29udGFpbmluZyB3aW5kb3cuCisgIHZpcnR1YWwgdm9pZCBmb2N1c05leHQoKSB7Cisg
IH0KKyAgdmlydHVhbCB2b2lkIGZvY3VzUHJldmlvdXMoKSB7CisgIH0KKworICAvLyBTZXNzaW9u
IGhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAvLyBUZWxscyB0aGUgZW1iZWRkZXIgdG8gbmF2aWdhdGUgYmFjayBvciBmb3J3
YXJkIGluIHNlc3Npb24gaGlzdG9yeSBieQorICAvLyB0aGUgZ2l2ZW4gb2Zmc2V0IChyZWxhdGl2
ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiBzZXNzaW9uCisgIC8vIGhpc3RvcnkpLgorICB2
aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9yd2FyZFNvb24oaW50IG9mZnNldCkgeworICB9CisK
KyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGhpc3RvcnkgaXRlbXMgYmVmb3JlL2FmdGVyIHRo
ZSBjdXJyZW50CisgIC8vIGhpc3RvcnkgaXRlbS4KKyAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tM
aXN0Q291bnQoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgdmlydHVhbCBpbnQgaGlzdG9yeUZv
cndhcmRMaXN0Q291bnQoKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvLyBDYWxsZWQgdG8g
bm90aWZ5IHRoZSBlbWJlZGRlciB3aGVuIGEgbmV3IGhpc3RvcnkgaXRlbSBpcyBhZGRlZC4KKyAg
dmlydHVhbCB2b2lkIGRpZEFkZEhpc3RvcnlJdGVtKCkgeworICB9CisKKyAgLy8gQWNjZXNzaWJp
bGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gTm90aWZpZXMgZW1iZWRkZXIgdGhhdCB0aGUgZm9jdXMgaGFzIGNoYW5nZWQg
dG8gdGhlIGdpdmVuCisgIC8vIGFjY2Vzc2liaWxpdHkgb2JqZWN0LgorICB2aXJ0dWFsIHZvaWQg
Zm9jdXNBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSB7
CisgIH0KKworICAvLyBOb3RpZmllcyBlbWJlZGRlciB0aGF0IHRoZSBzdGF0ZSBvZiBhbiBhY2Nl
c3NpYmlsaXR5IG9iamVjdCBoYXMgY2hhbmdlZC4KKyAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUFj
Y2Vzc2liaWxpdHlPYmplY3RTdGF0ZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jikgewor
ICB9CisKKyAgLy8gRGV2ZWxvcGVyIHRvb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gQ2FsbGVkIHRvIG5vdGlmeSB0aGUgY2xp
ZW50IHRoYXQgdGhlIGluc3BlY3RvcidzIHNldHRpbmdzIHdlcmUKKyAgLy8gY2hhbmdlZCBhbmQg
c2hvdWxkIGJlIHNhdmVkLiAgU2VlIFdlYlZpZXc6Omluc3BlY3RvclNldHRpbmdzLgorICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlSW5zcGVjdG9yU2V0dGluZ3MoKSB7CisgIH0KKworICAvLyBBdXRv
ZmlsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAvLyBRdWVyaWVzIHRoZSBicm93c2VyIGZvciBzdWdnZXN0aW9ucyB0byBi
ZSBzaG93biBmb3IgdGhlIGZvcm0gdGV4dAorICAvLyBmaWVsZCBuYW1lZCB8bmFtZXwuICB8dmFs
dWV8IGlzIHRoZSB0ZXh0IGVudGVyZWQgYnkgdGhlIHVzZXIgc28KKyAgLy8gZmFyIGFuZCB0aGUg
V2ViTm9kZSBjb3JyZXNwb25kcyB0byB0aGUgaW5wdXQgZmllbGQuCisgIHZpcnR1YWwgdm9pZCBx
dWVyeUF1dG9maWxsU3VnZ2VzdGlvbnMoY29uc3QgV2ViTm9kZSYsIGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIHZhbHVlKSB7CisgIH0KKworICAvLyBJbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8gcmVt
b3ZlIHRoZSBhdXRvZmlsbCBlbnRyeSBzcGVjaWZpZWQgZnJvbQorICAvLyBpdHMgREIuCisgIHZp
cnR1YWwgdm9pZCByZW1vdmVBdXRvZmlsbFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkgeworICB9CisKKyAgLy8gSW5mb3JtcyB0aGUgYnJv
d3NlciB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbiBBdXRvRmlsbCBzdWdnZXN0aW9uCisg
IC8vIGZvciBhIFdlYk5vZGUuICB8bmFtZXwgYW5kIHxsYWJlbHwgZm9ybSBhIGtleSBpbnRvIHRo
ZSBzZXQgb2YgQXV0b0ZpbGwKKyAgLy8gcHJvZmlsZXMuCisgIHZpcnR1YWwgdm9pZCBkaWRBY2Nl
cHRBdXRvRmlsbFN1Z2dlc3Rpb24oY29uc3QgV2ViTm9kZSYsIGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIGxhYmVsKSB7CisgIH0KKworICAvLyBHZW9sb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBBY2Nlc3Mg
dGhlIGVtYmVkZGVyIEFQSSBmb3IgZ2VvbG9jYXRpb24gc2VydmljZXMuCisgIHZpcnR1YWwgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlKiBnZW9sb2NhdGlvblNlcnZpY2UoKSB7CisgICAgcmV0dXJuIGdl
dEdlb2xvY2F0aW9uU2VydmljZSgpOworICB9CisKKyAgLy8gVE9ETyhidWxhY2gpOiB0aGlzIGlz
IGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgbGF5ZXIsIHJlbW92ZSBpdC4KKyAgdmlydHVhbCBX
ZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdldEdlb2xvY2F0aW9uU2VydmljZSgpIHsK
KyAgICByZXR1cm4gMDsKKyAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgfldlYlZpZXdDbGllbnQoKSB7
IH0KKyAgfldlYlZpZXdDbGllbnQoKSB7CisgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCShyZXZpc2lv
biA1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgot
I2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisjaW5jbHVkZSAi
V2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
c3VsdC5oIgpAQCAtNjk1LDcgKzY5NSw3IEBAIE5vdGlmaWNhdGlvblByZXNlbnRlciogQ2hyb21l
Q2xpZW50SW1wbDoKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQog
ewogICAgIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBy
ZWludGVycHJldF9jYXN0PEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKj4oZ2VvbG9jYXRpb24t
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpKTsKLSAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5nZXRH
ZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShnZW9sb2NhdGlv
blNlcnZpY2UtPmdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpLT5nZXRCcmlkZ2VJZCgpLCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmdlb2xvY2F0
aW9uU2VydmljZSgpLT5yZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uU2Vydmlj
ZS0+Z2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKCktPmdldEJyaWRnZUlkKCksIGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNpb24gNTY0Mzgp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAi
Q29va2llLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTgz
LDYgKzgyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5j
bHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
R2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBv
c2l0aW9uRXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKLSNpbmNsdWRlICJX
ZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotCi0jaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQotCi11c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKLXVzaW5nIFdlYkNvcmU6OkZyYW1l
OwotdXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2U7Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bTsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsKLXVzaW5nIFdlYkNv
cmU6Okdlb3Bvc2l0aW9uOwotdXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJvcjsKLXVzaW5nIFdl
YkNvcmU6OlBvc2l0aW9uT3B0aW9uczsKLXVzaW5nIFdlYkNvcmU6OlN0cmluZzsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJs
aWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0gICAgdmlydHVhbCB+R2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbCgpOwotCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Ci0gICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKik7Ci0gICAg
dmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOwotICAgIHZpcnR1YWwgaW50IGdldEJyaWRnZUlk
KCkgY29uc3Q7Ci0KLSAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBz
cGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJv
cihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgot
ICAgIFdlYlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKLQotICAgIC8vIEdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBvaW50ZXIgYmFjayB0
byBpdC4KLSAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTsKLSAgICBpbnQgbV9icmlkZ2VJZDsKLX07Ci0KLUdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCi17Ci0gICAgcmV0dXJu
IG5ldyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0pCi0gICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKGdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKQotewotICAgIC8vIFdlIG5lZWQgdG8gYXR0YWNoIG91cnNlbHZl
cyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKCkKLSAg
ICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28gdGhhdCB0aGUgZW1i
ZWRkZXIgY2FuIGNhbGwKLSAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCi0gICAgbV9icmlkZ2VJ
ZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJy
aWRnZSh0aGlzKTsKLSAgICBBU1NFUlQobV9icmlkZ2VJZCk7Ci19Ci0KLUdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKLXsKLSAgICBX
ZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7
Ci0gICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJv
eWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKLSAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5l
Y3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQotICAgIC8vIGhhcyBi
ZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAg
aWYgKCF3ZWJWaWV3Q2xpZW50KSB7Ci0gICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7Ci0gICAg
fSBlbHNlIGlmIChtX2JyaWRnZUlkKQotICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRHZW9sb2Nh
dGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLX0KLQotYm9vbCBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyog
cG9zaXRpb25PcHRpb25zKQotewotICAgIGlmICghbV9icmlkZ2VJZCkKLSAgICAgICAgbV9icmlk
Z2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFj
aEJyaWRnZSh0aGlzKTsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9wdGlvbnMtPmVuYWJs
ZUhpZ2hBY2N1cmFjeSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQotewotICAgIGlmIChtX2JyaWRnZUlk
KSB7Ci0gICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2VvbG9jYXRpb25T
ZXJ2aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsKLSAg
ICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7Ci0gICAg
ICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLSAgICAg
ICAgbV9icmlkZ2VJZCA9IDA7Ci0gICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6OnN1c3BlbmQoKQotewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9j
YXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKLXsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCkt
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7Ci19Ci0KLWludCBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fYnJpZGdlSWQ7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQotewotICAgIG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2Vi
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNl
dExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOwotfQotCi1XZWJWaWV3Q2xpZW50KiBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKLXsKLSAgICBGcmFt
ZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwotICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRpY19jYXN0PFdlYktp
dDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSk7
Ci0gICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gY2hyb21lQ2xpZW50
SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKLSAgICByZXR1cm4gd2ViVmlld0NsaWVudDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04p
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21p
dW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDo1NjQzOCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1
ZGUgIldlYlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCisjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorCit1c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKK3VzaW5nIFdl
YkNvcmU6OkZyYW1lOwordXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Cit1c2luZyBXZWJDb3Jl
OjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsK
K3VzaW5nIFdlYkNvcmU6Okdlb3Bvc2l0aW9uOwordXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJv
cjsKK3VzaW5nIFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczsKK3VzaW5nIFdlYkNvcmU6OlN0cmlu
ZzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwgOiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisgICAgdmlydHVh
bCB+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpOworCisgICAgLy8gR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlCisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRp
b25zKik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworICAgIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZpcnR1YWwgaW50
IGdldEJyaWRnZUlkKCkgY29uc3Q7CisKKyAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmly
dHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFj
eSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3Bl
ZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7CisgICAgdmlydHVhbCB2b2lk
IHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwor
Citwcml2YXRlOgorICAgIFdlYlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKKworICAg
IC8vIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBv
aW50ZXIgYmFjayB0byBpdC4KKyAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKKyAgICBpbnQgbV9icmlkZ2VJZDsKK307CisKK0dlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChH
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCit7
CisgICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtKTsKK30KKworR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCisgICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQoreworICAgIC8vIFdlIG5lZWQgdG8gYXR0
YWNoIG91cnNlbHZlcyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZv
ckZyYW1lKCkKKyAgICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28g
dGhhdCB0aGUgZW1iZWRkZXIgY2FuIGNhbGwKKyAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCisg
ICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNl
KCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBBU1NFUlQobV9icmlkZ2VJZCk7Cit9CisKK0dl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KCkKK3sKKyAgICBXZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJW
aWV3Q2xpZW50KCk7CisgICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5k
IGl0J3MgZGVzdHJveWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKKyAgICAvLyBiZWVuIHBvdGVudGlh
bGx5IGRpc2Nvbm5lY3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQor
ICAgIC8vIGhhcyBiZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJz
ZWx2ZXMuCisgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9icmlk
Z2VJZCk7CisgICAgfSBlbHNlIGlmIChtX2JyaWRnZUlkKQorICAgICAgICB3ZWJWaWV3Q2xpZW50
LT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKK30K
KworYm9vbCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0
aW9uT3B0aW9ucyogcG9zaXRpb25PcHRpb25zKQoreworICAgIGlmICghbV9icmlkZ2VJZCkKKyAg
ICAgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2
aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9w
dGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQoreworICAgIGlm
IChtX2JyaWRnZUlkKSB7CisgICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSog
Z2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNl
cnZpY2UoKTsKKyAgICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlk
Z2VJZCk7CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRn
ZUlkKTsKKyAgICAgICAgbV9icmlkZ2VJZCA9IDA7CisgICAgfQorfQorCit2b2lkIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQoreworICAgIGdldFdlYlZpZXdDbGllbnQo
KS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKK3sKKyAgICBnZXRXZWJW
aWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7
Cit9CisKK2ludCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYnJpZGdlSWQ7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKK3sKKyAgICBtX0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFk
aW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKK30KKwordm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29k
ZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0tPnNldExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOworfQorCitXZWJWaWV3
Q2xpZW50KiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRp
Y19jYXN0PFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKSk7CisgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0g
Y2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKKyAgICByZXR1cm4gd2ViVmll
d0NsaWVudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R0VPTE9DQVRJT04pCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNp
bmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCIKIAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRl
ICJQb3NpdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldl
YkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgorI2luY2x1
ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCkBAIC02MSwxMCArNjMsMTAgQEAgdXNp
bmcgV2ViQ29yZTo6U3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Us
IHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworY2xhc3MgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UsIHB1
YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewogcHVibGljOgotICAgIGV4cGxpY2l0
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0q
KTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCk7CisgICAgZXhw
bGljaXQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bSopOworICAgIHZpcnR1YWwgfldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
KTsKIAogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQogICAgIHZpcnR1YWwgYm9vbCBz
dGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwpAQCAtNzUsNiArNzcsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3Np
dGlvbihjb25zdCBXZWJHZW9wb3NpdGlvbiYgZ2VvcG9zaXRpb24pOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3Vi
bGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOwogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0
RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsKIApAQCAtODgs
ODAgKzkxLDg4IEBAIHByaXZhdGU6CiAKIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRl
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSog
Z2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsKKyAgICByZXR1
cm4gbmV3IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0pOwogfQogCi1HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKQogICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGF0
dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Npb25G
b3JGcmFtZSgpCiAgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVkIHNv
IHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCiAgICAgLy8gb3VyIHNldElzQWxsb3dlZCgpLgot
ICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vydmlj
ZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGll
bnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKICAgICBBU1NF
UlQobV9icmlkZ2VJZCk7CiB9CiAKLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKIHsKICAgICBXZWJLaXQ6Oldl
YlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7CiAgICAgLy8g
R2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJveWVkIGFmdGVy
IHRoZSBmcmFtZSBoYXMKICAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RlZC4gSW4g
dGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQogICAgIC8vIGhhcyBiZWVuIGNhbGxl
ZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAgaWYgKCF3ZWJW
aWV3Q2xpZW50KSB7CisgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KQogICAgICAgICBBU1NFUlQoIW1f
YnJpZGdlSWQpOwotICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKLSAgICAgICAgd2ViVmlld0Ns
aWVudC0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7
CisgICAgZWxzZSBpZiAobV9icmlkZ2VJZCkKKyAgICAgICAgd2ViVmlld0NsaWVudC0+Z2VvbG9j
YXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiB9CiAKLWJvb2wgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMq
IHBvc2l0aW9uT3B0aW9ucykKK2Jvb2wgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKIHsKICAgICBp
ZiAoIW1fYnJpZGdlSWQpCi0gICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCkt
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAgZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2Jy
aWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CisgICAgICAg
IG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5h
dHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNl
cnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFi
bGVIaWdoQWNjdXJhY3koKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKIHsKICAgICBpZiAobV9icmlkZ2VJZCkg
ewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdlb2xvY2F0aW9uU2Vy
dmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCk7CisgICAg
ICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZSogZ2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0V2ViVmll
d0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKTsKICAgICAgICAgZ2VvbG9jYXRpb25TZXJ2
aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7CiAgICAgICAgIGdlb2xvY2F0aW9uU2Vydmlj
ZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKICAgICAgICAgbV9icmlkZ2VJZCA9IDA7CiAg
ICAgfQogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQor
dm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKIHsKLSAgICBn
ZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJp
ZGdlSWQpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1
c3BlbmQobV9icmlkZ2VJZCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6cmVzdW1lKCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1l
KCkKIHsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5y
ZXN1bWUobV9icmlkZ2VJZCk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNl
cnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdlSWQpOwogfQogCi1pbnQgR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQoKSBjb25zdAoraW50IFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9icmlkZ2VJ
ZDsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93ZWQo
Ym9vbCBhbGxvd2VkKQordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogewogICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0tPnNldElzQWxsb3dlZChhbGxvd2VkKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1Nw
ZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCisKK3ZvaWQgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGNvbnN0IFdlYkdlb3Bvc2l0
aW9uJiB3ZWJnZW9wb3NpdGlvbikKK3sKKyAgICBSZWZQdHI8R2VvcG9zaXRpb24+IGdlb3Bvc2l0
aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShDb29yZGluYXRlczo6Y3JlYXRlKHdlYmdlb3Bvc2l0
aW9uLmxhdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5sb25naXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLnBy
b3ZpZGVzQWx0aXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLmFsdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5h
Y2N1cmFjeSwgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCB3ZWJnZW9w
b3NpdGlvbi5hbHRpdHVkZUFjY3VyYWN5LCB3ZWJnZW9wb3NpdGlvbi5wcm92aWRlc0hlYWRpbmcs
IHdlYmdlb3Bvc2l0aW9uLmhlYWRpbmcsIHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzU3BlZWQsIHdl
Ymdlb3Bvc2l0aW9uLnNwZWVkKSwgd2ViZ2VvcG9zaXRpb24udGltZXN0YW1wKTsKKyAgICBtX0dl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24oZ2VvcG9zaXRpb24pOwor
fQorCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkKIHsKLSAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRM
YXN0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1
ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFt
cCk7CisgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpj
cmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0Fs
dGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0
TGFzdFBvc2l0aW9uKGdlb3Bvc2l0aW9uKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKQordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogewogICAgIG1fR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2Up
OwogfQogCi1XZWJWaWV3Q2xpZW50KiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRX
ZWJWaWV3Q2xpZW50KCkKK1dlYlZpZXdDbGllbnQqIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUt
PnBhZ2UoKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdl
aW5mbwogICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlQ2hyb21pdW0uY3BwOnI1MzQ1NQoKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCShyZXZpc2lvbiA1
NjQzOCkJKGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdl
YlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIu
CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJs
ZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cit9
OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2NsYXNz
IFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwm
IHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwg
Y29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGlu
dCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdl
IHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hvdWxk
IGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAg
dmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hlcyB0
aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9p
ZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmgJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbF9oCisjZGVmaW5lIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CkBAIC0zNywzNyArMzcsMTAgQEAgY2xhc3Mg
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci0KLS8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQ
SSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dl
ZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91Ymxl
IGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywg
Ym9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdl
YlN0cmluZyYgbWVzc2FnZSkgPSAwOwotfTsKLQotLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJ
IGNhbGxlZCBieSBXZWJLaXQuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Ug
ewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRn
ZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsKLQotICAgIC8vIEF0dGFj
aGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRz
IGlkLCB3aGljaAotICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9y
IHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6
OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9
IDA7Ci0KLSAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBl
bWJlZGRlci4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0g
MDsKLX07Ci0KKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KIFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3Jl
OjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCi0jZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAor
I2VuZGlmIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwogICBNZXJnZWQgL3RydW5rL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDpy
NTM0NTUKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlzaW9uIDU2NDI2KQorKysg
V2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQpAQCAtOTgsNyAr
OTgsNyBAQCBzdWIgZXhpdFN0YXR1cygkKQogc3ViIGlzR2l0RGlyZWN0b3J5KCQpCiB7CiAgICAg
bXkgKCRkaXIpID0gQF87Ci0gICAgcmV0dXJuIHN5c3RlbSgiY2QgJGRpciAmJiBnaXQgcmV2LXBh
cnNlID4gIiAuIEZpbGU6OlNwZWMtPmRldm51bGwoKSAuICIgMj4mMSIpID09IDA7CisgICAgcmV0
dXJuIHN5c3RlbSgiY2QgJGRpciAmJiBnZ2l0IHJldi1wYXJzZSA+ICIgLiBGaWxlOjpTcGVjLT5k
ZXZudWxsKCkgLiAiIDI+JjEiKSA9PSAwOwogfQogCiBzdWIgaXNHaXQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51508</attachid>
            <date>2010-03-24 09:05:46 -0700</date>
            <delta_ts>2010-03-25 06:52:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>56099</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjUzNQorCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpzZXRJc0Fs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNl
dExhc3RQb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW0uaDoKKwogMjAxMC0wMy0xOSAgTWlpa2thIEhlaWtraW5lbiAgPG1paWtr
YS5oZWlra2luZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAor
ICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTM5LDE5
ICszOSwxOCBAQCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6R2VvbG9jYXRpb25TCiAgICAg
ICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGMpLAogICAgICAgICAgIG1fZ2VvbG9jYXRpb24ocmVp
bnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KGMpKSwKICAgICAgICAgICBtX2dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZShDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKHRoaXMpKSwKLSAgICAgICAgICBtX2xhc3RQb3NpdGlvbihHZW9wb3NpdGlvbjo6Y3JlYXRl
KENvb3JkaW5hdGVzOjpjcmVhdGUoMC4wLCAwLjAsIGZhbHNlLCAwLjAsIDAuMCwgZmFsc2UsIDAu
MCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCksIDApKSwKICAgICAgICAgICBtX2xhc3RFcnJvcihQ
b3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUs
ICIiKSkKIHsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxs
b3dlZCk7ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBo
ZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVz
dGFtcCkKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihQ
YXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsKLSAgICBtX2xhc3RQb3NpdGlv
biA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9sYXN0UG9zaXRpb24g
PSBnZW9wb3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0uaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAq
IAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBA
CiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKSBjb25z
dCB7IHJldHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5nZXQoKTsgfQogICAgIHZvaWQg
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRv
dWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3Vi
bGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0
aW1lc3RhbXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8R2VvcG9zaXRp
b24+KTsKICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9sb2NhdGlvbjsKLSAgICBPd25Q
dHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsg
ICAgCisgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZT4gbV9nZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKICAg
ICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9OwpJbmRleDogV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wMy0yNCAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFj
aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBicmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NTM1CisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaDogQ29waWVk
IGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaDog
Q29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAg
IChXZWJLaXQ6Oik6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWUpOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAgICAgICog
c3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHA6IENvcGllZCBmcm9t
IFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3Bw
LgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6V2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRV
cGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RF
cnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OmdldFdlYlZpZXdDbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmg6IENvcGllZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaC4KKwogMjAxMC0wMy0yNCAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNiBAQAogICAgICAgICAgICAgICAg
ICdXRUJLSVRfSU1QTEVNRU5UQVRJT04nLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdz
b3VyY2VzJzogWwotICAgICAgICAgICAgICAgICdwdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9ndGsvV2ViSW5wdXRFdmVu
dEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVy
aW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRlclN0eWxl
LmgnLApAQCAtMTIxLDYgKzEyMCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0uaCcs
CkBAIC0yNDAsNyArMjQxLDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJX
cmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAnLAkJ
CiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9X
ZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzEyLDYgKzMxMiw4IEBACiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtLmgJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MyArMzEs
MTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAogI2RlZmlu
ZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNzIEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwotCi0v
LyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KLWNsYXNzIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBv
c2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVh
ZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBs
b25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihp
bnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07Ci0KLS8vIFBy
b3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJV
UkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlk
KSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBv
biBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGlu
dCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2Nh
dGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hC
cmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlzIGZp
bGUsIHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciBmb3IKKy8vIHJlbmFt
aW5nIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB0byBXZWJHZW9sb2NhdGlvblNlcnZp
Y2UuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgOiBwdWJsaWMgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlIHsKIH07CiAKLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8v
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAkocmV2aXNpb24gNTY0MzgpCShm
cm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJv
dmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Fs
bG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVy
cm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRl
cyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9u
U2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1
cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BV
cGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQg
YnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAw
OworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRl
ciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vi
c2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0
YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25T
ZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdl
KGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCShyZXZpc2lvbiA1NjQzOCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDI5ICsyOCwxOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKLSNkZWZpbmUgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBXZWJHZW9sb2NhdGlvblNlcnZpY2Vf
aAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTsKLX0KKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaCIK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsK
IAotLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRkZXIuCi1jbGFz
cyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExh
c3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVl
ZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJy
b3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci19OwotCiAv
LyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KLWNsYXNzIFdlYkdl
b2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2Ug
ewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhp
Z2hBY2N1cmFjeSkgPSAwOwpAQCAtNjAsMTQgKzQ5LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIEF0
dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMg
aXRzIGlkLCB3aGljaAogICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMg
Zm9yIHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
KSA9IDA7CisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CiAKICAgICAvLyBEZXR0YWNo
ZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KICAgICB2aXJ0dWFs
IHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKIH07CiAKLVdlYkNvcmU6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gK
KyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UuaAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNk
ZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0
cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBi
eSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBs
b25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUg
YWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVB
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3Zp
ZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBt
ZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5
IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlk
LCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5n
KGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdl
b2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNo
CisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhv
ZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAg
IC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgor
ICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKwor
V2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKKyNk
ZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtNDQsMzAgKzQ0LDI3IEBAIGNs
YXNzIFdlYlVSTDsKIC8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVk
ZGVyLgogY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKIHB1YmxpYzoKKyAgICBz
dHJ1Y3QgV2ViR2VvcG9zaXRpb24geworICAgICAgZG91YmxlIGxhdGl0dWRlOworICAgICAgZG91
YmxlIGxvbmdpdHVkZTsKKyAgICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZTsKKyAgICAgIGRvdWJs
ZSBhbHRpdHVkZTsKKyAgICAgIGRvdWJsZSBhY2N1cmFjeTsKKyAgICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5OworICAgICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3k7CisgICAgICBi
b29sIHByb3ZpZGVzSGVhZGluZzsKKyAgICAgIGRvdWJsZSBoZWFkaW5nOworICAgICAgYm9vbCBw
cm92aWRlc1NwZWVkOworICAgICAgZG91YmxlIHNwZWVkOworICAgICAgbG9uZyBsb25nIHRpbWVz
dGFtcDsKKyAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2Vk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihjb25zdCBXZWJHZW9wb3Np
dGlvbiYgZ2VvcG9zaXRpb24pID0gMDsKKyAgICAvLyBUT0RPKGJ1bGFjaCk6IHJlbW92ZSB0aGlz
IG1ldGhvZC4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcs
IGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBX
ZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQ
SSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNl
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShp
bnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVI
aWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlk
Z2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRh
Y2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0
cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZv
ciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkg
PSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUg
ZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9
IDA7Ci19OwotCi1XZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0qKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwog
ICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXdDbGllbnQuaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBX
ZWJWaWV3Q2xpZW50X2gKICNkZWZpbmUgV2ViVmlld0NsaWVudF9oCiAKKyNpbmNsdWRlICJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRmlsZUNo
b29zZXJDb21wbGV0aW9uLmgiCkBAIC00Niw3ICs0Nyw2IEBAIGNsYXNzIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q7CiBjbGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYkZpbGVDaG9vc2VyQ29tcGxl
dGlvbjsKIGNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNs
YXNzIFdlYlJhbmdlOwpAQCAtMjg4LDYgKzI4OCw5IEBAIHB1YmxpYzoKICAgICAvLyBHZW9sb2Nh
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogICAgIC8vIEFjY2VzcyB0aGUgZW1iZWRkZXIgQVBJIGZvciBnZW9sb2NhdGlvbiBz
ZXJ2aWNlcy4KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlKiBnZW9s
b2NhdGlvblNlcnZpY2UoKSB7IHJldHVybiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsgfQorCisg
ICAgLy8gVE9ETyhidWxhY2gpOiB0aGlzIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgbGF5
ZXIsIHJlbW92ZSBpdC4KICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNl
SW50ZXJmYWNlKiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKSB7IHJldHVybiAwOyB9CiAKIHByb3Rl
Y3RlZDoKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkocmV2
aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2Uu
aCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKQEAgLTY5NSw3ICs2OTUsNyBAQCBOb3RpZmljYXRpb25QcmVzZW50ZXIqIENo
cm9tZUNsaWVudEltcGw6CiB2b2lkIENocm9tZUNsaWVudEltcGw6OnJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKIHsKICAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNl
ID0gcmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSo+KGdlb2xvY2F0
aW9uLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKSk7Ci0gICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+
Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoZ2VvbG9j
YXRpb25TZXJ2aWNlLT5nZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKS0+Z2V0QnJpZGdlSWQoKSwg
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKKyAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5nZW9s
b2NhdGlvblNlcnZpY2UoKS0+cmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShnZW9sb2NhdGlvblNl
cnZpY2UtPmdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpLT5nZXRCcmlkZ2VJZCgpLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkpOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHJldmlzaW9uIDU2
NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDcgKzc1LDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlUHJveHkuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBA
IC04Myw2ICs4Miw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKLQotI2luY2x1ZGUgIkNocm9tZS5oIgot
I2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkdlb2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQb3NpdGlvbkVycm9yLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgiCi0jaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKLSNpbmNsdWRlICJXZWJW
aWV3Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLQotI2lmIEVOQUJMRShHRU9M
T0NBVElPTikKLQotdXNpbmcgV2ViQ29yZTo6Q29vcmRpbmF0ZXM7Ci11c2luZyBXZWJDb3JlOjpG
cmFtZTsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uOwotdXNpbmcgV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlOwotdXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW07Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQ7Ci11c2luZyBX
ZWJDb3JlOjpHZW9wb3NpdGlvbjsKLXVzaW5nIFdlYkNvcmU6OlBvc2l0aW9uRXJyb3I7Ci11c2lu
ZyBXZWJDb3JlOjpQb3NpdGlvbk9wdGlvbnM7Ci11c2luZyBXZWJDb3JlOjpTdHJpbmc7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsIDog
cHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVibGljIFdlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotICAgIHZpcnR1YWwgfkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwoKTsKLQotICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZQotICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwot
ICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKLSAgICB2aXJ0dWFsIGludCBnZXRCcmlk
Z2VJZCgpIGNvbnN0OwotCi0gICAgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlCi0gICAg
dmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29s
IHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29s
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wg
cHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3Vi
bGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0
RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsKLQotcHJpdmF0
ZToKLSAgICBXZWJWaWV3Q2xpZW50KiBnZXRXZWJWaWV3Q2xpZW50KCk7Ci0KLSAgICAvLyBHZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bSBvd25zIHVzLCB3ZSBvbmx5IGhhdmUgYSBwb2ludGVyIGJh
Y2sgdG8gaXQuCi0gICAgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIG1fR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW07Ci0gICAgaW50IG1fYnJpZGdlSWQ7Ci19OwotCi1HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQotewotICAgIHJl
dHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bSk7Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6Okdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtKQotICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bShnZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGF0dGFjaCBvdXJz
ZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZSgp
Ci0gICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVkIHNvIHRoYXQgdGhl
IGVtYmVkZGVyIGNhbiBjYWxsCi0gICAgLy8gb3VyIHNldElzQWxsb3dlZCgpLgotICAgIG1fYnJp
ZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRh
Y2hCcmlkZ2UodGhpcyk7Ci0gICAgQVNTRVJUKG1fYnJpZGdlSWQpOwotfQotCi1HZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjp+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpCi17Ci0g
ICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gZ2V0V2ViVmlld0NsaWVu
dCgpOwotICAgIC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25QdHIgdG8gdXMsIGFuZCBpdCdzIGRl
c3Ryb3llZCBhZnRlciB0aGUgZnJhbWUgaGFzCi0gICAgLy8gYmVlbiBwb3RlbnRpYWxseSBkaXNj
b25uZWN0ZWQuIEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3RvcFVwZGF0aW5nKCkKLSAgICAvLyBo
YXMgYmVlbiBjYWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBkZXR0YWNoZWQgb3Vyc2VsdmVzLgot
ICAgIGlmICghd2ViVmlld0NsaWVudCkgewotICAgICAgICBBU1NFUlQoIW1fYnJpZGdlSWQpOwot
ICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKLSAgICAgICAgd2ViVmlld0NsaWVudC0+Z2V0R2Vv
bG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7Ci19Ci0KLWJvb2wg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlv
bnMqIHBvc2l0aW9uT3B0aW9ucykKLXsKLSAgICBpZiAoIW1fYnJpZGdlSWQpCi0gICAgICAgIG1f
YnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5h
dHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlv
blNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5l
bmFibGVIaWdoQWNjdXJhY3koKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBpZiAobV9icmlk
Z2VJZCkgewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdlb2xvY2F0
aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCk7
Ci0gICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+c3RvcFVwZGF0aW5nKG1fYnJpZGdlSWQpOwot
ICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7Ci0g
ICAgICAgIG1fYnJpZGdlSWQgPSAwOwotICAgIH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKLXsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJpZGdlSWQpOwotfQotCi12b2lkIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJlc3VtZSgpCi17Ci0gICAgZ2V0V2ViVmlld0NsaWVu
dCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdlSWQpOwotfQotCi1p
bnQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2JyaWRnZUlkOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwotfQotCi12b2lkIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0
aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29s
IHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkKLXsKLSAg
ICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24obGF0aXR1ZGUs
IGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVh
ZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFtcCk7Ci19Ci0KLXZvaWQgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
LT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlKTsKLX0KLQotV2ViVmlld0NsaWVudCog
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVudCgpCi17Ci0gICAg
RnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBX
ZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqIGNocm9tZUNsaWVudEltcGwgPSBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqPihmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50
KCkpOwotICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCogd2ViVmlld0NsaWVudCA9IGNocm9tZUNs
aWVudEltcGwtPndlYlZpZXcoKS0+Y2xpZW50KCk7Ci0gICAgcmV0dXJuIHdlYlZpZXdDbGllbnQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FU
SU9OKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCShyZXZpc2lvbiA1NjQzOCkJKGZyb20gV2ViS2l0L2No
cm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHA6NTY0MzgpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKKworI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiUG9zaXRpb25PcHRpb25z
LmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNp
bmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKworI2lm
IEVOQUJMRShHRU9MT0NBVElPTikKKwordXNpbmcgV2ViQ29yZTo6Q29vcmRpbmF0ZXM7Cit1c2lu
ZyBXZWJDb3JlOjpGcmFtZTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uOwordXNpbmcgV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwordXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW07Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDbGll
bnQ7Cit1c2luZyBXZWJDb3JlOjpHZW9wb3NpdGlvbjsKK3VzaW5nIFdlYkNvcmU6OlBvc2l0aW9u
RXJyb3I7Cit1c2luZyBXZWJDb3JlOjpQb3NpdGlvbk9wdGlvbnM7Cit1c2luZyBXZWJDb3JlOjpT
dHJpbmc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsIDogcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVibGljIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworICAgIHZp
cnR1YWwgfkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKTsKKworICAgIC8vIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZQorICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9u
T3B0aW9ucyopOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3VzcGVuZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKKyAgICB2aXJ0dWFs
IGludCBnZXRCcmlkZ2VJZCgpIGNvbnN0OworCisgICAgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlCisgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRl
c1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOworICAgIHZpcnR1YWwg
dm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdl
KTsKKworcHJpdmF0ZToKKyAgICBXZWJWaWV3Q2xpZW50KiBnZXRXZWJWaWV3Q2xpZW50KCk7CisK
KyAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSBvd25zIHVzLCB3ZSBvbmx5IGhhdmUg
YSBwb2ludGVyIGJhY2sgdG8gaXQuCisgICAgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07CisgICAgaW50IG1fYnJpZGdlSWQ7Cit9OworCitH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KQoreworICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSk7Cit9CisKK0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0q
IGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQorICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKK3sKKyAgICAvLyBXZSBuZWVkIHRv
IGF0dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Np
b25Gb3JGcmFtZSgpCisgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVk
IHNvIHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCisgICAgLy8gb3VyIHNldElzQWxsb3dlZCgp
LgorICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgQVNTRVJUKG1fYnJpZGdlSWQpOworfQor
CitHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
SW1wbCgpCit7CisgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gZ2V0
V2ViVmlld0NsaWVudCgpOworICAgIC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25QdHIgdG8gdXMs
IGFuZCBpdCdzIGRlc3Ryb3llZCBhZnRlciB0aGUgZnJhbWUgaGFzCisgICAgLy8gYmVlbiBwb3Rl
bnRpYWxseSBkaXNjb25uZWN0ZWQuIEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3RvcFVwZGF0aW5n
KCkKKyAgICAvLyBoYXMgYmVlbiBjYWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBkZXR0YWNoZWQg
b3Vyc2VsdmVzLgorICAgIGlmICghd2ViVmlld0NsaWVudCkgeworICAgICAgICBBU1NFUlQoIW1f
YnJpZGdlSWQpOworICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKKyAgICAgICAgd2ViVmlld0Ns
aWVudC0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7
Cit9CisKK2Jvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQ
b3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKK3sKKyAgICBpZiAoIW1fYnJpZGdlSWQp
CisgICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9u
U2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5n
ZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRp
b25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKK3sKKyAg
ICBpZiAobV9icmlkZ2VJZCkgeworICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZh
Y2UqIGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRp
b25TZXJ2aWNlKCk7CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+c3RvcFVwZGF0aW5nKG1f
YnJpZGdlSWQpOworICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPmRldHRhY2hCcmlkZ2UobV9i
cmlkZ2VJZCk7CisgICAgICAgIG1fYnJpZGdlSWQgPSAwOworICAgIH0KK30KKwordm9pZCBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKK3sKKyAgICBnZXRXZWJWaWV3Q2xp
ZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJpZGdlSWQpOworfQor
Cit2b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJlc3VtZSgpCit7CisgICAgZ2V0
V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdl
SWQpOworfQorCitpbnQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2JyaWRnZUlkOworfQorCit2b2lkIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCit7CisgICAgbV9H
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbihkb3VibGUg
bGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91Ymxl
IGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBo
ZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVz
dGFtcCkKK3sKKyAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRp
b24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIGFjY3Vy
YWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVz
SGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFtcCk7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJv
ckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX0dlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlKTsKK30KKworV2Vi
Vmlld0NsaWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVu
dCgpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqIGNocm9tZUNsaWVudEltcGwgPSBz
dGF0aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqPihmcmFtZS0+cGFnZSgpLT5jaHJv
bWUoKS0+Y2xpZW50KCkpOworICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCogd2ViVmlld0NsaWVu
dCA9IGNocm9tZUNsaWVudEltcGwtPndlYlZpZXcoKS0+Y2xpZW50KCk7CisgICAgcmV0dXJuIHdl
YlZpZXdDbGllbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdFT0xPQ0FUSU9OKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCShyZXZpc2lvbiA1NjQzOCkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
Ci0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgiCiAKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCkBAIC00Myw2ICs0Myw4IEBACiAjaW5j
bHVkZSAiUG9zaXRpb25PcHRpb25zLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2UuaCIKKyNp
bmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaCIKICNpbmNsdWRlICJXZWJWaWV3
Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKIApAQCAtNjEsMTAgKzYzLDEwIEBA
IHVzaW5nIFdlYkNvcmU6OlN0cmluZzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKK2NsYXNzIFdlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
LCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKik7Ci0gICAgdmlydHVhbCB+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpOworICAg
IGV4cGxpY2l0IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIH5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsKCk7CiAKICAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKICAgICB2aXJ0dWFsIGJv
b2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKQEAgLTc1LDYgKzc3LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlCiAgICAgdmlydHVhbCB2
b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0
UG9zaXRpb24oY29uc3QgV2ViR2VvcG9zaXRpb24mIGdlb3Bvc2l0aW9uKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwg
ZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7CiAKQEAg
LTg4LDgwICs5MSw4OCBAQCBwcml2YXRlOgogCiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNy
ZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQogewotICAgIHJldHVybiBuZXcgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSk7CisgICAg
cmV0dXJuIG5ldyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtKTsKIH0KIAotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0pCitXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKICAgICA6IG1fR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0oZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCiB7CiAgICAgLy8gV2UgbmVlZCB0
byBhdHRhY2ggb3Vyc2VsdmVzIGhlcmU6IEdlb2xvY2F0aW9uIGNhbGxzIHJlcXVlc3RQZXJtaXNz
aW9uRm9yRnJhbWUoKQogICAgIC8vIGRpcmVjdGx5LCBhbmQgd2UgbmVlZCB0byBiZSBhdHRhY2hl
ZCBzbyB0aGF0IHRoZSBlbWJlZGRlciBjYW4gY2FsbAogICAgIC8vIG91ciBzZXRJc0FsbG93ZWQo
KS4KLSAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNl
cnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOworICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3
Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CiAgICAg
QVNTRVJUKG1fYnJpZGdlSWQpOwogfQogCi1HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpCitXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjp+V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpCiB7CiAgICAgV2ViS2l0
OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gZ2V0V2ViVmlld0NsaWVudCgpOwogICAg
IC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25QdHIgdG8gdXMsIGFuZCBpdCdzIGRlc3Ryb3llZCBh
ZnRlciB0aGUgZnJhbWUgaGFzCiAgICAgLy8gYmVlbiBwb3RlbnRpYWxseSBkaXNjb25uZWN0ZWQu
IEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3RvcFVwZGF0aW5nKCkKICAgICAvLyBoYXMgYmVlbiBj
YWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBkZXR0YWNoZWQgb3Vyc2VsdmVzLgotICAgIGlmICgh
d2ViVmlld0NsaWVudCkgeworICAgIGlmICghd2ViVmlld0NsaWVudCkKICAgICAgICAgQVNTRVJU
KCFtX2JyaWRnZUlkKTsKLSAgICB9IGVsc2UgaWYgKG1fYnJpZGdlSWQpCi0gICAgICAgIHdlYlZp
ZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdl
SWQpOworICAgIGVsc2UgaWYgKG1fYnJpZGdlSWQpCisgICAgICAgIHdlYlZpZXdDbGllbnQtPmdl
b2xvY2F0aW9uU2VydmljZSgpLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOwogfQogCi1ib29s
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRp
b25zKiBwb3NpdGlvbk9wdGlvbnMpCitib29sIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBwb3NpdGlvbk9wdGlvbnMpCiB7CiAg
ICAgaWYgKCFtX2JyaWRnZUlkKQotICAgICAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVu
dCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwotICAgIGdl
dFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN0YXJ0VXBkYXRpbmco
bV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOworICAg
ICAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2Uo
KS0+YXR0YWNoQnJpZGdlKHRoaXMpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRp
b25TZXJ2aWNlKCktPnN0YXJ0VXBkYXRpbmcobV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+
ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0b3BVcGRhdGluZygpCit2b2lkIFdlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6OnN0b3BVcGRhdGluZygpCiB7CiAgICAgaWYgKG1fYnJpZGdl
SWQpIHsKLSAgICAgICAgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlv
blNlcnZpY2UgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOwor
ICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2UqIGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdl
YlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCk7CiAgICAgICAgIGdlb2xvY2F0aW9u
U2VydmljZS0+c3RvcFVwZGF0aW5nKG1fYnJpZGdlSWQpOwogICAgICAgICBnZW9sb2NhdGlvblNl
cnZpY2UtPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiAgICAgICAgIG1fYnJpZGdlSWQgPSAw
OwogICAgIH0KIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5k
KCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVuZCgpCiB7Ci0g
ICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3VzcGVuZCht
X2JyaWRnZUlkKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgp
LT5zdXNwZW5kKG1fYnJpZGdlSWQpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnJlc3VtZSgpCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJl
c3VtZSgpCiB7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KS0+cmVzdW1lKG1fYnJpZGdlSWQpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRp
b25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKIH0KIAotaW50IEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKK2ludCBXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYnJp
ZGdlSWQ7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsKICAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlk
ZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQorCit2b2lkIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbihjb25zdCBXZWJHZW9w
b3NpdGlvbiYgd2ViZ2VvcG9zaXRpb24pCit7CisgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9w
b3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZSh3ZWJnZW9w
b3NpdGlvbi5sYXRpdHVkZSwgd2ViZ2VvcG9zaXRpb24ubG9uZ2l0dWRlLCB3ZWJnZW9wb3NpdGlv
bi5wcm92aWRlc0FsdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5hbHRpdHVkZSwgd2ViZ2VvcG9zaXRp
b24uYWNjdXJhY3ksIHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgd2Vi
Z2VvcG9zaXRpb24uYWx0aXR1ZGVBY2N1cmFjeSwgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNIZWFk
aW5nLCB3ZWJnZW9wb3NpdGlvbi5oZWFkaW5nLCB3ZWJnZW9wb3NpdGlvbi5wcm92aWRlc1NwZWVk
LCB3ZWJnZW9wb3NpdGlvbi5zcGVlZCksIHdlYmdlb3Bvc2l0aW9uLnRpbWVzdGFtcCk7CisgICAg
bV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGdlb3Bvc2l0aW9u
KTsKK30KKwordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0UG9z
aXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0
aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFk
aW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxv
bmcgbG9uZyB0aW1lc3RhbXApCiB7Ci0gICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+
c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFs
dGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3Vy
YWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCB0aW1l
c3RhbXApOworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gZ2VvcG9zaXRpb24gPSBHZW9wb3NpdGlv
bjo6Y3JlYXRlKENvb3JkaW5hdGVzOjpjcmVhdGUobGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlk
ZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ks
IGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVl
ZCwgc3BlZWQpLCB0aW1lc3RhbXApOworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0t
PnNldExhc3RQb3NpdGlvbihnZW9wb3NpdGlvbik7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmlu
ZyYgbWVzc2FnZSkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFz
dEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBt
X0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNz
YWdlKTsKIH0KIAotV2ViVmlld0NsaWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
Z2V0V2ViVmlld0NsaWVudCgpCitXZWJWaWV3Q2xpZW50KiBXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX0dl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWZy
YW1lLT5wYWdlKCkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpt
ZXJnZWluZm8KICAgTWVyZ2VkIC90cnVuay9XZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtLmNwcDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAkocmV2aXNp
b24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZGVmaW5lIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmc7CitjbGFz
cyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVk
ZGVyLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAw
OworfTsKKworLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCitj
bGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2Vi
VVJMJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdl
SWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZShpbnQgYnJpZGdlSWQpID0gMDsKKworICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJy
aWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAorICAgIC8vIHNo
b3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgor
ICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CisKKyAgICAvLyBEZXR0YWNo
ZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KKyAgICB2aXJ0dWFs
IHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKK307CisKK1dlYkNvcmU6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbC5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4
ICsyOCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlQ2hyb21pdW1faAotI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bV9oCisjaWZuZGVmIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAorI2RlZmlu
ZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtMzcsMzcgKzM3LDEwIEBAIGNs
YXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwotCi0vLyBQcm92aWRlcyBhIFdlYktp
dCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFs
bG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25z
dCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07Ci0KLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVy
IEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFt
ZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFi
bGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBi
cmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBB
dHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5z
IGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxz
IGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2Vi
S2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0
aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlk
KSA9IDA7Ci19OwotCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiBXZWJDb3JlOjpHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKyNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsX2gKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90cnVu
ay9XZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
Lmg6cjUzNDU1Cgo=
</data>
<flag name="review"
          id="34774"
          type_id="1"
          status="-"
          setter="jorlow"
    />
    <flag name="commit-queue"
          id="34775"
          type_id="3"
          status="-"
          setter="jorlow"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51632</attachid>
            <date>2010-03-25 06:52:43 -0700</date>
            <delta_ts>2010-03-29 04:01:55 -0700</delta_ts>
            <desc>Jorlow comments</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>56367</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjUzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIFVzZXMgR2VvcG9z
aXRpb24gaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhcmFtcyBmb3Igc2V0TGFzdFBvc2l0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY1MzUKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTo6c2V0SXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtOjpzZXRMYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmg6CisKIDIwMTAtMDMtMjUgIEFudHRp
IEtvaXZpc3RvICA8a29pdmlzdG9AaWtpLmZpPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9H
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2
NTM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKQEAgLTM5LDE5ICszOSwxOCBAQCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6
R2VvbG9jYXRpb25TCiAgICAgICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGMpLAogICAgICAgICAg
IG1fZ2VvbG9jYXRpb24ocmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KGMpKSwKICAgICAg
ICAgICBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZShDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKHRoaXMpKSwKLSAgICAgICAgICBtX2xhc3RQb3NpdGlvbihH
ZW9wb3NpdGlvbjo6Y3JlYXRlKENvb3JkaW5hdGVzOjpjcmVhdGUoMC4wLCAwLjAsIGZhbHNlLCAw
LjAsIDAuMCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCksIDApKSwKICAgICAg
ICAgICBtX2xhc3RFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9T
SVRJT05fVU5BVkFJTEFCTEUsICIiKSkKIHsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bTo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9u
LT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93
ZWQoYWxsb3dlZCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExh
c3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVl
ZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06
OnNldExhc3RQb3NpdGlvbihQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsK
LSAgICBtX2xhc3RQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNy
ZWF0ZShsYXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNj
dXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlk
ZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7Cisg
ICAgbV9sYXN0UG9zaXRpb24gPSBnZW9wb3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsK
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0uaAkocmV2aXNpb24gNTY1MzYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogCiAgICAgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UoKSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5n
ZXQoKTsgfQogICAgIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBz
ZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUg
c3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBh
c3NSZWZQdHI8R2VvcG9zaXRpb24+KTsKICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JD
b2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03
NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9s
b2NhdGlvbjsKLSAgICBPd25QdHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZTsgICAgCisgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZT4gbV9nZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBt
X2xhc3RQb3NpdGlvbjsKICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9
OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NjUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wMy0yNCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBi
cmlkZ2U6CisgICAgICAgIFVzZXMgYSBzdHJ1Y3QgZm9yIHNldExhc3RQb3NpdGlvbiBpbnN0ZWFk
IG9mIGluZGl2aWR1YWwgcGFyYW1zLgorICAgICAgICBSZW5hbWUgR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uY3BwIHRvIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3Bw
ICAgICAgICAgICAgCisgICAgICAgIFVzZXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXll
ciBpbiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjUzNQorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmg6IENvcGllZCBm
cm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uaC4KKyAgICAgICAgKiBwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmg6IENv
cGllZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW0uaC4KKyAgICAgICAgKiBwdWJsaWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAo
V2ViS2l0OjopOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZv
ckZyYW1lKToKKyAgICAgICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAgICAqIHNy
Yy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwOiBDb3BpZWQgZnJvbSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcC4K
KyAgICAgICAgKFdlYktpdDo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OldlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjp+V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0YXJ0VXBk
YXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
OjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJy
b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpn
ZXRXZWJWaWV3Q2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtLmguCisKIDIwMTAtMDMtMTAgIEpvaG4gQWJkLUVsLU1hbGVr
ICA8amFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTY1MzYpCisrKyBXZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSw4IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkZvbnRDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50
LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSGlzdG9yeUl0ZW0uaCcsCkBAIC0yNDEsNyArMjQzLDYgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bS5jcHAnLAkJCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udElu
Zm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzEzLDYg
KzMxNCw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJGcmFtZUltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3Bw
JywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgJKHJldmlzaW9uIDU2NTM2KQorKysgV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw0MyArMzEsMTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW1faAogI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9o
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsK
LWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xv
Y2F0aW9uU2VydmljZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5n
OwotY2xhc3MgV2ViVVJMOwotCi0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRo
ZSBlbWJlZGRlci4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpID0gMDsKLX07Ci0KLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2Vi
S2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNv
bnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50
IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9j
YXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAg
ICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBh
Ym92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8g
RGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAg
dmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgZmlsZSwgdGhpcyBpcyBhIHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVy
IGZvcgorLy8gcmVuYW1pbmcgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHRvIFdlYkdl
b2xvY2F0aW9uU2VydmljZS4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSA6
IHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2UgewogfTsKIAotV2ViQ29yZTo6R2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNv
cmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRleDog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCShyZXZp
c2lvbiA1NjQzOCkJKGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VDaHJvbWl1bS5oOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJH
ZW9sb2NhdGlvblNlcnZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2RlZmluZSBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZTsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2Vi
VVJMOworCisvLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4K
K2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91Ymxl
IHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExh
c3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKK307
CisKKy8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgorY2xhc3Mg
V2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYg
dXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBj
b25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50
IGJyaWRnZUlkKSA9IDA7CisKKyAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2Ug
dG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKKyAgICAvLyBzaG91bGQg
YmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAgICB2
aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOworCisgICAgLy8gRGV0dGFjaGVzIHRo
ZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCisgICAgdmlydHVhbCB2b2lk
IGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7Cit9OworCitXZWJDb3JlOjpHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJKHJl
dmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjkgKzI4LDE4IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAotI2Rl
ZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjaWZuZGVmIFdlYkdlb2xv
Y2F0aW9uU2VydmljZV9oCisjZGVmaW5lIFdlYkdlb2xvY2F0aW9uU2VydmljZV9oCiAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNzIEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwog
Y2xhc3MgV2ViVVJMOwogCi0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBl
bWJlZGRlci4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVk
ZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFj
eSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5
LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVl
ZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Up
ID0gMDsKLX07Ci0KIC8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0
LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKK2NsYXNzIFdlYkdlb2xv
Y2F0aW9uU2VydmljZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNz
aW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmws
IGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CkBAIC02MCwxNCArNDksMTIgQEAgcHVibGlj
OgogCiAgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRl
ciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCiAgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vi
c2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCi0gICAgdmlydHVhbCBpbnQgYXR0
YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UpID0gMDsKKyAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKIAog
ICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVy
LgogICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOwogfTsK
IAotV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW1faAorI2VuZGlmIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZV9oCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2Vydmlj
ZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90cnVuay9XZWJL
aXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmg6cjUz
NDU1CgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkJKGZyb20gV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOjU2NDM4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW1faAorI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKK2Ns
YXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQcm92aWRlcyBhIFdlYktp
dCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFs
bG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25z
dCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKK307CisKKy8vIFByb3ZpZGVzIGFuIGVtYmVkZGVy
IEFQSSBjYWxsZWQgYnkgV2ViS2l0LgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFt
ZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFi
bGVIaWdoQWNjdXJhY3kpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBi
cmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7CisKKyAgICAvLyBB
dHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5z
IGl0cyBpZCwgd2hpY2gKKyAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxz
IGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2Vi
S2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSkgPSAwOworCisgICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0
aGUgZW1iZWRkZXIuCisgICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlk
KSA9IDA7Cit9OworCitXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0qKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHJldmlzaW9uIDU2NDM4KQor
KysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKLSNkZWZpbmUgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBXZWJHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VfaAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VfaAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CkBAIC00NCwz
MCArNDQsMjcgQEAgY2xhc3MgV2ViVVJMOwogLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxl
ZCBieSB0aGUgZW1iZWRkZXIuCiBjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Ugewog
cHVibGljOgorICAgIHN0cnVjdCBXZWJHZW9wb3NpdGlvbiB7CisgICAgICBkb3VibGUgbGF0aXR1
ZGU7CisgICAgICBkb3VibGUgbG9uZ2l0dWRlOworICAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRl
OworICAgICAgZG91YmxlIGFsdGl0dWRlOworICAgICAgZG91YmxlIGFjY3VyYWN5OworICAgICAg
Ym9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3k7CisgICAgICBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeTsKKyAgICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nOworICAgICAgZG91YmxlIGhlYWRpbmc7
CisgICAgICBib29sIHByb3ZpZGVzU3BlZWQ7CisgICAgICBkb3VibGUgc3BlZWQ7CisgICAgICBs
b25nIGxvbmcgdGltZXN0YW1wOworICAgIH07CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dl
ZChib29sIGFsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGNv
bnN0IFdlYkdlb3Bvc2l0aW9uJiBnZW9wb3NpdGlvbikgPSAwOworICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgbGF5ZXIsIHJlbW92ZSB0aGlzIG1ldGhvZC4K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcm
IG1lc3NhZ2UpID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQg
YnkgV2ViS2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdl
SWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRp
bmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJh
Y3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUg
R2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hp
Y2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0
aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0g
ICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIu
Ci0gICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7Ci19Owot
Ci1XZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKLQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bV9oCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwogICBNZXJnZWQg
L3RydW5rL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hy
b21pdW0uaDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQu
aAkocmV2aXNpb24gNTY1MzYpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEzIEBACiAjaWZuZGVmIFdlYlZpZXdD
bGllbnRfaAogI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gKIAorLy8gRklYTUU6IHRoaXMgaXMgYSB0
ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciwgcmVtb3ZlIGl0LgorI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiV2ViRHJhZ09wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIldlYkVkaXRpbmdBY3Rpb24uaCIKICNpbmNsdWRlICJXZWJGaWxlQ2hv
b3NlckNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJXZWJGaWxlQ2hvb3NlclBhcmFtcy5oIgorI2lu
Y2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgogI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgogI2luY2x1ZGUgIldlYlRleHRBZmZpbml0eS5oIgogI2luY2x1ZGUgIldlYlRleHREaXJl
Y3Rpb24uaCIKQEAgLTQ2LDcgKzQ5LDYgQEAgY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsK
IGNsYXNzIFdlYkRyYWdEYXRhOwogY2xhc3MgV2ViRmlsZUNob29zZXJDb21wbGV0aW9uOwogY2xh
c3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2U7CiBjbGFz
cyBXZWJOb2RlOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3MgV2ViUmFu
Z2U7CkBAIC0yOTEsNiArMjkzLDkgQEAgcHVibGljOgogICAgIC8vIEdlb2xvY2F0aW9uIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAg
ICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGdlb2xvY2F0aW9uIHNlcnZpY2VzLgor
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2UqIGdlb2xvY2F0aW9uU2Vy
dmljZSgpIHsgcmV0dXJuIGdldEdlb2xvY2F0aW9uU2VydmljZSgpOyB9CisKKyAgICAvLyBGSVhN
RTogdGhpcyBpcyBhIHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyLCByZW1vdmUgaXQuCiAg
ICAgdmlydHVhbCBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2V0R2Vv
bG9jYXRpb25TZXJ2aWNlKCkgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDU2NTM2KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgiCi0jaW5jbHVkZSAiR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlv
blNlcnZpY2UuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC03
MDQsNyArNzA0LDcgQEAgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBDaHJvbWVDbGllbnRJbXBsOgog
dm9pZCBDaHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCiB7CiAgICAgR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qPihnZW9sb2NhdGlvbi0+Z2V0R2VvbG9jYXRp
b25TZXJ2aWNlKCkpOwotICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5yZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uU2VydmljZS0+Z2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKCktPmdldEJyaWRnZUlkKCksIGZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKSk7CisgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCkt
PnJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoZ2VvbG9jYXRpb25TZXJ2aWNlLT5nZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UoKS0+Z2V0QnJpZGdlSWQoKSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCShyZXZpc2lvbiA1NjUzNikKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3
NSw2IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb29raWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkluZGV4
ZWREYXRhYmFzZVByb3h5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODMsNiArODIsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbC5oIgogI2luY2x1ZGUgIldvcmtlci5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHRQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtLmNwcAkocmV2aXNpb24gNTY1MzYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVD
bGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvbi5o
IgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgiCi0jaW5jbHVkZSAiR2Vv
cG9zaXRpb24uaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5o
IgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0KLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0KLXVzaW5n
IFdlYkNvcmU6OkNvb3JkaW5hdGVzOwotdXNpbmcgV2ViQ29yZTo6RnJhbWU7Ci11c2luZyBXZWJD
b3JlOjpHZW9sb2NhdGlvbjsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZTsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotdXNpbmcgV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50OwotdXNpbmcgV2ViQ29yZTo6R2VvcG9zaXRp
b247Ci11c2luZyBXZWJDb3JlOjpQb3NpdGlvbkVycm9yOwotdXNpbmcgV2ViQ29yZTo6UG9zaXRp
b25PcHRpb25zOwotdXNpbmcgV2ViQ29yZTo6U3RyaW5nOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVi
bGljOgotICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qKTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsKCk7Ci0KLSAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKLSAgICB2aXJ0dWFs
IGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKCk7Ci0gICAgdmlydHVhbCBpbnQgZ2V0QnJpZGdlSWQoKSBjb25zdDsKLQot
ICAgIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxv
bmcgdGltZXN0YW1wKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNv
ZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlld0Ns
aWVudCogZ2V0V2ViVmlld0NsaWVudCgpOwotCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0gb3ducyB1cywgd2Ugb25seSBoYXZlIGEgcG9pbnRlciBiYWNrIHRvIGl0LgotICAgIEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwot
ICAgIGludCBtX2JyaWRnZUlkOwotfTsKLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVh
dGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKLXsKLSAgICByZXR1cm4gbmV3IEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pOwotfQotCi1H
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkK
LSAgICA6IG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0oZ2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0pCi17Ci0gICAgLy8gV2UgbmVlZCB0byBhdHRhY2ggb3Vyc2VsdmVzIGhlcmU6IEdlb2xv
Y2F0aW9uIGNhbGxzIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoKQotICAgIC8vIGRpcmVjdGx5
LCBhbmQgd2UgbmVlZCB0byBiZSBhdHRhY2hlZCBzbyB0aGF0IHRoZSBlbWJlZGRlciBjYW4gY2Fs
bAotICAgIC8vIG91ciBzZXRJc0FsbG93ZWQoKS4KLSAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmll
d0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwot
ICAgIEFTU0VSVChtX2JyaWRnZUlkKTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6fkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKQotewotICAgIFdlYktpdDo6V2ViVmll
d0NsaWVudCogd2ViVmlld0NsaWVudCA9IGdldFdlYlZpZXdDbGllbnQoKTsKLSAgICAvLyBHZW9s
b2NhdGlvbiBoYXMgYW4gT3duUHRyIHRvIHVzLCBhbmQgaXQncyBkZXN0cm95ZWQgYWZ0ZXIgdGhl
IGZyYW1lIGhhcwotICAgIC8vIGJlZW4gcG90ZW50aWFsbHkgZGlzY29ubmVjdGVkLiBJbiB0aGlz
IGNhc2UsIGl0IGNhbGxzIHN0b3BVcGRhdGluZygpCi0gICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFu
ZCB3ZSBoYXZlIGFscmVhZHkgZGV0dGFjaGVkIG91cnNlbHZlcy4KLSAgICBpZiAoIXdlYlZpZXdD
bGllbnQpIHsKLSAgICAgICAgQVNTRVJUKCFtX2JyaWRnZUlkKTsKLSAgICB9IGVsc2UgaWYgKG1f
YnJpZGdlSWQpCi0gICAgICAgIHdlYlZpZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgp
LT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOwotfQotCi1ib29sIEdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBwb3NpdGlvbk9wdGlv
bnMpCi17Ci0gICAgaWYgKCFtX2JyaWRnZUlkKQotICAgICAgICBtX2JyaWRnZUlkID0gZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMp
OwotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN0YXJ0
VXBkYXRpbmcobV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5
KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnN0b3BVcGRhdGluZygpCi17Ci0gICAgaWYgKG1fYnJpZGdlSWQpIHsKLSAgICAgICAg
V2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBnZXRX
ZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOwotICAgICAgICBnZW9sb2Nh
dGlvblNlcnZpY2UtPnN0b3BVcGRhdGluZyhtX2JyaWRnZUlkKTsKLSAgICAgICAgZ2VvbG9jYXRp
b25TZXJ2aWNlLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOwotICAgICAgICBtX2JyaWRnZUlk
ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3Vz
cGVuZCgpCi17Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KS0+c3VzcGVuZChtX2JyaWRnZUlkKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjpyZXN1bWUoKQotewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRp
b25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKLX0KLQotaW50IEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9icmlk
Z2VJZDsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93
ZWQoYm9vbCBhbGxvd2VkKQotewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNl
dElzQWxsb3dlZChhbGxvd2VkKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCi17Ci0gICAgbV9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3Bl
ZWQsIHNwZWVkLCB0aW1lc3RhbXApOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdEVycm9yKGVy
cm9yQ29kZSwgbWVzc2FnZSk7Ci19Ci0KLVdlYlZpZXdDbGllbnQqIEdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAh
ZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViS2l0OjpDaHJvbWVDbGll
bnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGll
bnRJbXBsKj4oZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsKLSAgICBXZWJLaXQ6
OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBjaHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3
KCktPmNsaWVudCgpOwotICAgIHJldHVybiB3ZWJWaWV3Q2xpZW50OwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsLmNwcAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJH
ZW9sb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgiCisj
aW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUG9z
aXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgorI2luY2x1ZGUgIldl
YkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViVmlld0Ns
aWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJ
T04pCisKK3VzaW5nIFdlYkNvcmU6OkNvb3JkaW5hdGVzOwordXNpbmcgV2ViQ29yZTo6RnJhbWU7
Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvbjsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
OwordXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50OwordXNpbmcgV2ViQ29y
ZTo6R2VvcG9zaXRpb247Cit1c2luZyBXZWJDb3JlOjpQb3NpdGlvbkVycm9yOwordXNpbmcgV2Vi
Q29yZTo6UG9zaXRpb25PcHRpb25zOwordXNpbmcgV2ViQ29yZTo6U3RyaW5nOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1Ymxp
YyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIH5HZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKCk7CisKKyAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UK
KyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CisgICAgdmlydHVhbCBpbnQgZ2V0QnJpZGdlSWQo
KSBjb25zdDsKKworICAgIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQorICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92
aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3Zp
ZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNw
ZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9y
KGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6Cisg
ICAgV2ViVmlld0NsaWVudCogZ2V0V2ViVmlld0NsaWVudCgpOworCisgICAgLy8gR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0gb3ducyB1cywgd2Ugb25seSBoYXZlIGEgcG9pbnRlciBiYWNrIHRv
IGl0LgorICAgIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBtX0dlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtOworICAgIGludCBtX2JyaWRnZUlkOworfTsKKworR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKK3sKKyAgICByZXR1cm4g
bmV3IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0pOworfQorCitHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bSkKKyAgICA6IG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0oZ2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0pCit7CisgICAgLy8gV2UgbmVlZCB0byBhdHRhY2ggb3Vyc2VsdmVz
IGhlcmU6IEdlb2xvY2F0aW9uIGNhbGxzIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoKQorICAg
IC8vIGRpcmVjdGx5LCBhbmQgd2UgbmVlZCB0byBiZSBhdHRhY2hlZCBzbyB0aGF0IHRoZSBlbWJl
ZGRlciBjYW4gY2FsbAorICAgIC8vIG91ciBzZXRJc0FsbG93ZWQoKS4KKyAgICBtX2JyaWRnZUlk
ID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJp
ZGdlKHRoaXMpOworICAgIEFTU0VSVChtX2JyaWRnZUlkKTsKK30KKworR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6fkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKQoreworICAgIFdl
YktpdDo6V2ViVmlld0NsaWVudCogd2ViVmlld0NsaWVudCA9IGdldFdlYlZpZXdDbGllbnQoKTsK
KyAgICAvLyBHZW9sb2NhdGlvbiBoYXMgYW4gT3duUHRyIHRvIHVzLCBhbmQgaXQncyBkZXN0cm95
ZWQgYWZ0ZXIgdGhlIGZyYW1lIGhhcworICAgIC8vIGJlZW4gcG90ZW50aWFsbHkgZGlzY29ubmVj
dGVkLiBJbiB0aGlzIGNhc2UsIGl0IGNhbGxzIHN0b3BVcGRhdGluZygpCisgICAgLy8gaGFzIGJl
ZW4gY2FsbGVkIGFuZCB3ZSBoYXZlIGFscmVhZHkgZGV0dGFjaGVkIG91cnNlbHZlcy4KKyAgICBp
ZiAoIXdlYlZpZXdDbGllbnQpIHsKKyAgICAgICAgQVNTRVJUKCFtX2JyaWRnZUlkKTsKKyAgICB9
IGVsc2UgaWYgKG1fYnJpZGdlSWQpCisgICAgICAgIHdlYlZpZXdDbGllbnQtPmdldEdlb2xvY2F0
aW9uU2VydmljZSgpLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOworfQorCitib29sIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBw
b3NpdGlvbk9wdGlvbnMpCit7CisgICAgaWYgKCFtX2JyaWRnZUlkKQorICAgICAgICBtX2JyaWRn
ZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNo
QnJpZGdlKHRoaXMpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2
aWNlKCktPnN0YXJ0VXBkYXRpbmcobV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxl
SGlnaEFjY3VyYWN5KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGw6OnN0b3BVcGRhdGluZygpCit7CisgICAgaWYgKG1fYnJpZGdlSWQp
IHsKKyAgICAgICAgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlvblNl
cnZpY2UgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOworICAg
ICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPnN0b3BVcGRhdGluZyhtX2JyaWRnZUlkKTsKKyAgICAg
ICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOworICAgICAg
ICBtX2JyaWRnZUlkID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbDo6c3VzcGVuZCgpCit7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2Nh
dGlvblNlcnZpY2UoKS0+c3VzcGVuZChtX2JyaWRnZUlkKTsKK30KKwordm9pZCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUoKQoreworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+
Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKK30KKworaW50IEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9icmlkZ2VJZDsKK30KKwordm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
OjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0tPnNldElzQWxsb3dlZChhbGxvd2VkKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUg
bG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91Ymxl
IGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRl
QWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92
aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCit7CisgICAgbV9H
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25n
aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcs
IHByb3ZpZGVzU3BlZWQsIHNwZWVkLCB0aW1lc3RhbXApOworfQorCit2b2lkIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGw6OnNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJT
dHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0
TGFzdEVycm9yKGVycm9yQ29kZSwgbWVzc2FnZSk7Cit9CisKK1dlYlZpZXdDbGllbnQqIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQoreworICAgIEZyYW1l
KiBmcmFtZSA9IG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgV2ViS2l0
OjpDaHJvbWVDbGllbnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gc3RhdGljX2Nhc3Q8V2ViS2l0
OjpDaHJvbWVDbGllbnRJbXBsKj4oZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsK
KyAgICBXZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBjaHJvbWVDbGllbnRJ
bXBsLT53ZWJWaWV3KCktPmNsaWVudCgpOworICAgIHJldHVybiB3ZWJWaWV3Q2xpZW50OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsLmNwcAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SW1wbC5oIgpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlBvc2l0aW9uT3B0
aW9ucy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogI2luY2x1
ZGUgIldlYlZpZXdJbXBsLmgiCiAKQEAgLTYxLDEwICs2MywxMCBAQCB1c2luZyBXZWJDb3JlOjpT
dHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsIDogcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVibGljIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsIDogcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVibGljIFdlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotICAgIHZpcnR1
YWwgfkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKTsKKyAgICBleHBsaWNpdCBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Cisg
ICAgdmlydHVhbCB+V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpOwogCiAgICAgLy8g
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlCiAgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmco
UG9zaXRpb25PcHRpb25zKik7CkBAIC03NSw2ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQo
Ym9vbCBhbGxvd2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGNvbnN0IFdl
Ykdlb3Bvc2l0aW9uJiBnZW9wb3NpdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3Np
dGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRp
dHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRp
bmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9u
ZyBsb25nIHRpbWVzdGFtcCk7CiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJy
b3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwogCkBAIC04OCw4MCArOTEsODggQEAg
cHJpdmF0ZToKIAogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bSkKIHsKLSAgICByZXR1cm4gbmV3IEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pOworICAgIHJldHVybiBuZXcgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSk7CiB9
CiAKLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtKQorV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6V2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0pCiAgICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKGdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtKQogewogICAgIC8vIFdlIG5lZWQgdG8gYXR0YWNoIG91cnNlbHZl
cyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKCkKICAg
ICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28gdGhhdCB0aGUgZW1i
ZWRkZXIgY2FuIGNhbGwKICAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCi0gICAgbV9icmlkZ2VJ
ZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJy
aWRnZSh0aGlzKTsKKyAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2Nh
dGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwogICAgIEFTU0VSVChtX2JyaWRnZUlk
KTsKIH0KIAotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6fkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGwoKQorV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6fldlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwoKQogewogICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCog
d2ViVmlld0NsaWVudCA9IGdldFdlYlZpZXdDbGllbnQoKTsKICAgICAvLyBHZW9sb2NhdGlvbiBo
YXMgYW4gT3duUHRyIHRvIHVzLCBhbmQgaXQncyBkZXN0cm95ZWQgYWZ0ZXIgdGhlIGZyYW1lIGhh
cwogICAgIC8vIGJlZW4gcG90ZW50aWFsbHkgZGlzY29ubmVjdGVkLiBJbiB0aGlzIGNhc2UsIGl0
IGNhbGxzIHN0b3BVcGRhdGluZygpCiAgICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFuZCB3ZSBoYXZl
IGFscmVhZHkgZGV0dGFjaGVkIG91cnNlbHZlcy4KLSAgICBpZiAoIXdlYlZpZXdDbGllbnQpIHsK
KyAgICBpZiAoIXdlYlZpZXdDbGllbnQpCiAgICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7Ci0g
ICAgfSBlbHNlIGlmIChtX2JyaWRnZUlkKQotICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRHZW9s
b2NhdGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKKyAgICBlbHNlIGlm
IChtX2JyaWRnZUlkKQorICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZW9sb2NhdGlvblNlcnZpY2Uo
KS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKIH0KIAotYm9vbCBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogcG9zaXRpb25PcHRp
b25zKQorYm9vbCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5n
KFBvc2l0aW9uT3B0aW9ucyogcG9zaXRpb25PcHRpb25zKQogewogICAgIGlmICghbV9icmlkZ2VJ
ZCkKLSAgICAgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRp
b25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCkt
PmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3Np
dGlvbk9wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAgICAgICAgbV9icmlkZ2VJZCA9
IGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0
aGlzKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5zdGFy
dFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1l
KCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFj
eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjpzdG9wVXBkYXRpbmcoKQordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsOjpzdG9wVXBkYXRpbmcoKQogewogICAgIGlmIChtX2JyaWRnZUlkKSB7Ci0gICAgICAgIFdl
Ykdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsKKyAgICAgICAgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdl
b2xvY2F0aW9uU2VydmljZSgpOwogICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPnN0b3BVcGRh
dGluZyhtX2JyaWRnZUlkKTsKICAgICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5kZXR0YWNoQnJp
ZGdlKG1fYnJpZGdlSWQpOwogICAgICAgICBtX2JyaWRnZUlkID0gMDsKICAgICB9CiB9CiAKLXZv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVuZCgpCit2b2lkIFdlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQogewotICAgIGdldFdlYlZpZXdDbGll
bnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7CisgICAg
Z2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+c3VzcGVuZChtX2JyaWRn
ZUlkKTsKIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUoKQor
dm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUoKQogewotICAgIGdl
dFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRn
ZUlkKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1
bWUobV9icmlkZ2VJZCk7CiB9CiAKLWludCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpn
ZXRCcmlkZ2VJZCgpIGNvbnN0CitpbnQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
Z2V0QnJpZGdlSWQoKSBjb25zdAogewogICAgIHJldHVybiBtX2JyaWRnZUlkOwogfQogCi12b2lk
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQp
Cit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29s
IGFsbG93ZWQpCiB7CiAgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxv
d2VkKGFsbG93ZWQpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNl
dExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92
aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBz
cGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkKKwordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24oY29uc3QgV2ViR2VvcG9zaXRpb24mIHdlYmdlb3Bv
c2l0aW9uKQoreworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gZ2VvcG9zaXRpb24gPSBHZW9wb3Np
dGlvbjo6Y3JlYXRlKENvb3JkaW5hdGVzOjpjcmVhdGUod2ViZ2VvcG9zaXRpb24ubGF0aXR1ZGUs
IHdlYmdlb3Bvc2l0aW9uLmxvbmdpdHVkZSwgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNBbHRpdHVk
ZSwgd2ViZ2VvcG9zaXRpb24uYWx0aXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLmFjY3VyYWN5LCB3ZWJn
ZW9wb3NpdGlvbi5wcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIHdlYmdlb3Bvc2l0aW9uLmFsdGl0
dWRlQWNjdXJhY3ksIHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzSGVhZGluZywgd2ViZ2VvcG9zaXRp
b24uaGVhZGluZywgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNTcGVlZCwgd2ViZ2VvcG9zaXRpb24u
c3BlZWQpLCB3ZWJnZW9wb3NpdGlvbi50aW1lc3RhbXApOworICAgIG1fR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihnZW9wb3NpdGlvbik7Cit9CisKK3ZvaWQgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KQogewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFk
aW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKKyAgICBSZWZQ
dHI8R2VvcG9zaXRpb24+IGdlb3Bvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShDb29yZGlu
YXRlczo6Y3JlYXRlKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0
dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5
LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKSwgdGltZXN0
YW1wKTsKKyAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24o
Z2VvcG9zaXRpb24pOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNl
dExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit2b2lk
IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RFcnJvcihpbnQgZXJyb3JD
b2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgbV9HZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bS0+c2V0TGFzdEVycm9yKGVycm9yQ29kZSwgbWVzc2FnZSk7CiB9CiAKLVdlYlZp
ZXdDbGllbnQqIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldFdlYlZpZXdDbGllbnQo
KQorV2ViVmlld0NsaWVudCogV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2Vi
Vmlld0NsaWVudCgpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdl
ZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bS5jcHA6cjUzNDU1CgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmg6
NTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZTsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQ
cm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KK2NsYXNzIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldElz
QWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25n
IGxvbmcgdGltZXN0YW1wKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQg
ZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKK307CisKKy8vIFByb3Zp
ZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgorY2xhc3MgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBl
cm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwm
IHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGlu
dCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9
IDA7CisKKyAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVk
ZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKKyAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBz
dWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAgICB2aXJ0dWFsIGludCBh
dHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZSkgPSAwOworCisgICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlv
blNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCisgICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlk
Z2UoaW50IGJyaWRnZUlkKSA9IDA7Cit9OworCitXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAko
cmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKLSNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbF9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZTsKQEAgLTM3LDM3ICszNywxMCBAQCBjbGFzcyBHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlN0cmlu
ZzsKLWNsYXNzIFdlYlVSTDsKLQotLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0
aGUgZW1iZWRkZXIuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVz
U3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNz
YWdlKSA9IDA7Ci19OwotCi0vLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdl
YktpdC4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBj
b25zdCBXZWJVUkwmIHVybCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGlu
dCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOwotCi0gICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xv
Y2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCi0g
ICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMg
YWJvdmUuCi0gICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKLQotICAgIC8v
IERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgotICAg
IHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOwotfTsKLQorI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgogV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
KiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtKik7CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNl
bmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZW5kaWYgLy8gV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoK
</data>
<flag name="review"
          id="34924"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51898</attachid>
            <date>2010-03-29 04:01:55 -0700</date>
            <delta_ts>2010-03-29 11:50:53 -0700</delta_ts>
            <desc>Darin&apos;s comments.</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>59112</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjcxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIFVzZXMgR2VvcG9z
aXRpb24gaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhcmFtcyBmb3Igc2V0TGFzdFBvc2l0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY1MzUKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTo6c2V0SXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtOjpzZXRMYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmg6CisKIDIwMTAtMDMtMjQgIEplcmVt
eSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gRmlzaGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NzEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAg
LTM5LDE5ICszOSwxOCBAQCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6R2VvbG9jYXRpb25T
CiAgICAgICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGMpLAogICAgICAgICAgIG1fZ2VvbG9jYXRp
b24ocmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+KGMpKSwKICAgICAgICAgICBtX2dlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZShDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlKHRoaXMpKSwKLSAgICAgICAgICBtX2xhc3RQb3NpdGlvbihHZW9wb3NpdGlvbjo6
Y3JlYXRlKENvb3JkaW5hdGVzOjpjcmVhdGUoMC4wLCAwLjAsIGZhbHNlLCAwLjAsIDAuMCwgZmFs
c2UsIDAuMCwgZmFsc2UsIDAuMCwgZmFsc2UsIDAuMCksIDApKSwKICAgICAgICAgICBtX2xhc3RF
cnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJ
TEFCTEUsICIiKSkKIHsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0
SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93
ZWQoYWxsb3dlZCk7ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7
CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihk
b3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwg
ZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFj
Y3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRv
dWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25n
IHRpbWVzdGFtcCkKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3Np
dGlvbihQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsKLSAgICBtX2xhc3RQ
b3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9sYXN0UG9z
aXRpb24gPSBnZW9wb3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0uaAkocmV2aXNpb24gNTY3MTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEs
MTAgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1l
dDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsx
NCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
ICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgog
CiAgICAgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5nZXQoKTsgfQogICAg
IHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBzZXRMYXN0UG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5n
LCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcg
bG9uZyB0aW1lc3RhbXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8R2Vv
cG9zaXRpb24+KTsKICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03NSw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9sb2NhdGlvbjsKLSAg
ICBPd25QdHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJy
aWRnZTsgICAgCisgICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZT4gbV9nZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlv
bjsKICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9OwpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA1NjcxMykKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wMy0yOSAgTWFyY3VzIEJ1bGFjaCAg
PGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBicmlkZ2U6CisgICAg
ICAgIFVzZXMgYSBzdHJ1Y3QgZm9yIHNldExhc3RQb3NpdGlvbiBpbnN0ZWFkIG9mIGluZGl2aWR1
YWwgcGFyYW1zLgorICAgICAgICBSZW5hbWUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21p
dW0uY3BwIHRvIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwICAgICAgICAgICAg
CisgICAgICAgIFVzZXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciBpbiBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjUzNQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmg6IENvcGllZCBmcm9tIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlOjpkZXRhY2hCcmlkZ2UpOgorICAgICAg
ICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaDogQ29waWVkIGZyb20gV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oLgor
ICAgICAgICAqIHB1YmxpYy9XZWJHZW9wb3NpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJs
aWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50OjpnZW9s
b2NhdGlvblNlcnZpY2UpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlz
c2lvbkZvckZyYW1lKToKKyAgICAgICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAg
ICAqIHNyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6Oldl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0
YXJ0VXBkYXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93ZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRM
YXN0RXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsOjpnZXRXZWJWaWV3Q2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbC5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmguCisKIDIwMTAtMDMtMjQgIEplcmVteSBPcmxv
dyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDU2NzEzKQorKysgV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOSBAQAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViRm9udENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViRm9ybUNvbnRyb2xFbGVtZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
Rm9ybUVsZW1lbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2UuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJHZW9wb3NpdGlvbi5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkdseXBoQ2FjaGUuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkhpc3RvcnlJdGVtLmgnLApAQCAtMjQ2LDcgKzI0OSw2IEBACiAgICAgICAgICAgICAgICAg
J3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW0uY3BwJywJCQogICAgICAgICAgICAgICAgICdzcmMvZ3RrL1dlYkZvbnRJbmZv
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9ndGsvV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwJywKQEAgLTMyMyw2ICsz
MjUsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9ybUVsZW1lbnQuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkZyYW1lSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRnJhbWVJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBoQ2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcCcs
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNo
cm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCShyZXZpc2lvbiA1NjcxMykKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNDMgKzMxLDE1IEBACiAjaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUNocm9taXVtX2gKICNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAog
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Ci1j
bGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKLX0KKyNpbmNsdWRlICJXZWJHZW9sb2Nh
dGlvblNlcnZpY2UuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYlN0cmluZzsK
LWNsYXNzIFdlYlVSTDsKLQotLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUg
ZW1iZWRkZXIuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFj
eSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3Bl
ZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdl
KSA9IDA7Ci19OwotCi0vLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktp
dC4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25z
dCBXZWJVUkwmIHVybCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBi
cmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOwotCi0gICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0
aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCi0gICAg
Ly8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJv
dmUuCi0gICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKLQotICAgIC8vIERl
dHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgotICAgIHZp
cnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworLy8gREVQUkVDQVRF
RDogcmVtb3ZlIHRoaXMgZmlsZSwgdGhpcyBpcyBhIHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxh
eWVyIGZvcgorLy8gcmVuYW1pbmcgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHRvIFdl
Ykdlb2xvY2F0aW9uU2VydmljZS4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFj
ZSA6IHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2UgewogfTsKIAotV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCiAjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCShy
ZXZpc2lvbiA1NjQzOCkJKGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bS5oOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJHZW9sb2NhdGlvblNlcnZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2RlZmluZSBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nOworY2xhc3Mg
V2ViVVJMOworCisvLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRl
ci4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29s
IHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91
YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsK
K307CisKKy8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgorY2xh
c3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVS
TCYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlk
LCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUo
aW50IGJyaWRnZUlkKSA9IDA7CisKKyAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25Ccmlk
Z2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKKyAgICAvLyBzaG91
bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAg
ICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOworCisgICAgLy8gRGV0dGFjaGVz
IHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCisgICAgdmlydHVhbCB2
b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7Cit9OworCitXZWJDb3JlOjpHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
V2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJ
KHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjkgKzI4LDE4IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAot
I2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjaWZuZGVmIFdlYkdl
b2xvY2F0aW9uU2VydmljZV9oCisjZGVmaW5lIFdlYkdlb2xvY2F0aW9uU2VydmljZV9oCiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNz
IEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5n
OwogY2xhc3MgV2ViVVJMOwogCi0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRo
ZSBlbWJlZGRlci4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpID0gMDsKLX07Ci0KIC8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2Vi
S2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKK2NsYXNzIFdlYkdl
b2xvY2F0aW9uU2VydmljZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJt
aXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1
cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CkBAIC01OCwxNiArNDcsMTcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7CiAKLSAgICAvLyBBdHRhY2hlcyB0
aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwg
d2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUg
bWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwor
ICAgIC8vIEF0dGFjaGVzIHRoZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyIGFuZCByZXR1cm5zIGl0cworICAgIC8vIGlkLCB3aGljaCBzaG91bGQgYmUgdXNlZCBv
biBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAgICB2aXJ0dWFsIGlu
dCBhdHRhY2hCcmlkZ2UoV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKikgPSAwOwogCi0gICAg
Ly8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCisg
ICAgLy8gRGV0YWNoZXMgdGhlIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSBmcm9tIHRoZSBl
bWJlZGRlci4KKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgeyBk
ZXR0YWNoQnJpZGdlKGJyaWRnZUlkKTsgfQorCisgICAgLy8gREVQUkVDQVRFRDogdGhpcyBpcyBh
IHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyLCByZW1vdmUgdGhpcyBtZXRob2QuCiAgICAg
dmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CiB9OwogCi1XZWJD
b3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKLQogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJv
bWl1bV9oCisjZW5kaWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlX2gKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwogICBNZXJnZWQgL3RydW5rL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDpyNTM0NTUKCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlLmgJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmg6NTY0MzgpCisrKyBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1
bV9oCisjZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBj
YWxsZWQgYnkgdGhlIGVtYmVkZGVyLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9v
bCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0
cmluZyYgbWVzc2FnZSkgPSAwOworfTsKKworLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNh
bGxlZCBieSBXZWJLaXQuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Ugewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBi
cmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRV
cGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hB
Y2N1cmFjeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsKKworICAgIC8vIEF0dGFjaGVz
IHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlk
LCB3aGljaAorICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRo
ZSBtZXRob2RzIGFib3ZlLgorICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6Oldl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7
CisKKyAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJl
ZGRlci4KKyAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsK
K307CisKK1dlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSop
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAotI2RlZmluZSBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjaWZuZGVmIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZV9oCisjZGVmaW5lIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZV9oCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKQEAgLTQwLDM0ICs0MCwx
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViVVJM
Oworc3RydWN0IFdlYkdlb3Bvc2l0aW9uOwogCiAvLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2Fs
bGVkIGJ5IHRoZSBlbWJlZGRlci4KIGNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGNvbnN0IFdlYkdlb3Bvc2l0aW9u
JikgPSAwOworICAgIC8vIERFUFJFQ0FURUQ6IHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJp
bGl0eSBsYXllciwgcmVtb3ZlIHRoaXMgbWV0aG9kLgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVz
QWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQs
IGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9y
KGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOwogfTsKIAotLy8g
UHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCi1jbGFzcyBXZWJHZW9s
b2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdl
YlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3Bl
bmQoaW50IGJyaWRnZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdl
SWQpID0gMDsKLQotICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUg
ZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAotICAgIC8vIHNob3VsZCBiZSB1c2Vk
IG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwg
aW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7Ci0KLSAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xv
Y2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0dGFj
aEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKLX07Ci0KLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpH
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAot
I2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNlbmRpZiAvLyBX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkdlb3Bvc2l0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkdlb3Bvc2l0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJHZW9wb3NpdGlvbl9oCisjZGVmaW5lIFdlYkdlb3Bvc2l0aW9u
X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJHZW9wb3NpdGlvbiB7CisgICAg
ZG91YmxlIGxhdGl0dWRlOworICAgIGRvdWJsZSBsb25naXR1ZGU7CisgICAgYm9vbCBwcm92aWRl
c0FsdGl0dWRlOworICAgIGRvdWJsZSBhbHRpdHVkZTsKKyAgICBkb3VibGUgYWNjdXJhY3k7Cisg
ICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3k7CisgICAgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3k7CisgICAgYm9vbCBwcm92aWRlc0hlYWRpbmc7CisgICAgZG91YmxlIGhlYWRpbmc7Cisg
ICAgYm9vbCBwcm92aWRlc1NwZWVkOworICAgIGRvdWJsZSBzcGVlZDsKKyAgICBsb25nIGxvbmcg
dGltZXN0YW1wOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJH
ZW9wb3NpdGlvbl9oCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQuaAko
cmV2aXNpb24gNTY3MTMpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXdDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDEzIEBACiAjaWZuZGVmIFdlYlZpZXdDbGll
bnRfaAogI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gKIAorLy8gREVQUkVDQVRFRDogdGhpcyBpcyBh
IHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyLCByZW1vdmUgaXQuCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJEcmFnT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViRWRpdGluZ0FjdGlvbi5oIgogI2luY2x1ZGUgIldlYkZpbGVD
aG9vc2VyQ29tcGxldGlvbi5oIgogI2luY2x1ZGUgIldlYkZpbGVDaG9vc2VyUGFyYW1zLmgiCisj
aW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgiCiAjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViVGV4dEFmZmluaXR5LmgiCiAjaW5jbHVkZSAiV2ViVGV4dERp
cmVjdGlvbi5oIgpAQCAtNDYsNyArNDksNiBAQCBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OwogY2xhc3MgV2ViRHJhZ0RhdGE7CiBjbGFzcyBXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb247CiBj
bGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZTsKIGNs
YXNzIFdlYk5vZGU7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBXZWJS
YW5nZTsKQEAgLTI5MSw2ICsyOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gR2VvbG9jYXRpb24gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
ICAgICAvLyBBY2Nlc3MgdGhlIGVtYmVkZGVyIEFQSSBmb3IgZ2VvbG9jYXRpb24gc2VydmljZXMu
CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZSogZ2VvbG9jYXRpb25T
ZXJ2aWNlKCkgeyByZXR1cm4gZ2V0R2VvbG9jYXRpb25TZXJ2aWNlKCk7IH0KKworICAgIC8vIERF
UFJFQ0FURUQ6IHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciwgcmVtb3Zl
IGl0LgogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Uq
IGdldEdlb2xvY2F0aW9uU2VydmljZSgpIHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA1Njcx
MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgotI2luY2x1
ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgpAQCAtNzA0LDcgKzcwNCw3IEBAIE5vdGlmaWNhdGlvblByZXNlbnRlciogQ2hyb21lQ2xpZW50
SW1wbDoKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lv
bkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAg
IEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2UgPSByZWludGVy
cHJldF9jYXN0PEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKj4oZ2VvbG9jYXRpb24tPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpKTsKLSAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5nZXRHZW9sb2Nh
dGlvblNlcnZpY2UoKS0+cmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShnZW9sb2NhdGlvblNlcnZp
Y2UtPmdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpLT5nZXRCcmlkZ2VJZCgpLCBmcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCkpOworICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5yZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uU2VydmljZS0+Z2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKCktPmdldEJyaWRnZUlkKCksIGZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKSk7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNpb24gNTY3MTMpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsNyArNzUsNiBAQAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ29va2ll
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTgzLDYgKzgy
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNsdWRlICJX
b3JrZXJDb250ZXh0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDU2NzEzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9H
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q2hyb21lQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR2VvbG9j
YXRpb24uaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIkdlb3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKLSNpbmNsdWRlICJXZWJGcmFt
ZS5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYlZpZXdDbGllbnQu
aCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotCi0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQot
Ci11c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKLXVzaW5nIFdlYkNvcmU6OkZyYW1lOwotdXNp
bmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2U7Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKLXVz
aW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsKLXVzaW5nIFdlYkNvcmU6Okdl
b3Bvc2l0aW9uOwotdXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJvcjsKLXVzaW5nIFdlYkNvcmU6
OlBvc2l0aW9uT3B0aW9uczsKLXVzaW5nIFdlYkNvcmU6OlN0cmluZzsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJsaWMgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0gICAgdmlydHVhbCB+R2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbCgpOwotCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlCi0gICAg
dmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKik7Ci0gICAgdmlydHVh
bCB2b2lkIHN0b3BVcGRhdGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3VtZSgpOwotICAgIHZpcnR1YWwgaW50IGdldEJyaWRnZUlkKCkgY29u
c3Q7Ci0KLSAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RQ
b3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hl
YWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwg
bG9uZyBsb25nIHRpbWVzdGFtcCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQg
ZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIFdl
YlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKLQotICAgIC8vIEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBvaW50ZXIgYmFjayB0byBpdC4K
LSAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bTsKLSAgICBpbnQgbV9icmlkZ2VJZDsKLX07Ci0KLUdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCi17Ci0gICAgcmV0dXJuIG5ldyBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsK
LX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0pCi0gICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKGdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtKQotewotICAgIC8vIFdlIG5lZWQgdG8gYXR0YWNoIG91cnNlbHZlcyBoZXJl
OiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKCkKLSAgICAvLyBk
aXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28gdGhhdCB0aGUgZW1iZWRkZXIg
Y2FuIGNhbGwKLSAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCi0gICAgbV9icmlkZ2VJZCA9IGdl
dFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0
aGlzKTsKLSAgICBBU1NFUlQobV9icmlkZ2VJZCk7Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKLXsKLSAgICBXZWJLaXQ6
OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7Ci0gICAg
Ly8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJveWVkIGFm
dGVyIHRoZSBmcmFtZSBoYXMKLSAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RlZC4g
SW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQotICAgIC8vIGhhcyBiZWVuIGNh
bGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAgaWYgKCF3
ZWJWaWV3Q2xpZW50KSB7Ci0gICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7Ci0gICAgfSBlbHNl
IGlmIChtX2JyaWRnZUlkKQotICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRHZW9sb2NhdGlvblNl
cnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLX0KLQotYm9vbCBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogcG9zaXRp
b25PcHRpb25zKQotewotICAgIGlmICghbV9icmlkZ2VJZCkKLSAgICAgICAgbV9icmlkZ2VJZCA9
IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRn
ZSh0aGlzKTsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgp
LT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0t
PmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9wdGlvbnMtPmVuYWJsZUhpZ2hB
Y2N1cmFjeSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQotewotICAgIGlmIChtX2JyaWRnZUlkKSB7Ci0g
ICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2VvbG9jYXRpb25TZXJ2aWNl
ID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsKLSAgICAgICAg
Z2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7Ci0gICAgICAgIGdl
b2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKLSAgICAgICAgbV9i
cmlkZ2VJZCA9IDA7Ci0gICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN1c3BlbmQoKQotewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25T
ZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKLXsKLSAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7Ci19Ci0KLWludCBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fYnJpZGdlSWQ7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0
SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQotewotICAgIG1fR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRl
LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92
aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RF
cnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOwotfQotCi1XZWJWaWV3Q2xpZW50KiBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKLXsKLSAgICBGcmFtZSogZnJh
bWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYktpdDo6Q2hy
b21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRpY19jYXN0PFdlYktpdDo6Q2hy
b21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKSk7Ci0gICAg
V2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gY2hyb21lQ2xpZW50SW1wbC0+
d2ViVmlldygpLT5jbGllbnQoKTsKLSAgICByZXR1cm4gd2ViVmlld0NsaWVudDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21pdW0vc3Jj
L0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDo1NjQzOCkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgi
CisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBvc2l0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKKyNpbmNs
dWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldl
YlZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorCisjaWYgRU5BQkxFKEdF
T0xPQ0FUSU9OKQorCit1c2luZyBXZWJDb3JlOjpDb29yZGluYXRlczsKK3VzaW5nIFdlYkNvcmU6
OkZyYW1lOwordXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb247Cit1c2luZyBXZWJDb3JlOjpHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2U7Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNsaWVudDsKK3VzaW5n
IFdlYkNvcmU6Okdlb3Bvc2l0aW9uOwordXNpbmcgV2ViQ29yZTo6UG9zaXRpb25FcnJvcjsKK3Vz
aW5nIFdlYkNvcmU6OlBvc2l0aW9uT3B0aW9uczsKK3VzaW5nIFdlYkNvcmU6OlN0cmluZzsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwg
OiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisgICAgdmlydHVhbCB+R2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpOworCisgICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlCisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKik7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBzdXNw
ZW5kKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIHZpcnR1YWwgaW50IGdldEJy
aWRnZUlkKCkgY29uc3Q7CisKKyAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmlydHVhbCB2
b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRv
dWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7CisgICAgdmlydHVhbCB2b2lkIHNldExh
c3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpOworCitwcml2
YXRlOgorICAgIFdlYlZpZXdDbGllbnQqIGdldFdlYlZpZXdDbGllbnQoKTsKKworICAgIC8vIEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtIG93bnMgdXMsIHdlIG9ubHkgaGF2ZSBhIHBvaW50ZXIg
YmFjayB0byBpdC4KKyAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogbV9HZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bTsKKyAgICBpbnQgbV9icmlkZ2VJZDsKK307CisKK0dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCit7CisgICAg
cmV0dXJuIG5ldyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtKTsKK30KKworR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0pCisgICAgOiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKGdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKQoreworICAgIC8vIFdlIG5lZWQgdG8gYXR0YWNoIG91
cnNlbHZlcyBoZXJlOiBHZW9sb2NhdGlvbiBjYWxscyByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1l
KCkKKyAgICAvLyBkaXJlY3RseSwgYW5kIHdlIG5lZWQgdG8gYmUgYXR0YWNoZWQgc28gdGhhdCB0
aGUgZW1iZWRkZXIgY2FuIGNhbGwKKyAgICAvLyBvdXIgc2V0SXNBbGxvd2VkKCkuCisgICAgbV9i
cmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0
dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBBU1NFUlQobV9icmlkZ2VJZCk7Cit9CisKK0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKK3sK
KyAgICBXZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xp
ZW50KCk7CisgICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3Mg
ZGVzdHJveWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKKyAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRp
c2Nvbm5lY3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQorICAgIC8v
IGhhcyBiZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMu
CisgICAgaWYgKCF3ZWJWaWV3Q2xpZW50KSB7CisgICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7
CisgICAgfSBlbHNlIGlmIChtX2JyaWRnZUlkKQorICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRH
ZW9sb2NhdGlvblNlcnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKK30KKworYm9v
bCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0
aW9ucyogcG9zaXRpb25PcHRpb25zKQoreworICAgIGlmICghbV9icmlkZ2VJZCkKKyAgICAgICAg
bV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCkt
PmF0dGFjaEJyaWRnZSh0aGlzKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0
aW9uU2VydmljZSgpLT5zdGFydFVwZGF0aW5nKG1fYnJpZGdlSWQsIG1fR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0tPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLCBwb3NpdGlvbk9wdGlvbnMt
PmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdG9wVXBkYXRpbmcoKQoreworICAgIGlmIChtX2Jy
aWRnZUlkKSB7CisgICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2VvbG9j
YXRpb25TZXJ2aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KTsKKyAgICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7
CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsK
KyAgICAgICAgbV9icmlkZ2VJZCA9IDA7CisgICAgfQorfQorCit2b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OnN1c3BlbmQoKQoreworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0
R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7Cit9CisKK3ZvaWQgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6cmVzdW1lKCkKK3sKKyAgICBnZXRXZWJWaWV3Q2xp
ZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJZCk7Cit9CisK
K2ludCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYnJpZGdlSWQ7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKK3sKKyAgICBtX0dlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7Cit9CisKK3ZvaWQgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQorewor
ICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihsYXRpdHVk
ZSwgbG9uZ2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKK30KKwordm9pZCBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29u
c3QgV2ViU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0tPnNldExhc3RFcnJvcihlcnJvckNvZGUsIG1lc3NhZ2UpOworfQorCitXZWJWaWV3Q2xpZW50
KiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwor
ICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHN0YXRpY19jYXN0
PFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbCo+KGZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGll
bnQoKSk7CisgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gY2hyb21l
Q2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKKyAgICByZXR1cm4gd2ViVmlld0NsaWVu
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9D
QVRJT04pCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDU2NDM4KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksOCArMjksNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCisjaW5jbHVkZSAiV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgpAQCAtNDMsNiArNDIsOSBAQAogI2luY2x1ZGUg
IlBvc2l0aW9uT3B0aW9ucy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgiCisjaW5jbHVk
ZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgiCisjaW5jbHVkZSAiV2ViR2VvcG9zaXRp
b24uaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwu
aCIKIApAQCAtNjEsMTAgKzYzLDEwIEBAIHVzaW5nIFdlYkNvcmU6OlN0cmluZzsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJs
aWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlIHsKK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwgOiBwdWJsaWMg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLCBwdWJsaWMgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7Ci0gICAgdmlydHVhbCB+R2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbCgpOworICAgIGV4cGxpY2l0IFdlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIH5XZWJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCk7CiAKICAgICAvLyBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2UKICAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMq
KTsKQEAgLTc1LDYgKzc3LDcgQEAgcHVibGljOgogCiAgICAgLy8gV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlCiAgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oY29uc3QgV2ViR2VvcG9zaXRpb24mIGdl
b3Bvc2l0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdl
YlN0cmluZyYgbWVzc2FnZSk7CiAKQEAgLTg4LDgwICs5MSw4OCBAQCBwcml2YXRlOgogCiBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQog
ewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSk7CisgICAgcmV0dXJuIG5ldyBXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsKIH0KIAotR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCitXZWJHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKICAg
ICA6IG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0oZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21p
dW0pCiB7CiAgICAgLy8gV2UgbmVlZCB0byBhdHRhY2ggb3Vyc2VsdmVzIGhlcmU6IEdlb2xvY2F0
aW9uIGNhbGxzIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoKQogICAgIC8vIGRpcmVjdGx5LCBh
bmQgd2UgbmVlZCB0byBiZSBhdHRhY2hlZCBzbyB0aGF0IHRoZSBlbWJlZGRlciBjYW4gY2FsbAog
ICAgIC8vIG91ciBzZXRJc0FsbG93ZWQoKS4KLSAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0Ns
aWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOworICAg
IG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5h
dHRhY2hCcmlkZ2UodGhpcyk7CiAgICAgQVNTRVJUKG1fYnJpZGdlSWQpOwogfQogCi1HZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCgpCitX
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbCgpCiB7CiAgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0g
Z2V0V2ViVmlld0NsaWVudCgpOwogICAgIC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25QdHIgdG8g
dXMsIGFuZCBpdCdzIGRlc3Ryb3llZCBhZnRlciB0aGUgZnJhbWUgaGFzCiAgICAgLy8gYmVlbiBw
b3RlbnRpYWxseSBkaXNjb25uZWN0ZWQuIEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3RvcFVwZGF0
aW5nKCkKLSAgICAvLyBoYXMgYmVlbiBjYWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBkZXR0YWNo
ZWQgb3Vyc2VsdmVzLgotICAgIGlmICghd2ViVmlld0NsaWVudCkgeworICAgIC8vIGhhcyBiZWVu
IGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldGFjaGVkIG91cnNlbHZlcy4KKyAgICBpZiAo
IXdlYlZpZXdDbGllbnQpCiAgICAgICAgIEFTU0VSVCghbV9icmlkZ2VJZCk7Ci0gICAgfSBlbHNl
IGlmIChtX2JyaWRnZUlkKQotICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZXRHZW9sb2NhdGlvblNl
cnZpY2UoKS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKKyAgICBlbHNlIGlmIChtX2JyaWRn
ZUlkKQorICAgICAgICB3ZWJWaWV3Q2xpZW50LT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+ZGV0YWNo
QnJpZGdlKG1fYnJpZGdlSWQpOwogfQogCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBwb3NpdGlvbk9wdGlvbnMpCitib29s
IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25P
cHRpb25zKiBwb3NpdGlvbk9wdGlvbnMpCiB7CiAgICAgaWYgKCFtX2JyaWRnZUlkKQotICAgICAg
ICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KS0+YXR0YWNoQnJpZGdlKHRoaXMpOwotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9j
YXRpb25TZXJ2aWNlKCktPnN0YXJ0VXBkYXRpbmcobV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9u
cy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOworICAgICAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmll
d0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOworICAg
IGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPnN0YXJ0VXBkYXRpbmco
bV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0
b3BVcGRhdGluZygpCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0b3BV
cGRhdGluZygpCiB7CiAgICAgaWYgKG1fYnJpZGdlSWQpIHsKLSAgICAgICAgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBnZXRXZWJWaWV3Q2xpZW50
KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOworICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZp
Y2UqIGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25T
ZXJ2aWNlKCk7CiAgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+c3RvcFVwZGF0aW5nKG1fYnJp
ZGdlSWQpOwotICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPmRldHRhY2hCcmlkZ2UobV9icmlk
Z2VJZCk7CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+ZGV0YWNoQnJpZGdlKG1fYnJpZGdl
SWQpOwogICAgICAgICBtX2JyaWRnZUlkID0gMDsKICAgICB9CiB9CiAKLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVuZCgpCit2b2lkIFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN1c3BlbmQoKQogewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2Vv
bG9jYXRpb25TZXJ2aWNlKCktPnN1c3BlbmQobV9icmlkZ2VJZCk7CisgICAgZ2V0V2ViVmlld0Ns
aWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+c3VzcGVuZChtX2JyaWRnZUlkKTsKIH0KIAot
dm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUoKQordm9pZCBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1bWUoKQogewotICAgIGdldFdlYlZpZXdDbGll
bnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKKyAgICBn
ZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXN1bWUobV9icmlkZ2VJ
ZCk7CiB9CiAKLWludCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgp
IGNvbnN0CitpbnQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQo
KSBjb25zdAogewogICAgIHJldHVybiBtX2JyaWRnZUlkOwogfQogCi12b2lkIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCit2b2lkIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCiB7
CiAgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQp
OwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkKKwordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpz
ZXRMYXN0UG9zaXRpb24oY29uc3QgV2ViR2VvcG9zaXRpb24mIHdlYmdlb3Bvc2l0aW9uKQorewor
ICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gZ2VvcG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRl
KENvb3JkaW5hdGVzOjpjcmVhdGUod2ViZ2VvcG9zaXRpb24ubGF0aXR1ZGUsIHdlYmdlb3Bvc2l0
aW9uLmxvbmdpdHVkZSwgd2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNBbHRpdHVkZSwgd2ViZ2VvcG9z
aXRpb24uYWx0aXR1ZGUsIHdlYmdlb3Bvc2l0aW9uLmFjY3VyYWN5LCB3ZWJnZW9wb3NpdGlvbi5w
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIHdlYmdlb3Bvc2l0aW9uLmFsdGl0dWRlQWNjdXJhY3ks
IHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzSGVhZGluZywgd2ViZ2VvcG9zaXRpb24uaGVhZGluZywg
d2ViZ2VvcG9zaXRpb24ucHJvdmlkZXNTcGVlZCwgd2ViZ2VvcG9zaXRpb24uc3BlZWQpLCB3ZWJn
ZW9wb3NpdGlvbi50aW1lc3RhbXApOworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0t
PnNldExhc3RQb3NpdGlvbihnZW9wb3NpdGlvbik7Cit9CisKK3ZvaWQgV2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91Ymxl
IGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJs
ZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVk
ZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJv
dmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQogewotICAgIG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCwgdGltZXN0YW1wKTsKKyAgICBSZWZQdHI8R2VvcG9zaXRp
b24+IGdlb3Bvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShDb29yZGluYXRlczo6Y3JlYXRl
KGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFj
eSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hl
YWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKSwgdGltZXN0YW1wKTsKKyAgICBt
X0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24oZ2VvcG9zaXRpb24p
OwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RFcnJvcihp
bnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBX
ZWJTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+
c2V0TGFzdEVycm9yKGVycm9yQ29kZSwgbWVzc2FnZSk7CiB9CiAKLVdlYlZpZXdDbGllbnQqIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQorV2ViVmlld0Ns
aWVudCogV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVudCgp
CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHA6cjUz
NDU1CgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgJKHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21p
dW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmg6NTY0MzgpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW1faAorI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9o
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsK
K2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCisvLyBQcm92aWRlcyBhIFdl
YktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29s
IGFsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBs
YXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUg
YWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ks
IGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhl
YWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0
YW1wKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBj
b25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKK307CisKKy8vIFByb3ZpZGVzIGFuIGVtYmVk
ZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JG
cmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBl
bmFibGVIaWdoQWNjdXJhY3kpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGlu
dCBicmlkZ2VJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7CisKKyAgICAv
LyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1
cm5zIGl0cyBpZCwgd2hpY2gKKyAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNh
bGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KKyAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2Uo
V2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZSkgPSAwOworCisgICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJv
bSB0aGUgZW1iZWRkZXIuCisgICAgdmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRn
ZUlkKSA9IDA7Cit9OworCitXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0
ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0qKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAkocmV2aXNpb24gNTY0
MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKLSNkZWZpbmUg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2lmbmRlZiBXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
SW1wbF9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZTsKQEAgLTM3LDM3ICszNyw3IEBAIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2Vi
VVJMOwotCi0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4K
LWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91Ymxl
IHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExh
c3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07
Ci0KLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3Mg
V2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYg
dXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBj
b25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50
IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2Ug
dG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQg
YmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2
aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRo
ZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lk
IGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7Ci19OwotCiBXZWJDb3JlOjpHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZW5k
aWYgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbF9oCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1
NQoK
</data>
<flag name="review"
          id="35265"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51943</attachid>
            <date>2010-03-29 11:50:53 -0700</date>
            <delta_ts>2010-03-30 03:28:59 -0700</delta_ts>
            <desc>More comments</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>59093</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjcyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIFVzZXMgR2VvcG9z
aXRpb24gaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhcmFtcyBmb3Igc2V0TGFzdFBvc2l0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY1MzUKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTo6c2V0SXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtOjpzZXRMYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmg6CisKIDIwMTAtMDMtMjkgIE1hcmN1
cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpl
cmVteSBPcmxvdy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1NjcyNikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgogICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQpAQCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBA
IC00NSwxMiArNDUsMTIgQEAgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06Okdlb2xvY2F0aW9u
UwogCiB2b2lkIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpzZXRJc0FsbG93ZWQoYm9vbCBh
bGxvd2VkKQogewotICAgIG1fZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvd2VkKTsgIAor
ICAgIG1fZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvd2VkKTsKIH0KIAotdm9pZCBHZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQordm9p
ZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8
R2VvcG9zaXRpb24+IGdlb3Bvc2l0aW9uKQogewotICAgIG1fbGFzdFBvc2l0aW9uID0gR2VvcG9z
aXRpb246OmNyZWF0ZShDb29yZGluYXRlczo6Y3JlYXRlKGxhdGl0dWRlLCBsb25naXR1ZGUsIHBy
b3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3Vy
YWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVz
U3BlZWQsIHNwZWVkKSwgdGltZXN0YW1wKTsKKyAgICBtX2xhc3RQb3NpdGlvbiA9IGdlb3Bvc2l0
aW9uOwogICAgIHBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCShyZXZp
c2lvbiA1NjcyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENv
cHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAor
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRJc0FsbG93
ZWQoYm9vbCBhbGxvd2VkKTsKLSAgICB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1
ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3Vi
bGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5n
LCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCk7
CisgICAgdm9pZCBzZXRMYXN0UG9zaXRpb24oUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4pOwogICAg
IHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
CiAgICAgRnJhbWUqIGZyYW1lKCk7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIEdlb2xvY2F0aW9uKiBtX2dlb2xvY2F0aW9uOwotICAgIE93blB0cjxHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2U+IG1fZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOyAgICAKKyAgICBP
d25QdHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZTsKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwogICAgIFJlZlB0cjxQ
b3NpdGlvbkVycm9yPiBtX2xhc3RFcnJvcjsKIH07CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU2NzI2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQxIEBACisyMDEwLTAzLTI5ICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW5hbWUgLyB0aWR5IHVwIEdlb2xvY2F0aW9uIGJyaWRnZToKKyAgICAgICAgVXNlcyBhIHN0cnVj
dCBmb3Igc2V0TGFzdFBvc2l0aW9uIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBwYXJhbXMuCisgICAg
ICAgIFJlbmFtZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAgdG8gV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAgICAgICAgICAgICAKKyAgICAgICAgVXNlcyBh
IHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyIGluIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUNocm9taXVtLmguCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2NTM1CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9H
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJH
ZW9sb2NhdGlvblNlcnZpY2UuaDogQ29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9H
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oLgorICAgICAgICAoV2ViS2l0OjpXZWJH
ZW9sb2NhdGlvblNlcnZpY2U6OmRldGFjaEJyaWRnZSk6CisgICAgICAgICogcHVibGljL1dlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmguCisgICAgICAgICogcHVibGlj
L1dlYkdlb3Bvc2l0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6Omdlb2xvY2F0aW9uU2VydmljZSk6
CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgor
ICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAgICAgICogc3JjL0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHA6IENvcGllZCBmcm9tIFdlYktpdC9jaHJv
bWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwLgorICAgICAgICAo
V2ViS2l0OjpjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6V2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0b3BVcGRh
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjpnZXRCcmlkZ2VJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RFcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldFdlYlZpZXdD
bGllbnQpOgorICAgICAgICAqIHNyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmg6
IENvcGllZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW0uaC4KKwogMjAxMC0wMy0yNCAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkocmV2aXNpb24gNTY3MjYpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw5IEBACiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJGb250Q2FjaGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb3JtQ29udHJv
bEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJGb3JtRWxlbWVudC5oJywK
KyAgICAgICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkdlb3Bvc2l0aW9uLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkdyYXBo
aWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViSGlzdG9yeUl0ZW0u
aCcsCkBAIC0yNDYsNyArMjQ5LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVu
ZXJXcmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBs
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCcsCi0g
ICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAn
LAkJCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAgICAnc3JjL2d0
ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzIzLDYgKzMyNSw4IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGcmFtZUltcGwuaCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwJywKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNo
cm9taXVtLmgJKHJldmlzaW9uIDU2NzI2KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MyAr
MzEsMTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAogI2Rl
ZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLWNsYXNzIEdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwot
Ci0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRoZSBlbWJlZGRlci4KLWNsYXNz
IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lk
IHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFz
dFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRl
c0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVz
SGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVk
LCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExhc3RFcnJv
cihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLX07Ci0KLS8v
IFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2ViS2l0LgotY2xhc3MgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBX
ZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNw
ZW5kKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRn
ZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhl
IGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNl
ZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFs
IGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8gRGV0dGFjaGVzIHRoZSBHZW9s
b2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIGRldHRh
Y2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBERVBSRUNBVEVEOiByZW1vdmUgdGhpcyBm
aWxlLCB0aGlzIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yCisvLyByZW5h
bWluZyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgdG8gV2ViR2VvbG9jYXRpb25TZXJ2
aWNlLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIDogcHVibGljIFdlYkdl
b2xvY2F0aW9uU2VydmljZSB7CiB9OwogCi1XZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoV2ViQ29yZTo6R2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAv
LyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJKHJldmlzaW9uIDU2NDM4KQko
ZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtLmg6NTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUNocm9taXVtX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFBy
b3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgorY2xhc3MgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNB
bGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRp
b24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1
ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1
ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5n
LCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcg
bG9uZyB0aW1lc3RhbXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBl
cnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOworfTsKKworLy8gUHJvdmlk
ZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCitjbGFzcyBXZWJHZW9sb2NhdGlv
blNlcnZpY2VJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYg
dXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
VXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50
IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0g
MDsKKworICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRk
ZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAorICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1
YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgorICAgIHZpcnR1YWwgaW50IGF0
dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlKSA9IDA7CisKKyAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9u
U2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KKyAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRn
ZShpbnQgYnJpZGdlSWQpID0gMDsKK307CisKK1dlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSopOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaAkocmV2aXNpb24gNTY0Mzgp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw0NiArMjgsMzYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNl
X2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlX2gKIAotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwotY2xhc3MgR2VvbG9jYXRpb25TZXJ2
aWNlQ2hyb21pdW07Ci19CisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7
CiAKLS8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgotY2xh
c3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3Zp
ZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3Zp
ZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlk
ZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3Bl
ZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVy
cm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOwotfTsKLQog
Ly8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCi1jbGFzcyBXZWJH
ZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgeworY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNl
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShp
bnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVI
aWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlk
Z2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRh
Y2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0
cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZv
ciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0
OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlk
Z2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0
aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3Vy
YWN5KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgeyB9CisKKyAgICAvLyBBdHRhY2hlcyB0aGUgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMK
KyAgICAvLyBpZCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3Ig
dGhlIG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSopIHsgcmV0dXJuIDA7IH0KIAotICAgIC8vIERldHRhY2hlcyB0
aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgotICAgIHZpcnR1YWwgdm9p
ZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOwotfTsKKyAgICAvLyBEZXRhY2hlcyB0
aGUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSB7IGRldHRhY2hCcmlkZ2UoYnJp
ZGdlSWQpOyB9CiAKLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bSopOworICAgIC8vIERFUFJFQ0FURUQ6IHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJp
bGl0eSBsYXllciwgcmVtb3ZlIHRoaXMgbWV0aG9kLgorICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNo
QnJpZGdlKGludCBicmlkZ2VJZCkgeyB9Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAot
I2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNlbmRpZiAvLyBX
ZWJHZW9sb2NhdGlvblNlcnZpY2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaAkocmV2aXNp
b24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNkZWZpbmUgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNz
IFdlYlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNhbGxlZCBieSB0aGUgZW1iZWRk
ZXIuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRv
dWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7
Cit9OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KK2Ns
YXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJV
UkwmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJ
ZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1l
KGludCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJp
ZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQsIHdoaWNoCisgICAgLy8gc2hv
dWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisg
ICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsKKworICAgIC8vIERldHRhY2hl
cyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVyLgorICAgIHZpcnR1YWwg
dm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOworfTsKKworV2ViQ29yZTo6R2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faApJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKKyNkZWZpbmUgV2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtNDAsMzQgKzQwLDE4IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7CitzdHJ1Y3QgV2ViR2VvcG9z
aXRpb247CiAKIC8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVy
LgogY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0UG9zaXRpb24oY29uc3QgV2ViR2VvcG9zaXRpb24mKSA9IDA7CisgICAgLy8gREVQ
UkVDQVRFRDogdGhpcyBpcyBhIHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyLCByZW1vdmUg
dGhpcyBtZXRob2QuCiAgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFs
dGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBk
b3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFk
aW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFt
cCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29u
c3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBlbWJlZGRl
ciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVy
ZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJh
bWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5h
YmxlSGlnaEFjY3VyYWN5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQg
YnJpZGdlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOwotCi0gICAgLy8g
QXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJu
cyBpdHMgaWQsIHdoaWNoCi0gICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxs
cyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCi0gICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UpID0gMDsKLQotICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20g
dGhlIGVtYmVkZGVyLgotICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJ
ZCkgPSAwOwotfTsKLQotV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtKik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2VuZGlmIC8vIFdlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWlu
Zm8KICAgTWVyZ2VkIC90cnVuay9XZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUNocm9taXVtLmg6cjUzNDU1CgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJHZW9wb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViR2VvcG9zaXRpb24uaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViR2VvcG9zaXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
Ykdlb3Bvc2l0aW9uX2gKKyNkZWZpbmUgV2ViR2VvcG9zaXRpb25faAorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RydWN0IFdlYkdlb3Bvc2l0aW9uIHsKKyAgICBkb3VibGUgbGF0aXR1ZGU7Cisg
ICAgZG91YmxlIGxvbmdpdHVkZTsKKyAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGU7CisgICAgZG91
YmxlIGFsdGl0dWRlOworICAgIGRvdWJsZSBhY2N1cmFjeTsKKyAgICBib29sIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeTsKKyAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBib29sIHBy
b3ZpZGVzSGVhZGluZzsKKyAgICBkb3VibGUgaGVhZGluZzsKKyAgICBib29sIHByb3ZpZGVzU3Bl
ZWQ7CisgICAgZG91YmxlIHNwZWVkOworICAgIGxvbmcgbG9uZyB0aW1lc3RhbXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkdlb3Bvc2l0aW9uX2gKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCShyZXZpc2lvbiA1NjcyNikKKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlld0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMCArMzEsMTMgQEAKICNpZm5kZWYgV2ViVmlld0NsaWVudF9oCiAjZGVmaW5lIFdlYlZp
ZXdDbGllbnRfaAogCisvLyBERVBSRUNBVEVEOiB0aGlzIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGli
aWxpdHkgbGF5ZXIsIHJlbW92ZSBpdC4KKyNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKICNpbmNsdWRlICJX
ZWJFZGl0aW5nQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRmlsZUNob29zZXJDb21wbGV0aW9uLmgi
CiAjaW5jbHVkZSAiV2ViRmlsZUNob29zZXJQYXJhbXMuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJX
ZWJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJXZWJUZXh0RGlyZWN0aW9uLmgiCkBAIC00Niw3
ICs0OSw2IEBAIGNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBXZWJEcmFnRGF0
YTsKIGNsYXNzIFdlYkZpbGVDaG9vc2VyQ29tcGxldGlvbjsKIGNsYXNzIFdlYkZyYW1lOwotY2xh
c3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlOwogY2xhc3MgV2ViTm9kZTsKIGNsYXNz
IFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNsYXNzIFdlYlJhbmdlOwpAQCAtMjkxLDYgKzI5
Myw5IEBAIHB1YmxpYzoKICAgICAvLyBHZW9sb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIEFjY2VzcyB0aGUg
ZW1iZWRkZXIgQVBJIGZvciBnZW9sb2NhdGlvbiBzZXJ2aWNlcy4KKyAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlKiBnZW9sb2NhdGlvblNlcnZpY2UoKSB7IHJldHVybiBn
ZXRHZW9sb2NhdGlvblNlcnZpY2UoKTsgfQorCisgICAgLy8gREVQUkVDQVRFRDogdGhpcyBpcyBh
IHRlbXBvcmFyeSBjb21wYXRpYmlsaXR5IGxheWVyLCByZW1vdmUgaXQuCiAgICAgdmlydHVhbCBX
ZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSogZ2V0R2VvbG9jYXRpb25TZXJ2
aWNlKCkgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDU2NzI2KQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2UuaCIK
ICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC03MDQsNyArNzA0LDcg
QEAgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBDaHJvbWVDbGllbnRJbXBsOgogdm9pZCBDaHJvbWVD
bGllbnRJbXBsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZy
YW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCiB7CiAgICAgR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qPihnZW9sb2NhdGlvbi0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCkp
OwotICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5yZXF1
ZXN0UGVybWlzc2lvbkZvckZyYW1lKGdlb2xvY2F0aW9uU2VydmljZS0+Z2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlKCktPmdldEJyaWRnZUlkKCksIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7Cisg
ICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlcXVlc3RQZXJt
aXNzaW9uRm9yRnJhbWUoZ2VvbG9jYXRpb25TZXJ2aWNlLT5nZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UoKS0+Z2V0QnJpZGdlSWQoKSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKIH0KIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1CcmlkZ2UuY3BwCShyZXZpc2lvbiA1NjcyNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw2IEBACiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkluZGV4ZWREYXRhYmFzZVBy
b3h5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODMsNiArODIsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bC5oIgogI2luY2x1ZGUgIldvcmtlci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcAkocmV2
aXNpb24gNTY3MjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
LmgiCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgiCi0jaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2luY2x1ZGUg
IlBvc2l0aW9uT3B0aW9ucy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgIldlYlZp
ZXdJbXBsLmgiCi0KLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0KLXVzaW5nIFdlYkNvcmU6OkNv
b3JkaW5hdGVzOwotdXNpbmcgV2ViQ29yZTo6RnJhbWU7Ci11c2luZyBXZWJDb3JlOjpHZW9sb2Nh
dGlvbjsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLXVzaW5nIFdl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotdXNpbmcgV2ViQ29yZTo6R2VvbG9j
YXRpb25TZXJ2aWNlQ2xpZW50OwotdXNpbmcgV2ViQ29yZTo6R2VvcG9zaXRpb247Ci11c2luZyBX
ZWJDb3JlOjpQb3NpdGlvbkVycm9yOwotdXNpbmcgV2ViQ29yZTo6UG9zaXRpb25PcHRpb25zOwot
dXNpbmcgV2ViQ29yZTo6U3RyaW5nOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewotcHVibGljOgotICAgIGV4
cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0qKTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCk7Ci0K
LSAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRV
cGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5n
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1l
KCk7Ci0gICAgdmlydHVhbCBpbnQgZ2V0QnJpZGdlSWQoKSBjb25zdDsKLQotICAgIC8vIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZQotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9v
bCBhbGxvd2VkKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRp
dHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRp
bmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1w
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdl
YlN0cmluZyYgbWVzc2FnZSk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlld0NsaWVudCogZ2V0V2Vi
Vmlld0NsaWVudCgpOwotCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0gb3ducyB1
cywgd2Ugb25seSBoYXZlIGEgcG9pbnRlciBiYWNrIHRvIGl0LgotICAgIEdlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtKiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotICAgIGludCBtX2Jy
aWRnZUlkOwotfTsKLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSkKLXsKLSAgICByZXR1cm4gbmV3IEdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pOwotfQotCi1HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKLSAgICA6IG1fR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0oZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCi17Ci0g
ICAgLy8gV2UgbmVlZCB0byBhdHRhY2ggb3Vyc2VsdmVzIGhlcmU6IEdlb2xvY2F0aW9uIGNhbGxz
IHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoKQotICAgIC8vIGRpcmVjdGx5LCBhbmQgd2UgbmVl
ZCB0byBiZSBhdHRhY2hlZCBzbyB0aGF0IHRoZSBlbWJlZGRlciBjYW4gY2FsbAotICAgIC8vIG91
ciBzZXRJc0FsbG93ZWQoKS4KLSAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgpLT5n
ZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwotICAgIEFTU0VSVCht
X2JyaWRnZUlkKTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6fkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwoKQotewotICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCogd2Vi
Vmlld0NsaWVudCA9IGdldFdlYlZpZXdDbGllbnQoKTsKLSAgICAvLyBHZW9sb2NhdGlvbiBoYXMg
YW4gT3duUHRyIHRvIHVzLCBhbmQgaXQncyBkZXN0cm95ZWQgYWZ0ZXIgdGhlIGZyYW1lIGhhcwot
ICAgIC8vIGJlZW4gcG90ZW50aWFsbHkgZGlzY29ubmVjdGVkLiBJbiB0aGlzIGNhc2UsIGl0IGNh
bGxzIHN0b3BVcGRhdGluZygpCi0gICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFuZCB3ZSBoYXZlIGFs
cmVhZHkgZGV0dGFjaGVkIG91cnNlbHZlcy4KLSAgICBpZiAoIXdlYlZpZXdDbGllbnQpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX2JyaWRnZUlkKTsKLSAgICB9IGVsc2UgaWYgKG1fYnJpZGdlSWQpCi0g
ICAgICAgIHdlYlZpZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXR0YWNoQnJp
ZGdlKG1fYnJpZGdlSWQpOwotfQotCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBwb3NpdGlvbk9wdGlvbnMpCi17Ci0gICAg
aWYgKCFtX2JyaWRnZUlkKQotICAgICAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmlld0NsaWVudCgp
LT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwotICAgIGdldFdl
YlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN0YXJ0VXBkYXRpbmcobV9i
cmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnN0b3BV
cGRhdGluZygpCi17Ci0gICAgaWYgKG1fYnJpZGdlSWQpIHsKLSAgICAgICAgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBnZXRXZWJWaWV3Q2xpZW50
KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOwotICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2Ut
PnN0b3BVcGRhdGluZyhtX2JyaWRnZUlkKTsKLSAgICAgICAgZ2VvbG9jYXRpb25TZXJ2aWNlLT5k
ZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOwotICAgICAgICBtX2JyaWRnZUlkID0gMDsKLSAgICB9
Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVuZCgpCi17Ci0g
ICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3VzcGVuZCht
X2JyaWRnZUlkKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpyZXN1
bWUoKQotewotICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCkt
PnJlc3VtZShtX2JyaWRnZUlkKTsKLX0KLQotaW50IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OmdldEJyaWRnZUlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9icmlkZ2VJZDsKLX0KLQot
dm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxv
d2VkKQotewotICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldElzQWxsb3dlZChh
bGxvd2VkKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0
UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVz
QWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQs
IGxvbmcgbG9uZyB0aW1lc3RhbXApCi17Ci0gICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1
bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUs
IGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFj
Y3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCB0
aW1lc3RhbXApOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExh
c3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
bV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdEVycm9yKGVycm9yQ29kZSwgbWVz
c2FnZSk7Ci19Ci0KLVdlYlZpZXdDbGllbnQqIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6
OmdldFdlYlZpZXdDbGllbnQoKQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1fR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsKiBjaHJv
bWVDbGllbnRJbXBsID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsKj4oZnJh
bWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsKLSAgICBXZWJLaXQ6OldlYlZpZXdDbGll
bnQqIHdlYlZpZXdDbGllbnQgPSBjaHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3KCktPmNsaWVudCgp
OwotICAgIHJldHVybiB3ZWJWaWV3Q2xpZW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkocmV2
aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uY3BwOjU2NDM4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUNocm9taXVtLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnRJbXBsLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmgiCisjaW5jbHVkZSAiR2Vv
cG9zaXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUG9zaXRpb25FcnJvci5o
IgorI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlZpZXdJbXBsLmgiCisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisKK3VzaW5n
IFdlYkNvcmU6OkNvb3JkaW5hdGVzOwordXNpbmcgV2ViQ29yZTo6RnJhbWU7Cit1c2luZyBXZWJD
b3JlOjpHZW9sb2NhdGlvbjsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwordXNpbmcgV2Vi
Q29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50OwordXNpbmcgV2ViQ29yZTo6R2VvcG9zaXRp
b247Cit1c2luZyBXZWJDb3JlOjpQb3NpdGlvbkVycm9yOwordXNpbmcgV2ViQ29yZTo6UG9zaXRp
b25PcHRpb25zOwordXNpbmcgV2ViQ29yZTo6U3RyaW5nOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsKCk7CisKKyAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKKyAgICB2aXJ0dWFs
IGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKCk7CisgICAgdmlydHVhbCBpbnQgZ2V0QnJpZGdlSWQoKSBjb25zdDsKKwor
ICAgIC8vIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQorICAgIHZpcnR1YWwgdm9pZCBzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9u
KGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
LCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywg
ZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxv
bmcgdGltZXN0YW1wKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNv
ZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgV2ViVmlld0Ns
aWVudCogZ2V0V2ViVmlld0NsaWVudCgpOworCisgICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0gb3ducyB1cywgd2Ugb25seSBoYXZlIGEgcG9pbnRlciBiYWNrIHRvIGl0LgorICAgIEdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwor
ICAgIGludCBtX2JyaWRnZUlkOworfTsKKworR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVh
dGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVt
KiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKK3sKKyAgICByZXR1cm4gbmV3IEdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pOworfQorCitH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
KEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkK
KyAgICA6IG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0oZ2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0pCit7CisgICAgLy8gV2UgbmVlZCB0byBhdHRhY2ggb3Vyc2VsdmVzIGhlcmU6IEdlb2xv
Y2F0aW9uIGNhbGxzIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoKQorICAgIC8vIGRpcmVjdGx5
LCBhbmQgd2UgbmVlZCB0byBiZSBhdHRhY2hlZCBzbyB0aGF0IHRoZSBlbWJlZGRlciBjYW4gY2Fs
bAorICAgIC8vIG91ciBzZXRJc0FsbG93ZWQoKS4KKyAgICBtX2JyaWRnZUlkID0gZ2V0V2ViVmll
d0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMpOwor
ICAgIEFTU0VSVChtX2JyaWRnZUlkKTsKK30KKworR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6fkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKQoreworICAgIFdlYktpdDo6V2ViVmll
d0NsaWVudCogd2ViVmlld0NsaWVudCA9IGdldFdlYlZpZXdDbGllbnQoKTsKKyAgICAvLyBHZW9s
b2NhdGlvbiBoYXMgYW4gT3duUHRyIHRvIHVzLCBhbmQgaXQncyBkZXN0cm95ZWQgYWZ0ZXIgdGhl
IGZyYW1lIGhhcworICAgIC8vIGJlZW4gcG90ZW50aWFsbHkgZGlzY29ubmVjdGVkLiBJbiB0aGlz
IGNhc2UsIGl0IGNhbGxzIHN0b3BVcGRhdGluZygpCisgICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFu
ZCB3ZSBoYXZlIGFscmVhZHkgZGV0dGFjaGVkIG91cnNlbHZlcy4KKyAgICBpZiAoIXdlYlZpZXdD
bGllbnQpIHsKKyAgICAgICAgQVNTRVJUKCFtX2JyaWRnZUlkKTsKKyAgICB9IGVsc2UgaWYgKG1f
YnJpZGdlSWQpCisgICAgICAgIHdlYlZpZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgp
LT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOworfQorCitib29sIEdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBwb3NpdGlvbk9wdGlv
bnMpCit7CisgICAgaWYgKCFtX2JyaWRnZUlkKQorICAgICAgICBtX2JyaWRnZUlkID0gZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+YXR0YWNoQnJpZGdlKHRoaXMp
OworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnN0YXJ0
VXBkYXRpbmcobV9icmlkZ2VJZCwgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+dXJsKCksIHBvc2l0aW9uT3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnN0b3BVcGRhdGluZygpCit7CisgICAgaWYgKG1fYnJpZGdlSWQpIHsKKyAgICAgICAg
V2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlKiBnZW9sb2NhdGlvblNlcnZpY2UgPSBnZXRX
ZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpOworICAgICAgICBnZW9sb2Nh
dGlvblNlcnZpY2UtPnN0b3BVcGRhdGluZyhtX2JyaWRnZUlkKTsKKyAgICAgICAgZ2VvbG9jYXRp
b25TZXJ2aWNlLT5kZXR0YWNoQnJpZGdlKG1fYnJpZGdlSWQpOworICAgICAgICBtX2JyaWRnZUlk
ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3Vz
cGVuZCgpCit7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KS0+c3VzcGVuZChtX2JyaWRnZUlkKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsOjpyZXN1bWUoKQoreworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRp
b25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKK30KKworaW50IEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9icmlk
Z2VJZDsKK30KKwordm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRJc0FsbG93
ZWQoYm9vbCBhbGxvd2VkKQoreworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNl
dElzQWxsb3dlZChhbGxvd2VkKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCit7CisgICAgbV9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3Zp
ZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3Bl
ZWQsIHNwZWVkLCB0aW1lc3RhbXApOworfQorCit2b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdEVycm9yKGVy
cm9yQ29kZSwgbWVzc2FnZSk7Cit9CisKK1dlYlZpZXdDbGllbnQqIEdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6OmdldFdlYlZpZXdDbGllbnQoKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1f
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAh
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgV2ViS2l0OjpDaHJvbWVDbGll
bnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGll
bnRJbXBsKj4oZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpKTsKKyAgICBXZWJLaXQ6
OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBjaHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3
KCktPmNsaWVudCgpOworICAgIHJldHVybiB3ZWJWaWV3Q2xpZW50OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJ
bXBsLmNwcAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VJbXBsLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnRJbXBsLmgiCkBAIC00Myw2ICs0Miw5IEBACiAjaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2UuaCIKKyNpbmNsdWRlICJXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJHZW9wb3NpdGlvbi5oIgogI2luY2x1ZGUgIldl
YlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCkBAIC02MSwxMCArNjMs
MTAgQEAgdXNpbmcgV2ViQ29yZTo6U3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgeworY2xhc3MgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewogcHVibGljOgotICAg
IGV4cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0qKTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCk7
CisgICAgZXhwbGljaXQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSopOworICAgIHZpcnR1YWwgfldlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwoKTsKIAogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQogICAgIHZpcnR1
YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwpAQCAtNzUsNiArNzcsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dExhc3RQb3NpdGlvbihjb25zdCBXZWJHZW9wb3NpdGlvbiYgZ2VvcG9zaXRpb24pOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1Nw
ZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsK
IApAQCAtODgsODAgKzkxLDg4IEBAIHByaXZhdGU6CiAKIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bSogZ2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsK
KyAgICByZXR1cm4gbmV3IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0pOwogfQogCi1HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBn
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQogICAgIDogbV9HZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKIHsKICAgICAvLyBXZSBu
ZWVkIHRvIGF0dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBl
cm1pc3Npb25Gb3JGcmFtZSgpCiAgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0
dGFjaGVkIHNvIHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCiAgICAgLy8gb3VyIHNldElzQWxs
b3dlZCgpLgotICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0
aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgbV9icmlkZ2VJZCA9IGdldFdl
YlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsK
ICAgICBBU1NFUlQobV9icmlkZ2VJZCk7CiB9CiAKLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6On5HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKK1dlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKIHsKICAgICBX
ZWJLaXQ6OldlYlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7
CiAgICAgLy8gR2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJv
eWVkIGFmdGVyIHRoZSBmcmFtZSBoYXMKICAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5l
Y3RlZC4gSW4gdGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQotICAgIC8vIGhhcyBi
ZWVuIGNhbGxlZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAg
aWYgKCF3ZWJWaWV3Q2xpZW50KSB7CisgICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFuZCB3ZSBoYXZl
IGFscmVhZHkgZGV0YWNoZWQgb3Vyc2VsdmVzLgorICAgIGlmICghd2ViVmlld0NsaWVudCkKICAg
ICAgICAgQVNTRVJUKCFtX2JyaWRnZUlkKTsKLSAgICB9IGVsc2UgaWYgKG1fYnJpZGdlSWQpCi0g
ICAgICAgIHdlYlZpZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXR0YWNoQnJp
ZGdlKG1fYnJpZGdlSWQpOworICAgIGVsc2UgaWYgKG1fYnJpZGdlSWQpCisgICAgICAgIHdlYlZp
ZXdDbGllbnQtPmdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7
CiB9CiAKLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQ
b3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKK2Jvb2wgV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0
aW9ucykKIHsKICAgICBpZiAoIW1fYnJpZGdlSWQpCi0gICAgICAgIG1fYnJpZGdlSWQgPSBnZXRX
ZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhp
cyk7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3Rh
cnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJh
Y3koKSk7CisgICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0
aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgp
LT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRp
b25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKK3ZvaWQg
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKIHsKICAgICBp
ZiAobV9icmlkZ2VJZCkgewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Uq
IGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25T
ZXJ2aWNlKCk7CisgICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZSogZ2VvbG9jYXRpb25TZXJ2
aWNlID0gZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKTsKICAgICAgICAg
Z2VvbG9jYXRpb25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7Ci0gICAgICAgIGdl
b2xvY2F0aW9uU2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKKyAgICAgICAgZ2Vv
bG9jYXRpb25TZXJ2aWNlLT5kZXRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiAgICAgICAgIG1fYnJp
ZGdlSWQgPSAwOwogICAgIH0KIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBs
OjpzdXNwZW5kKCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVu
ZCgpCiB7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+
c3VzcGVuZChtX2JyaWRnZUlkKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9u
U2VydmljZSgpLT5zdXNwZW5kKG1fYnJpZGdlSWQpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OnJlc3VtZSgpCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnJlc3VtZSgpCiB7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlv
blNlcnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdlSWQpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+
Z2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKIH0KIAotaW50IEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKK2ludCBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fYnJpZGdlSWQ7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbDo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsKICAgICBtX0dlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAKLXZvaWQgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwg
ZG91YmxlIGxvbmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBh
bHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJv
b2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQorCit2
b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbihjb25z
dCBXZWJHZW9wb3NpdGlvbiYgd2ViZ2VvcG9zaXRpb24pCit7CisgICAgUmVmUHRyPEdlb3Bvc2l0
aW9uPiBnZW9wb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0
ZSh3ZWJnZW9wb3NpdGlvbi5sYXRpdHVkZSwgd2ViZ2VvcG9zaXRpb24ubG9uZ2l0dWRlLCB3ZWJn
ZW9wb3NpdGlvbi5wcm92aWRlc0FsdGl0dWRlLCB3ZWJnZW9wb3NpdGlvbi5hbHRpdHVkZSwgd2Vi
Z2VvcG9zaXRpb24uYWNjdXJhY3ksIHdlYmdlb3Bvc2l0aW9uLnByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgd2ViZ2VvcG9zaXRpb24uYWx0aXR1ZGVBY2N1cmFjeSwgd2ViZ2VvcG9zaXRpb24ucHJv
dmlkZXNIZWFkaW5nLCB3ZWJnZW9wb3NpdGlvbi5oZWFkaW5nLCB3ZWJnZW9wb3NpdGlvbi5wcm92
aWRlc1NwZWVkLCB3ZWJnZW9wb3NpdGlvbi5zcGVlZCksIHdlYmdlb3Bvc2l0aW9uLnRpbWVzdGFt
cCk7CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGdl
b3Bvc2l0aW9uKTsKK30KKwordm9pZCBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpz
ZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUg
c3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCiB7Ci0gICAgbV9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0
aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRp
dHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNw
ZWVkLCB0aW1lc3RhbXApOworICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gZ2VvcG9zaXRpb24gPSBH
ZW9wb3NpdGlvbjo6Y3JlYXRlKENvb3JkaW5hdGVzOjpjcmVhdGUobGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJv
dmlkZXNTcGVlZCwgc3BlZWQpLCB0aW1lc3RhbXApOworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihnZW9wb3NpdGlvbik7CiB9CiAKLXZvaWQgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JD
b2RlLCBtZXNzYWdlKTsKIH0KIAotV2ViVmlld0NsaWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVudCgpCitXZWJWaWV3Q2xpZW50KiBXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3Q2xpZW50KCkKIHsKICAgICBGcmFtZSogZnJh
bWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpOwogICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5wYWdlKCkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90cnVuay9XZWJLaXQvY2hyb21pdW0vc3JjL0dl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmNwcDpyNTM0NTUKCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwu
aAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZGVm
aW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJp
bmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkg
dGhlIGVtYmVkZGVyLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRl
c1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSkgPSAwOworfTsKKworLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBX
ZWJLaXQuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwg
Y29uc3QgV2ViVVJMJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhp
bnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsKKworICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9s
b2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAor
ICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2Rz
IGFib3ZlLgorICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CisKKyAgICAv
LyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KKyAg
ICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKK307CisKK1dl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNo
cm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAotI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bV9oCisjaWZuZGVmIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxf
aAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsX2gKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtMzcsMzcgKzM3
LDcgQEAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07CiB9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci0KLS8vIFByb3ZpZGVz
IGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgotY2xhc3MgV2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2Vk
KGJvb2wgYWxsb3dlZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91
YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRv
dWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3Vi
bGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0
aW1lc3RhbXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNv
ZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOwotfTsKLQotLy8gUHJvdmlkZXMgYW4g
ZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZp
Y2VJbnRlcmZhY2UgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBi
b29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRp
bmcoaW50IGJyaWRnZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRn
ZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsKLQot
ICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5k
IHJldHVybnMgaXRzIGlkLCB3aGljaAotICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVl
bnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJy
aWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlKSA9IDA7Ci0KLSAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2Vydmlj
ZSBmcm9tIHRoZSBlbWJlZGRlci4KLSAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQg
YnJpZGdlSWQpID0gMDsKLX07Ci0KIFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSog
Y3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlvblNl
cnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90cnVuay9XZWJLaXQvY2hyb21pdW0vcHVibGljL0dl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmg6cjUzNDU1Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52020</attachid>
            <date>2010-03-30 03:28:59 -0700</date>
            <delta_ts>2010-03-30 12:51:40 -0700</delta_ts>
            <desc>Final round of comments. Reverts back to multiple params instead of a WebGeolocation struct.</desc>
            <filename>wk.log</filename>
            <type>text/plain</type>
            <size>54845</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njc3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMjQgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSAvIHRpZHkgdXAgR2VvbG9jYXRpb24gYnJpZGdlCisgICAgICAgIFVzZXMgR2VvcG9z
aXRpb24gaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhcmFtcyBmb3Igc2V0TGFzdFBvc2l0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY1MzUKKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpHZW9sb2Nh
dGlvblNlcnZpY2VDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZp
Y2VDaHJvbWl1bTo6c2V0SXNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtOjpzZXRMYXN0UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmg6CisKIDIwMTAtMDMtMzAgIElseWEg
VGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNwcAkocmV2aXNpb24gNTY3NzMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAorICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgogICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
ICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgpAQCAtNDUsMTIgKzQ1LDEyIEBAIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOjpHZW9sb2Nh
dGlvblMKIAogdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bTo6c2V0SXNBbGxvd2VkKGJv
b2wgYWxsb3dlZCkKIHsKLSAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7
ICAKKyAgICBtX2dlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAKLXZvaWQg
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1
ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0
dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3Vi
bGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5n
LCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkK
K3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW06OnNldExhc3RQb3NpdGlvbihQYXNzUmVm
UHRyPEdlb3Bvc2l0aW9uPiBnZW9wb3NpdGlvbikKIHsKLSAgICBtX2xhc3RQb3NpdGlvbiA9IEdl
b3Bvc2l0aW9uOjpjcmVhdGUoQ29vcmRpbmF0ZXM6OmNyZWF0ZShsYXRpdHVkZSwgbG9uZ2l0dWRl
LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92
aWRlc1NwZWVkLCBzcGVlZCksIHRpbWVzdGFtcCk7CisgICAgbV9sYXN0UG9zaXRpb24gPSBnZW9w
b3NpdGlvbjsKICAgICBwb3NpdGlvbkNoYW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0uaAko
cmV2aXNpb24gNTY3NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlb2xvY2F0aW9u
U2VydmljZUNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoK
ICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CiAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CiAgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQogICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CiAgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0SXNB
bGxvd2VkKGJvb2wgYWxsb3dlZCk7Ci0gICAgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxh
dGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBh
bHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwg
ZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVh
ZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3Rh
bXApOworICAgIHZvaWQgc2V0TGFzdFBvc2l0aW9uKFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+KTsK
ICAgICB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwogICAgIEZyYW1lKiBmcmFtZSgpOwogCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBHZW9sb2NhdGlvbiogbV9nZW9sb2NhdGlvbjsKLSAgICBPd25QdHI8R2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBtX2dlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsgICAgCisg
ICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZT4gbV9nZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2U7CiAgICAgUmVmUHRyPEdlb3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKICAgICBSZWZQ
dHI8UG9zaXRpb25FcnJvcj4gbV9sYXN0RXJyb3I7CiB9OwpJbmRleDogV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA1Njc3MykKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzOSBAQAorMjAxMC0wMy0yOSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIC8gdGlkeSB1cCBHZW9sb2NhdGlvbiBicmlkZ2U6CisgICAgICAgIFJlbmFtZSBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAgdG8gV2ViR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbC5jcHAgICAgICAgICAgICAKKyAgICAgICAgVXNlcyBhIHRlbXBvcmFyeSBj
b21wYXRpYmlsaXR5IGxheWVyIGluIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgu
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NTM1
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2UuaDogQ29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bS5oLgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2U6OmRldGFjaEJyaWRnZSk6CisgICAgICAgICogcHVibGljL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZS5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmguCisgICAgICAgICogcHVibGljL1dlYlZpZXdDbGll
bnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6Z2VvbG9jYXRpb25TZXJ2aWNl
KToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6
CisgICAgICAgICogc3JjL0Nocm9taXVtQnJpZGdlLmNwcDoKKyAgICAgICAgKiBzcmMvR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9X
ZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcDogQ29waWVkIGZyb20gV2ViS2l0L2No
cm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OmNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbDo6fldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdGFydFVwZGF0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVw
ZGF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6OmdldEJyaWRnZUlkKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbDo6c2V0SXNBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmll
d0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwu
aDogQ29waWVkIGZyb20gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bS5oLgorCiAyMDEwLTAzLTI5ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVs
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1Njc3MykKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDggQEAKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkZvbnRDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1D
b250cm9sRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkZvcm1FbGVtZW50
LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViR2x5cGhDYWNoZS5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSGlzdG9yeUl0ZW0uaCcsCkBAIC0yNDYsNyArMjQ4LDYgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VDaHJvbWl1bS5jcHAnLAkJCiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udElu
Zm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLApAQCAtMzIzLDYg
KzMyNCw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb3JtRWxlbWVudC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViRnJhbWVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJGcmFtZUltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR2x5cGhDYWNo
ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0QuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3Bw
JywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
Q2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0
aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgJKHJldmlzaW9uIDU2NzczKQorKysgV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw0MyArMzEsMTUgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlQ2hyb21pdW1faAogI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9o
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsK
LWNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwotfQorI2luY2x1ZGUgIldlYkdlb2xv
Y2F0aW9uU2VydmljZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViU3RyaW5n
OwotY2xhc3MgV2ViVVJMOwotCi0vLyBQcm92aWRlcyBhIFdlYktpdCBBUEkgY2FsbGVkIGJ5IHRo
ZSBlbWJlZGRlci4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdp
dHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBhY2N1
cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNT
cGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExhc3RFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpID0gMDsKLX07Ci0KLS8vIFByb3ZpZGVzIGFuIGVtYmVkZGVyIEFQSSBjYWxsZWQgYnkgV2Vi
S2l0LgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNv
bnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50
IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9j
YXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAg
ICAvLyBzaG91bGQgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBh
Ym92ZS4KLSAgICB2aXJ0dWFsIGludCBhdHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSkgPSAwOwotCi0gICAgLy8g
RGV0dGFjaGVzIHRoZSBHZW9sb2NhdGlvblNlcnZpY2UgZnJvbSB0aGUgZW1iZWRkZXIuCi0gICAg
dmlydHVhbCB2b2lkIGRldHRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSA9IDA7CisvLyBERVBSRUNB
VEVEOiByZW1vdmUgdGhpcyBmaWxlLCB0aGlzIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkg
bGF5ZXIgZm9yCisvLyByZW5hbWluZyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgdG8g
V2ViR2VvbG9jYXRpb25TZXJ2aWNlLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlSW50ZXJm
YWNlIDogcHVibGljIFdlYkdlb2xvY2F0aW9uU2VydmljZSB7CiB9OwogCi1XZWJDb3JlOjpHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
V2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgJ
KHJldmlzaW9uIDU2NDM4KQkoZnJvbSBXZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtLmg6NTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkdlb2xvY2F0aW9uU2VydmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZGVmaW5lIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmc7CitjbGFz
cyBXZWJVUkw7CisKKy8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVk
ZGVyLgorY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAw
OworfTsKKworLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCitj
bGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2Vi
VVJMJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdl
SWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZShpbnQgYnJpZGdlSWQpID0gMDsKKworICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJy
aWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAorICAgIC8vIHNo
b3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgor
ICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7CisKKyAgICAvLyBEZXR0YWNo
ZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KKyAgICB2aXJ0dWFs
IHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKK307CisKK1dlYkNvcmU6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2Uu
aAkocmV2aXNpb24gNTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdlb2xvY2F0
aW9uU2VydmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw0NiArMjgsMzYgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9o
Ci0jZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlX2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlX2gKIAot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwotY2xh
c3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Ci19CisjaW5jbHVkZSAiV2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJTdHJp
bmc7CiBjbGFzcyBXZWJVUkw7CiAKLS8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkg
dGhlIGVtYmVkZGVyLgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNj
dXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRl
c1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSkgPSAwOwotfTsKLQogLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBX
ZWJLaXQuCi1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgeworY2xhc3MgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBl
cm1pc3Npb25Gb3JGcmFtZShpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0YXJ0VXBkYXRpbmcoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwm
IHVybCwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rv
cFVwZGF0aW5nKGludCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKGlu
dCBicmlkZ2VJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoaW50IGJyaWRnZUlkKSA9
IDA7Ci0KLSAgICAvLyBBdHRhY2hlcyB0aGUgR2VvbG9jYXRpb25CcmlkZ2UgdG8gdGhlIGVtYmVk
ZGVyIGFuZCByZXR1cm5zIGl0cyBpZCwgd2hpY2gKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBvbiBz
dWJzZXF1ZW50IGNhbGxzIGZvciB0aGUgbWV0aG9kcyBhYm92ZS4KLSAgICB2aXJ0dWFsIGludCBh
dHRhY2hCcmlkZ2UoV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGdlb2xvY2F0
aW9uU2VydmljZUJyaWRnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJv
b2wgZW5hYmxlSGlnaEFjY3VyYWN5KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5n
KGludCBicmlkZ2VJZCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlk
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgeyB9CisKKyAgICAv
LyBBdHRhY2hlcyB0aGUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHRvIHRoZSBlbWJlZGRl
ciBhbmQgcmV0dXJucyBpdHMKKyAgICAvLyBpZCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgb24gc3Vi
c2VxdWVudCBjYWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0
YWNoQnJpZGdlKFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSopIHsgcmV0dXJuIDA7IH0KIAot
ICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVkZGVy
LgotICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOwotfTsK
KyAgICAvLyBEZXRhY2hlcyB0aGUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIGZyb20gdGhl
IGVtYmVkZGVyLgorICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hCcmlkZ2UoaW50IGJyaWRnZUlkKSB7
IGRldHRhY2hCcmlkZ2UoYnJpZGdlSWQpOyB9CiAKLVdlYkNvcmU6Okdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworICAgIC8vIERFUFJFQ0FURUQ6IHRoaXMgaXMgYSB0
ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciwgcmVtb3ZlIHRoaXMgbWV0aG9kLgorICAgIHZp
cnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgeyB9Cit9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9t
aXVtX2gKKyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VfaAoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2UuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCiAgIE1lcmdlZCAvdHJ1bmsvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5oOnI1MzQ1NQoKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2UuaAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQzOCkKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNkZWZpbmUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CitjbGFzcyBHZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKKworLy8gUHJvdmlkZXMgYSBXZWJLaXQgQVBJIGNh
bGxlZCBieSB0aGUgZW1iZWRkZXIuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Ug
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0
aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29s
IHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFtcCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlKSA9IDA7Cit9OworCisvLyBQcm92aWRlcyBhbiBlbWJlZGRlciBBUEkgY2Fs
bGVkIGJ5IFdlYktpdC4KK2NsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUludGVyZmFjZSB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9yRnJhbWUoaW50IGJy
aWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVw
ZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wgZW5hYmxlSGlnaEFj
Y3VyYWN5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhpbnQgYnJpZGdlSWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOworCisgICAgLy8gQXR0YWNoZXMg
dGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0dXJucyBpdHMgaWQs
IHdoaWNoCisgICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBjYWxscyBmb3IgdGhl
IG1ldGhvZHMgYWJvdmUuCisgICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdlKFdlYktpdDo6V2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UpID0gMDsK
KworICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZyb20gdGhlIGVtYmVk
ZGVyLgorICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlkZ2VJZCkgPSAwOwor
fTsKKworV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW1faApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCShyZXZpc2lvbiA1NjQzOCkKKysrIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUNocm9taXVtX2gKKyNpZm5kZWYgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
X2gKKyNkZWZpbmUgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlX2gKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwpAQCAtNDksMjUgKzQ5LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwg
Y29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBlbWJl
ZGRlciBBUEkgY2FsbGVkIGJ5IFdlYktpdC4KLWNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZUlu
dGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uRm9y
RnJhbWUoaW50IGJyaWRnZUlkLCBjb25zdCBXZWJVUkwmIHVybCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzdGFydFVwZGF0aW5nKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwsIGJvb2wg
ZW5hYmxlSGlnaEFjY3VyYWN5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZyhp
bnQgYnJpZGdlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChpbnQgYnJpZGdlSWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKGludCBicmlkZ2VJZCkgPSAwOwotCi0gICAg
Ly8gQXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uQnJpZGdlIHRvIHRoZSBlbWJlZGRlciBhbmQgcmV0
dXJucyBpdHMgaWQsIHdoaWNoCi0gICAgLy8gc2hvdWxkIGJlIHVzZWQgb24gc3Vic2VxdWVudCBj
YWxscyBmb3IgdGhlIG1ldGhvZHMgYWJvdmUuCi0gICAgdmlydHVhbCBpbnQgYXR0YWNoQnJpZGdl
KFdlYktpdDo6V2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBnZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2UpID0gMDsKLQotICAgIC8vIERldHRhY2hlcyB0aGUgR2VvbG9jYXRpb25TZXJ2aWNlIGZy
b20gdGhlIGVtYmVkZGVyLgotICAgIHZpcnR1YWwgdm9pZCBkZXR0YWNoQnJpZGdlKGludCBicmlk
Z2VJZCkgPSAwOwotfTsKLQotV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVh
dGVHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtKik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAorI2VuZGlmIC8vIFdlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJn
ZWluZm8KICAgTWVyZ2VkIC90cnVuay9XZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUNocm9taXVtLmg6cjUzNDU1CgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJWaWV3Q2xpZW50LmgJKHJldmlzaW9uIDU2NzczKQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSwxMyBAQAog
I2lmbmRlZiBXZWJWaWV3Q2xpZW50X2gKICNkZWZpbmUgV2ViVmlld0NsaWVudF9oCiAKKy8vIERF
UFJFQ0FURUQ6IHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29tcGF0aWJpbGl0eSBsYXllciwgcmVtb3Zl
IGl0LgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCiAjaW5j
bHVkZSAiV2ViRHJhZ09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIldlYkVkaXRpbmdBY3Rpb24uaCIK
ICNpbmNsdWRlICJXZWJGaWxlQ2hvb3NlckNvbXBsZXRpb24uaCIKICNpbmNsdWRlICJXZWJGaWxl
Q2hvb3NlclBhcmFtcy5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5o
IgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlRleHRBZmZpbml0eS5oIgog
I2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKQEAgLTQ2LDcgKzQ5LDYgQEAgY2xhc3MgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdlYkRyYWdEYXRhOwogY2xhc3MgV2ViRmlsZUNo
b29zZXJDb21wbGV0aW9uOwogY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJHZW9sb2NhdGlvblNl
cnZpY2VJbnRlcmZhY2U7CiBjbGFzcyBXZWJOb2RlOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJl
c2VudGVyOwogY2xhc3MgV2ViUmFuZ2U7CkBAIC0yOTEsNiArMjkzLDkgQEAgcHVibGljOgogICAg
IC8vIEdlb2xvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gQWNjZXNzIHRoZSBlbWJlZGRlciBBUEkgZm9yIGdl
b2xvY2F0aW9uIHNlcnZpY2VzLgorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvblNl
cnZpY2UqIGdlb2xvY2F0aW9uU2VydmljZSgpIHsgcmV0dXJuIGdldEdlb2xvY2F0aW9uU2Vydmlj
ZSgpOyB9CisKKyAgICAvLyBERVBSRUNBVEVEOiB0aGlzIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGli
aWxpdHkgbGF5ZXIsIHJlbW92ZSBpdC4KICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRp
b25TZXJ2aWNlSW50ZXJmYWNlKiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKSB7IHJldHVybiAwOyB9
CiAKIHByb3RlY3RlZDoKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcAkocmV2aXNpb24gNTY3NzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlv
blNlcnZpY2UuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTcwNCw3ICs3MDQsNyBAQCBOb3RpZmljYXRpb25QcmVz
ZW50ZXIqIENocm9tZUNsaWVudEltcGw6CiB2b2lkIENocm9tZUNsaWVudEltcGw6OnJlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBn
ZW9sb2NhdGlvbikKIHsKICAgICBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSogZ2VvbG9jYXRp
b25TZXJ2aWNlID0gcmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSo+
KGdlb2xvY2F0aW9uLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKSk7Ci0gICAgbV93ZWJWaWV3LT5j
bGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPnJlcXVlc3RQZXJtaXNzaW9uRm9yRnJh
bWUoZ2VvbG9jYXRpb25TZXJ2aWNlLT5nZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UoKS0+Z2V0QnJp
ZGdlSWQoKSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKKyAgICBtX3dlYlZpZXctPmNsaWVu
dCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVxdWVzdFBlcm1pc3Npb25Gb3JGcmFtZShnZW9s
b2NhdGlvblNlcnZpY2UtPmdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpLT5nZXRCcmlkZ2VJZCgp
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHJl
dmlzaW9uIDU2NzczKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlUHJveHkuaCIKICNpbmNsdWRlICJL
VVJMLmgiCkBAIC04Myw2ICs4Miw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmgiCiAjaW5jbHVkZSAiV29y
a2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA1Njc3MykKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKLQotI2luY2x1ZGUgIkNo
cm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgi
Ci0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKLSNpbmNs
dWRlICJXZWJWaWV3Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLQotI2lmIEVO
QUJMRShHRU9MT0NBVElPTikKLQotdXNpbmcgV2ViQ29yZTo6Q29vcmRpbmF0ZXM7Ci11c2luZyBX
ZWJDb3JlOjpGcmFtZTsKLXVzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uOwotdXNpbmcgV2ViQ29y
ZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwotdXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb25T
ZXJ2aWNlQ2hyb21pdW07Ci11c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQ7
Ci11c2luZyBXZWJDb3JlOjpHZW9wb3NpdGlvbjsKLXVzaW5nIFdlYkNvcmU6OlBvc2l0aW9uRXJy
b3I7Ci11c2luZyBXZWJDb3JlOjpQb3NpdGlvbk9wdGlvbnM7Ci11c2luZyBXZWJDb3JlOjpTdHJp
bmc7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsIDogcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVibGljIFdlYkdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotICAgIHZpcnR1
YWwgfkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKTsKLQotICAgIC8vIEdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZQotICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0
aW9ucyopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKLSAgICB2aXJ0dWFsIGlu
dCBnZXRCcmlkZ2VJZCgpIGNvbnN0OwotCi0gICAgLy8gV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlCi0gICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93ZWQpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0
dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJh
Y3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1Nw
ZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKTsK
LQotcHJpdmF0ZToKLSAgICBXZWJWaWV3Q2xpZW50KiBnZXRXZWJWaWV3Q2xpZW50KCk7Ci0KLSAg
ICAvLyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSBvd25zIHVzLCB3ZSBvbmx5IGhhdmUgYSBw
b2ludGVyIGJhY2sgdG8gaXQuCi0gICAgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIG1fR2Vv
bG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Ci0gICAgaW50IG1fYnJpZGdlSWQ7Ci19OwotCi1HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwo
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQot
ewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSk7Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6Okdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKQotICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGF0
dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Npb25G
b3JGcmFtZSgpCi0gICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVkIHNv
IHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCi0gICAgLy8gb3VyIHNldElzQWxsb3dlZCgpLgot
ICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vydmlj
ZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAgQVNTRVJUKG1fYnJpZGdlSWQpOwotfQotCi1H
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bCgpCi17Ci0gICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xpZW50ID0gZ2V0V2Vi
Vmlld0NsaWVudCgpOwotICAgIC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25QdHIgdG8gdXMsIGFu
ZCBpdCdzIGRlc3Ryb3llZCBhZnRlciB0aGUgZnJhbWUgaGFzCi0gICAgLy8gYmVlbiBwb3RlbnRp
YWxseSBkaXNjb25uZWN0ZWQuIEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3RvcFVwZGF0aW5nKCkK
LSAgICAvLyBoYXMgYmVlbiBjYWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBkZXR0YWNoZWQgb3Vy
c2VsdmVzLgotICAgIGlmICghd2ViVmlld0NsaWVudCkgewotICAgICAgICBBU1NFUlQoIW1fYnJp
ZGdlSWQpOwotICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKLSAgICAgICAgd2ViVmlld0NsaWVu
dC0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7Ci19
Ci0KLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3Np
dGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKLXsKLSAgICBpZiAoIW1fYnJpZGdlSWQpCi0g
ICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vy
dmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRH
ZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25P
cHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBp
ZiAobV9icmlkZ2VJZCkgewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2Uq
IGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25T
ZXJ2aWNlKCk7Ci0gICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+c3RvcFVwZGF0aW5nKG1fYnJp
ZGdlSWQpOwotICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPmRldHRhY2hCcmlkZ2UobV9icmlk
Z2VJZCk7Ci0gICAgICAgIG1fYnJpZGdlSWQgPSAwOwotICAgIH0KLX0KLQotdm9pZCBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKLXsKLSAgICBnZXRXZWJWaWV3Q2xpZW50
KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJpZGdlSWQpOwotfQotCi12
b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJlc3VtZSgpCi17Ci0gICAgZ2V0V2Vi
Vmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVzdW1lKG1fYnJpZGdlSWQp
OwotfQotCi1pbnQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0QnJpZGdlSWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2JyaWRnZUlkOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9HZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOwotfQotCi12b2lk
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlvbihkb3VibGUgbGF0
aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFs
dGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBk
b3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFk
aW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBsb25nIHRpbWVzdGFt
cCkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0UG9zaXRpb24o
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5
LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVh
ZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFtcCk7Ci19Ci0KLXZv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNv
ZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX0dlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlKTsKLX0KLQotV2ViVmll
d0NsaWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVudCgp
Ci17Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqIGNocm9tZUNsaWVudEltcGwgPSBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqPihmcmFtZS0+cGFnZSgpLT5jaHJvbWUo
KS0+Y2xpZW50KCkpOwotICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCogd2ViVmlld0NsaWVudCA9
IGNocm9tZUNsaWVudEltcGwtPndlYlZpZXcoKS0+Y2xpZW50KCk7Ci0gICAgcmV0dXJuIHdlYlZp
ZXdDbGllbnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KEdFT0xPQ0FUSU9OKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
Ykdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCShyZXZpc2lvbiA1NjQzOCkJKGZyb20g
V2ViS2l0L2Nocm9taXVtL3NyYy9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bS5jcHA6
NTY0MzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaCIKKwor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiUG9zaXRp
b25PcHRpb25zLmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUlt
cGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwu
aCIKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKwordXNpbmcgV2ViQ29yZTo6Q29vcmRpbmF0
ZXM7Cit1c2luZyBXZWJDb3JlOjpGcmFtZTsKK3VzaW5nIFdlYkNvcmU6Okdlb2xvY2F0aW9uOwor
dXNpbmcgV2ViQ29yZTo6R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwordXNpbmcgV2ViQ29yZTo6
R2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Cit1c2luZyBXZWJDb3JlOjpHZW9sb2NhdGlvblNl
cnZpY2VDbGllbnQ7Cit1c2luZyBXZWJDb3JlOjpHZW9wb3NpdGlvbjsKK3VzaW5nIFdlYkNvcmU6
OlBvc2l0aW9uRXJyb3I7Cit1c2luZyBXZWJDb3JlOjpQb3NpdGlvbk9wdGlvbnM7Cit1c2luZyBX
ZWJDb3JlOjpTdHJpbmc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsIDogcHVibGljIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgcHVi
bGljIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSop
OworICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoKTsKKworICAgIC8v
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQorICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5n
KFBvc2l0aW9uT3B0aW9ucyopOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKKyAg
ICB2aXJ0dWFsIGludCBnZXRCcmlkZ2VJZCgpIGNvbnN0OworCisgICAgLy8gV2ViR2VvbG9jYXRp
b25TZXJ2aWNlQnJpZGdlCisgICAgdmlydHVhbCB2b2lkIHNldElzQWxsb3dlZChib29sIGFsbG93
ZWQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwg
ZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFs
dGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9v
bCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApOworICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXN0RXJyb3IoaW50IGVycm9yQ29kZSwgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBXZWJWaWV3Q2xpZW50KiBnZXRXZWJWaWV3Q2xp
ZW50KCk7CisKKyAgICAvLyBHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSBvd25zIHVzLCB3ZSBv
bmx5IGhhdmUgYSBwb2ludGVyIGJhY2sgdG8gaXQuCisgICAgR2VvbG9jYXRpb25TZXJ2aWNlQ2hy
b21pdW0qIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07CisgICAgaW50IG1fYnJpZGdlSWQ7
Cit9OworCitHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdlb2xvY2F0aW9uU2Vydmlj
ZUNocm9taXVtKQoreworICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bChnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSk7Cit9CisKK0dlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGw6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0qIGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKQorICAgIDogbV9HZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKK3sKKyAgICAvLyBX
ZSBuZWVkIHRvIGF0dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVz
dFBlcm1pc3Npb25Gb3JGcmFtZSgpCisgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJl
IGF0dGFjaGVkIHNvIHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCisgICAgLy8gb3VyIHNldElz
QWxsb3dlZCgpLgorICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xv
Y2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgQVNTRVJUKG1fYnJpZGdl
SWQpOworfQorCitHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjp+R2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbCgpCit7CisgICAgV2ViS2l0OjpXZWJWaWV3Q2xpZW50KiB3ZWJWaWV3Q2xp
ZW50ID0gZ2V0V2ViVmlld0NsaWVudCgpOworICAgIC8vIEdlb2xvY2F0aW9uIGhhcyBhbiBPd25Q
dHIgdG8gdXMsIGFuZCBpdCdzIGRlc3Ryb3llZCBhZnRlciB0aGUgZnJhbWUgaGFzCisgICAgLy8g
YmVlbiBwb3RlbnRpYWxseSBkaXNjb25uZWN0ZWQuIEluIHRoaXMgY2FzZSwgaXQgY2FsbHMgc3Rv
cFVwZGF0aW5nKCkKKyAgICAvLyBoYXMgYmVlbiBjYWxsZWQgYW5kIHdlIGhhdmUgYWxyZWFkeSBk
ZXR0YWNoZWQgb3Vyc2VsdmVzLgorICAgIGlmICghd2ViVmlld0NsaWVudCkgeworICAgICAgICBB
U1NFUlQoIW1fYnJpZGdlSWQpOworICAgIH0gZWxzZSBpZiAobV9icmlkZ2VJZCkKKyAgICAgICAg
d2ViVmlld0NsaWVudC0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCktPmRldHRhY2hCcmlkZ2UobV9i
cmlkZ2VJZCk7Cit9CisKK2Jvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRV
cGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKK3sKKyAgICBpZiAoIW1f
YnJpZGdlSWQpCisgICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdl
b2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0Ns
aWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlk
LCBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwo
KSwgcG9zaXRpb25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5n
KCkKK3sKKyAgICBpZiAobV9icmlkZ2VJZCkgeworICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZp
Y2VJbnRlcmZhY2UqIGdlb2xvY2F0aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0
R2VvbG9jYXRpb25TZXJ2aWNlKCk7CisgICAgICAgIGdlb2xvY2F0aW9uU2VydmljZS0+c3RvcFVw
ZGF0aW5nKG1fYnJpZGdlSWQpOworICAgICAgICBnZW9sb2NhdGlvblNlcnZpY2UtPmRldHRhY2hC
cmlkZ2UobV9icmlkZ2VJZCk7CisgICAgICAgIG1fYnJpZGdlSWQgPSAwOworICAgIH0KK30KKwor
dm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5kKCkKK3sKKyAgICBnZXRX
ZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5zdXNwZW5kKG1fYnJpZGdl
SWQpOworfQorCit2b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJlc3VtZSgpCit7
CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+cmVzdW1l
KG1fYnJpZGdlSWQpOworfQorCitpbnQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0
QnJpZGdlSWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2JyaWRnZUlkOworfQorCit2b2lkIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCit7
CisgICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQp
OworfQorCit2b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnNldExhc3RQb3NpdGlv
bihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZSwgZG91YmxlIGFsdGl0dWRlLCBkb3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCwgbG9uZyBs
b25nIHRpbWVzdGFtcCkKK3sKKyAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRM
YXN0UG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1
ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
IHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQsIHRpbWVzdGFt
cCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9y
KGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX0dlb2xv
Y2F0aW9uU2VydmljZUNocm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlKTsK
K30KKworV2ViVmlld0NsaWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2Vi
Vmlld0NsaWVudCgpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9HZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqIGNocm9tZUNsaWVu
dEltcGwgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudEltcGwqPihmcmFtZS0+cGFn
ZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkpOworICAgIFdlYktpdDo6V2ViVmlld0NsaWVudCogd2Vi
Vmlld0NsaWVudCA9IGNocm9tZUNsaWVudEltcGwtPndlYlZpZXcoKS0+Y2xpZW50KCk7CisgICAg
cmV0dXJuIHdlYlZpZXdDbGllbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
ZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuY3BwCShyZXZpc2lvbiA1
NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaCIKIAogI2lu
Y2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKQEAgLTQzLDYg
KzQyLDggQEAKICNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9u
U2VydmljZS5oIgorI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCkBAIC02
MSwxMCArNjIsMTAgQEAgdXNpbmcgV2ViQ29yZTo6U3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2Ugewor
Y2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbCA6IHB1YmxpYyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UsIHB1YmxpYyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgewogcHVi
bGljOgotICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRp
b25TZXJ2aWNlQ2hyb21pdW0qKTsKLSAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2VJbXBsKCk7CisgICAgZXhwbGljaXQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChH
ZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOworICAgIHZpcnR1YWwgfldlYkdlb2xvY2F0aW9u
U2VydmljZUJyaWRnZUltcGwoKTsKIAogICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZQog
ICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwpAQCAtODgs
ODAgKzg5LDgxIEBAIHByaXZhdGU6CiAKIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRl
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSog
Z2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0pCiB7Ci0gICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKGdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKTsKKyAgICByZXR1
cm4gbmV3IFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoZ2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW0pOwogfQogCi1HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2VJbXBsKEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtKiBnZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OldlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qIGdl
b2xvY2F0aW9uU2VydmljZUNocm9taXVtKQogICAgIDogbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJv
bWl1bShnZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGF0
dGFjaCBvdXJzZWx2ZXMgaGVyZTogR2VvbG9jYXRpb24gY2FsbHMgcmVxdWVzdFBlcm1pc3Npb25G
b3JGcmFtZSgpCiAgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBuZWVkIHRvIGJlIGF0dGFjaGVkIHNv
IHRoYXQgdGhlIGVtYmVkZGVyIGNhbiBjYWxsCiAgICAgLy8gb3VyIHNldElzQWxsb3dlZCgpLgot
ICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdldEdlb2xvY2F0aW9uU2Vydmlj
ZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgbV9icmlkZ2VJZCA9IGdldFdlYlZpZXdDbGll
bnQoKS0+Z2VvbG9jYXRpb25TZXJ2aWNlKCktPmF0dGFjaEJyaWRnZSh0aGlzKTsKICAgICBBU1NF
UlQobV9icmlkZ2VJZCk7CiB9CiAKLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6On5HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKK1dlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUlt
cGw6On5XZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsKCkKIHsKICAgICBXZWJLaXQ6Oldl
YlZpZXdDbGllbnQqIHdlYlZpZXdDbGllbnQgPSBnZXRXZWJWaWV3Q2xpZW50KCk7CiAgICAgLy8g
R2VvbG9jYXRpb24gaGFzIGFuIE93blB0ciB0byB1cywgYW5kIGl0J3MgZGVzdHJveWVkIGFmdGVy
IHRoZSBmcmFtZSBoYXMKICAgICAvLyBiZWVuIHBvdGVudGlhbGx5IGRpc2Nvbm5lY3RlZC4gSW4g
dGhpcyBjYXNlLCBpdCBjYWxscyBzdG9wVXBkYXRpbmcoKQotICAgIC8vIGhhcyBiZWVuIGNhbGxl
ZCBhbmQgd2UgaGF2ZSBhbHJlYWR5IGRldHRhY2hlZCBvdXJzZWx2ZXMuCi0gICAgaWYgKCF3ZWJW
aWV3Q2xpZW50KSB7CisgICAgLy8gaGFzIGJlZW4gY2FsbGVkIGFuZCB3ZSBoYXZlIGFscmVhZHkg
ZGV0YWNoZWQgb3Vyc2VsdmVzLgorICAgIGlmICghd2ViVmlld0NsaWVudCkKICAgICAgICAgQVNT
RVJUKCFtX2JyaWRnZUlkKTsKLSAgICB9IGVsc2UgaWYgKG1fYnJpZGdlSWQpCi0gICAgICAgIHdl
YlZpZXdDbGllbnQtPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXR0YWNoQnJpZGdlKG1fYnJp
ZGdlSWQpOworICAgIGVsc2UgaWYgKG1fYnJpZGdlSWQpCisgICAgICAgIHdlYlZpZXdDbGllbnQt
Pmdlb2xvY2F0aW9uU2VydmljZSgpLT5kZXRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiB9CiAKLWJv
b2wgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9w
dGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKK2Jvb2wgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
SW1wbDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIHBvc2l0aW9uT3B0aW9ucykKIHsK
ICAgICBpZiAoIW1fYnJpZGdlSWQpCi0gICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xp
ZW50KCktPmdldEdlb2xvY2F0aW9uU2VydmljZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7Ci0gICAg
Z2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGlu
ZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25zLT5lbmFibGVIaWdoQWNjdXJhY3koKSk7Cisg
ICAgICAgIG1fYnJpZGdlSWQgPSBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2Vydmlj
ZSgpLT5hdHRhY2hCcmlkZ2UodGhpcyk7CisgICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZW9sb2Nh
dGlvblNlcnZpY2UoKS0+c3RhcnRVcGRhdGluZyhtX2JyaWRnZUlkLCBtX0dlb2xvY2F0aW9uU2Vy
dmljZUNocm9taXVtLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKSwgcG9zaXRpb25PcHRpb25z
LT5lbmFibGVIaWdoQWNjdXJhY3koKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR2Vv
bG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKK3ZvaWQgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3RvcFVwZGF0aW5nKCkKIHsKICAgICBpZiAobV9icmlk
Z2VJZCkgewotICAgICAgICBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UqIGdlb2xvY2F0
aW9uU2VydmljZSA9IGdldFdlYlZpZXdDbGllbnQoKS0+Z2V0R2VvbG9jYXRpb25TZXJ2aWNlKCk7
CisgICAgICAgIFdlYkdlb2xvY2F0aW9uU2VydmljZSogZ2VvbG9jYXRpb25TZXJ2aWNlID0gZ2V0
V2ViVmlld0NsaWVudCgpLT5nZW9sb2NhdGlvblNlcnZpY2UoKTsKICAgICAgICAgZ2VvbG9jYXRp
b25TZXJ2aWNlLT5zdG9wVXBkYXRpbmcobV9icmlkZ2VJZCk7Ci0gICAgICAgIGdlb2xvY2F0aW9u
U2VydmljZS0+ZGV0dGFjaEJyaWRnZShtX2JyaWRnZUlkKTsKKyAgICAgICAgZ2VvbG9jYXRpb25T
ZXJ2aWNlLT5kZXRhY2hCcmlkZ2UobV9icmlkZ2VJZCk7CiAgICAgICAgIG1fYnJpZGdlSWQgPSAw
OwogICAgIH0KIH0KIAotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzdXNwZW5k
KCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c3VzcGVuZCgpCiB7Ci0g
ICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2UoKS0+c3VzcGVuZCht
X2JyaWRnZUlkKTsKKyAgICBnZXRXZWJWaWV3Q2xpZW50KCktPmdlb2xvY2F0aW9uU2VydmljZSgp
LT5zdXNwZW5kKG1fYnJpZGdlSWQpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZUltcGw6OnJlc3VtZSgpCit2b2lkIFdlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGw6OnJl
c3VtZSgpCiB7Ci0gICAgZ2V0V2ViVmlld0NsaWVudCgpLT5nZXRHZW9sb2NhdGlvblNlcnZpY2Uo
KS0+cmVzdW1lKG1fYnJpZGdlSWQpOworICAgIGdldFdlYlZpZXdDbGllbnQoKS0+Z2VvbG9jYXRp
b25TZXJ2aWNlKCktPnJlc3VtZShtX2JyaWRnZUlkKTsKIH0KIAotaW50IEdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGw6OmdldEJyaWRnZUlkKCkgY29uc3QKK2ludCBXZWJHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VJbXBsOjpnZXRCcmlkZ2VJZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYnJp
ZGdlSWQ7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkKK3ZvaWQgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6
c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsKICAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtLT5zZXRJc0FsbG93ZWQoYWxsb3dlZCk7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlQnJpZGdlSW1wbDo6c2V0TGFzdFBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxv
bmdpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGRvdWJsZSBh
Y2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlk
ZXNTcGVlZCwgZG91YmxlIHNwZWVkLCBsb25nIGxvbmcgdGltZXN0YW1wKQordm9pZCBXZWJHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRl
LCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVk
ZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91Ymxl
IGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywg
Ym9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApCiB7
Ci0gICAgbV9HZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bS0+c2V0TGFzdFBvc2l0aW9uKGxhdGl0
dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBhY2N1cmFjeSwgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcs
IGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkLCB0aW1lc3RhbXApOworICAgIFJlZlB0cjxH
ZW9wb3NpdGlvbj4gZ2VvcG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKENvb3JkaW5hdGVz
OjpjcmVhdGUobGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUs
IGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHBy
b3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpLCB0aW1lc3RhbXAp
OworICAgIG1fR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0tPnNldExhc3RQb3NpdGlvbihnZW9w
b3NpdGlvbik7CiB9CiAKLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFz
dEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2Vi
R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6c2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUs
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBtX0dlb2xvY2F0aW9uU2VydmljZUNo
cm9taXVtLT5zZXRMYXN0RXJyb3IoZXJyb3JDb2RlLCBtZXNzYWdlKTsKIH0KIAotV2ViVmlld0Ns
aWVudCogR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbDo6Z2V0V2ViVmlld0NsaWVudCgpCitX
ZWJWaWV3Q2xpZW50KiBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsOjpnZXRXZWJWaWV3
Q2xpZW50KCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX0dlb2xvY2F0aW9uU2VydmljZUNocm9t
aXVtLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2VydmljZUJy
aWRnZUltcGwuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90
cnVuay9XZWJLaXQvY2hyb21pdW0vc3JjL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
LmNwcDpyNTM0NTUKCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGwuaAkocmV2aXNpb24gNTY0MzgpCShmcm9tIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW0uaDo1NjQz
OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjZGVmaW5lIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNo
cm9taXVtX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisKKy8vIFByb3Zp
ZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVtYmVkZGVyLgorY2xhc3MgV2ViR2VvbG9j
YXRpb25TZXJ2aWNlQnJpZGdlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxv
d2VkKGJvb2wgYWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24o
ZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBib29sIHByb3ZpZGVzQWx0aXR1ZGUs
IGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBk
b3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUgc3BlZWQsIGxvbmcgbG9u
ZyB0aW1lc3RhbXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdEVycm9yKGludCBlcnJv
ckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkgPSAwOworfTsKKworLy8gUHJvdmlkZXMg
YW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQuCitjbGFzcyBXZWJHZW9sb2NhdGlvblNl
cnZpY2VJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlz
c2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3QgV2ViVVJMJiB1cmwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJpZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJs
LCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBk
YXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoaW50IGJy
aWRnZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZShpbnQgYnJpZGdlSWQpID0gMDsK
KworICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlvbkJyaWRnZSB0byB0aGUgZW1iZWRkZXIg
YW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAorICAgIC8vIHNob3VsZCBiZSB1c2VkIG9uIHN1YnNl
cXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3ZlLgorICAgIHZpcnR1YWwgaW50IGF0dGFj
aEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogZ2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlKSA9IDA7CisKKyAgICAvLyBEZXR0YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2Vy
dmljZSBmcm9tIHRoZSBlbWJlZGRlci4KKyAgICB2aXJ0dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShp
bnQgYnJpZGdlSWQpID0gMDsKK307CisKK1dlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbChXZWJDb3JlOjpHZW9sb2NhdGlv
blNlcnZpY2VDaHJvbWl1bSopOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVtX2gKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlSW1wbC5oCShyZXZp
c2lvbiA1NjQzOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlQ2hyb21pdW1faAot
I2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VDaHJvbWl1bV9oCisjaWZuZGVmIFdlYkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZUltcGxfaAorI2RlZmluZSBXZWJHZW9sb2NhdGlvblNlcnZp
Y2VCcmlkZ2VJbXBsX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR2VvbG9jYXRpb25T
ZXJ2aWNlQnJpZGdlOwpAQCAtMzcsMzcgKzM3LDcgQEAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW07CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci1j
bGFzcyBXZWJVUkw7Ci0KLS8vIFByb3ZpZGVzIGEgV2ViS2l0IEFQSSBjYWxsZWQgYnkgdGhlIGVt
YmVkZGVyLgotY2xhc3MgV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXN0UG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRl
LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgZG91YmxlIGFjY3VyYWN5
LCBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ks
IGJvb2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVk
LCBkb3VibGUgc3BlZWQsIGxvbmcgbG9uZyB0aW1lc3RhbXApID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGFzdEVycm9yKGludCBlcnJvckNvZGUsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkg
PSAwOwotfTsKLQotLy8gUHJvdmlkZXMgYW4gZW1iZWRkZXIgQVBJIGNhbGxlZCBieSBXZWJLaXQu
Ci1jbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VJbnRlcmZhY2UgewotcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbkZvckZyYW1lKGludCBicmlkZ2VJZCwgY29uc3Qg
V2ViVVJMJiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZyhpbnQgYnJp
ZGdlSWQsIGNvbnN0IFdlYlVSTCYgdXJsLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoaW50IGJyaWRnZUlkKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN1c3BlbmQoaW50IGJyaWRnZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
c3VtZShpbnQgYnJpZGdlSWQpID0gMDsKLQotICAgIC8vIEF0dGFjaGVzIHRoZSBHZW9sb2NhdGlv
bkJyaWRnZSB0byB0aGUgZW1iZWRkZXIgYW5kIHJldHVybnMgaXRzIGlkLCB3aGljaAotICAgIC8v
IHNob3VsZCBiZSB1c2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMgZm9yIHRoZSBtZXRob2RzIGFib3Zl
LgotICAgIHZpcnR1YWwgaW50IGF0dGFjaEJyaWRnZShXZWJLaXQ6OldlYkdlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZSogZ2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKSA9IDA7Ci0KLSAgICAvLyBEZXR0
YWNoZXMgdGhlIEdlb2xvY2F0aW9uU2VydmljZSBmcm9tIHRoZSBlbWJlZGRlci4KLSAgICB2aXJ0
dWFsIHZvaWQgZGV0dGFjaEJyaWRnZShpbnQgYnJpZGdlSWQpID0gMDsKLX07Ci0KIFdlYkNvcmU6
Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSogY3JlYXRlR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdl
SW1wbChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwotCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
X2gKKyNlbmRpZiAvLyBXZWJHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VJbXBsX2gKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlSW1wbC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KICAgTWVyZ2VkIC90cnVu
ay9XZWJLaXQvY2hyb21pdW0vcHVibGljL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZUNocm9taXVt
Lmg6cjUzNDU1Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>