<?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>69107</bug_id>
          
          <creation_ts>2011-09-29 14:52:54 -0700</creation_ts>
          <short_desc>Webkit API for compositor</short_desc>
          <delta_ts>2011-10-07 16:37:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69601</dependson>
    
    <dependson>69616</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Antoine Labour">piman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475693</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-29 14:52:54 -0700</bug_when>
    <thetext>Webkit API for compositor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475744</commentid>
    <comment_count>1</comment_count>
      <attachid>109216</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-29 16:30:59 -0700</bug_when>
    <thetext>Created attachment 109216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475747</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-29 16:34:31 -0700</bug_when>
    <thetext>I exposed most of LayerChromium, ContentLayerChromium and CCLayerTreeHost that would be needed to build UI, modeled on WebNode (e.g. WebLayer is both a smart pointer and directly exposes the API).

Currently this API can only be called on the WebKit thread, until I rework a couple of things in https://bugs.webkit.org/show_bug.cgi?id=69048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475819</commentid>
    <comment_count>3</comment_count>
      <attachid>109216</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-29 19:07:58 -0700</bug_when>
    <thetext>Comment on attachment 109216
Patch

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

FYI Darin and I sketched up the input stuff in more detail and as a result https://bugs.webkit.org/show_bug.cgi?id=69117 changes the threading around a bit. I hope this doesn&apos;t complicate your design too much, I think it&apos;s actually a bit simpler to reason about with the thread managed externally to WebKit.

&gt; Source/WebKit/chromium/public/WebContentLayer.h:48
&gt; +    WebContentLayer(const WebContentLayer&amp; l) : WebLayer(l) { }

webkit generally doesn&apos;t like 1-character variable names. in addition, in the font that the webkit review tool uses the glyphs for &apos;1&apos; (one) and &apos;l&apos; (ell) are pixel-for-pixel identical :&apos;(. can you call this &apos;layer&apos; instead or something like that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476388</commentid>
    <comment_count>4</comment_count>
      <attachid>109368</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-30 16:16:51 -0700</bug_when>
    <thetext>Created attachment 109368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476391</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-30 16:18:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 109216 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109216&amp;action=review
&gt; 
&gt; FYI Darin and I sketched up the input stuff in more detail and as a result https://bugs.webkit.org/show_bug.cgi?id=69117 changes the threading around a bit. I hope this doesn&apos;t complicate your design too much, I think it&apos;s actually a bit simpler to reason about with the thread managed externally to WebKit.

I removed the notion of thread for now. It wasn&apos;t working yet anyway. I&apos;ll follow up in a later CL.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:48
&gt; &gt; +    WebContentLayer(const WebContentLayer&amp; l) : WebLayer(l) { }
&gt; 
&gt; webkit generally doesn&apos;t like 1-character variable names. in addition, in the font that the webkit review tool uses the glyphs for &apos;1&apos; (one) and &apos;l&apos; (ell) are pixel-for-pixel identical :&apos;(. can you call this &apos;layer&apos; instead or something like that?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476500</commentid>
    <comment_count>6</comment_count>
      <attachid>109368</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-30 19:07:57 -0700</bug_when>
    <thetext>Comment on attachment 109368
Patch

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

&gt; Source/WebKit/chromium/public/WebContentLayer.h:37
&gt; +namespace WebCore { class ContentLayerChromium; }

you shouldn&apos;t leak any WebCore things in the header. does this just need to be in a #if WEBKIT_IMPLEMENTATION guard?

&gt; Source/WebKit/chromium/public/WebContentLayer.h:49
&gt; +    ~WebContentLayer() { }

virtual

&gt; Source/WebKit/chromium/public/WebLayer.h:37
&gt; +namespace WebCore { class LayerChromium; }

shouldn&apos;t this be inside a WEBKIT_IMPLEMENTATION guard? we shouldn&apos;t leak webcore types through this header

&gt; Source/WebKit/chromium/public/WebLayer.h:50
&gt; +    ~WebLayer() { reset(); }

if you wanna let people destroy WebLayers via a WebLayer*, virtual on this please

&gt; Source/WebKit/chromium/public/WebLayerDelegate.h:16
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.

here and other files: we use a 2-clause license header for new code

&gt; Source/WebKit/chromium/src/WebContentLayer.cpp:5
&gt; + * copyright (c) 2011 google inc. all rights reserved.
&gt; + *
&gt; + * redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are

somehow bizarrely this license header became totally lowercase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476514</commentid>
    <comment_count>7</comment_count>
      <attachid>109368</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-30 19:51:45 -0700</bug_when>
    <thetext>Comment on attachment 109368
Patch

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

&gt; Source/WebKit/chromium/public/WebLayerTreeHost.h:61
&gt; +class WebLayerTreeHost {

fyi, we&apos;re sort of thinking that CCLayerTreeHost is not quite the right level of abstraction to expose in chromium as the API to WebViewImpl - CCLayerTreeHost&apos;s public interface exposes way too many internal details and even the name &quot;layertreehost&quot; is about its implementation, not about what it really is about.

i haven&apos;t talked about with with Nat yet but I was thinking of adding a CCView pure virtual interface that exposes roughly what you&apos;ve exposed here. you can&apos;t call the WK api WebView (since that&apos;s taken) but maybe it could be something more view-oriented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476533</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-09-30 21:39:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109368 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109368&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:37
&gt; &gt; +namespace WebCore { class ContentLayerChromium; }
&gt; 
&gt; you shouldn&apos;t leak any WebCore things in the header. does this just need to be in a #if WEBKIT_IMPLEMENTATION guard?

Actually, we are not so strict about that these days.  This doesn&apos;t really hurt anything.  What would hurt is if someone could actually use this type for something in Chromium.  So long as we don&apos;t expose any functions that operate on these types, it should be fine.

The extra WEBKIT_IMPLEMENTATION guard is totally fine, but perhaps unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478066</commentid>
    <comment_count>9</comment_count>
      <attachid>109719</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-04 17:07:08 -0700</bug_when>
    <thetext>Created attachment 109719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478068</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-04 17:11:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109368 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109368&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:37
&gt; &gt; +namespace WebCore { class ContentLayerChromium; }
&gt; 
&gt; you shouldn&apos;t leak any WebCore things in the header. does this just need to be in a #if WEBKIT_IMPLEMENTATION guard?
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:49
&gt; &gt; +    ~WebContentLayer() { }
&gt; 
&gt; virtual

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayer.h:37
&gt; &gt; +namespace WebCore { class LayerChromium; }
&gt; 
&gt; shouldn&apos;t this be inside a WEBKIT_IMPLEMENTATION guard? we shouldn&apos;t leak webcore types through this header

So, it is needed so that the header compiles outside of WebKit. The type needs to be forward-declared so that m_private can be declared, even outside of WebKit.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayer.h:50
&gt; &gt; +    ~WebLayer() { reset(); }
&gt; 
&gt; if you wanna let people destroy WebLayers via a WebLayer*, virtual on this please

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerDelegate.h:16
&gt; &gt; + *     * Redistributions of source code must retain the above copyright
&gt; &gt; + * notice, this list of conditions and the following disclaimer.
&gt; &gt; + *     * Redistributions in binary form must reproduce the above
&gt; &gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; &gt; + * in the documentation and/or other materials provided with the
&gt; &gt; + * distribution.
&gt; &gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; &gt; + * contributors may be used to endorse or promote products derived from
&gt; &gt; + * this software without specific prior written permission.
&gt; 
&gt; here and other files: we use a 2-clause license header for new code

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebContentLayer.cpp:5
&gt; &gt; + * copyright (c) 2011 google inc. all rights reserved.
&gt; &gt; + *
&gt; &gt; + * redistribution and use in source and binary forms, with or without
&gt; &gt; + * modification, are permitted provided that the following conditions are
&gt; 
&gt; somehow bizarrely this license header became totally lowercase

Done (typo &apos;u&apos; in vim).

I also renamed WebLayerTreeHost* to WebLayerTreeView*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478607</commentid>
    <comment_count>11</comment_count>
      <attachid>109719</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-05 13:00:14 -0700</bug_when>
    <thetext>Comment on attachment 109719
Patch

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

&gt; Source/WebKit/chromium/public/WebContentLayer.h:41
&gt; +    static WebContentLayer create(WebLayerDelegate*, WebContentLayerDelegate*);

nit: new line after static function block

Perhaps WebContentLayerDelegate should extend from WebLayerDelegate?
Notice how WebViewClient extends from WebWidgetClient and WebView
extends from WebWidget.

This requires virtual inheritance, but the upside is that the code
becomes a bit cleaner.

&gt; Source/WebKit/chromium/public/WebContentLayerDelegate.h:34
&gt; +class WebContentLayerDelegate {

nit: we use the suffix Client instead of Delegate.

can we rename to WebContentLayerClient and WebLayerClient?

&gt; Source/WebKit/chromium/public/WebContentLayerDelegate.h:36
&gt; +    virtual bool drawsContent() const = 0;

is there some relationship between drawsContent and paintContents?  &quot;draw&quot;
and &quot;paint&quot; sound similar.  should we use the same term?  or is there some
subtle distinction you are trying to make here?

if drawsContent is a predicate to decide if paintContents should be called,
then how about renaming drawsContent to canPaintContents?

&gt; Source/WebKit/chromium/public/WebLayer.h:42
&gt; +    static WebLayer create(WebLayerDelegate*);

nit: new line after static function block

&gt; Source/WebKit/chromium/public/WebLayerDelegate.h:33
&gt; +    virtual void notifyNeedsCommit() = 0;

what does this function mean?  can you document it a bit?
what is the implementer supposed to do in response to this
notification?

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:42
&gt; +struct WebCompositorSettings {

nit: one header file per class/struct.

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:44
&gt; +            : acceleratePainting(false)

nit: indentation

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:58
&gt; +    static WebLayerTreeView create(WebLayerTreeViewDelegate*, const WebLayer&amp; root, const WebCompositorSettings&amp;);

nit: add a new line after this static function

perhaps it would make more sense for WebCompositorSettings to be named WebLayerTreeView::Settings?
or, if WebLayerTreeView is the top-level thing, then how does it differ from WebCompositor?  does
a WebCompositor own a WebLayerTreeView, or should they be merged together into one thing?

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:71
&gt; +    WEBKIT_EXPORT void composite();

perhaps you should document the side-effects of composite().  is it in the
context of this function that WebLayerClient methods will get invoked?

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:72
&gt; +    WEBKIT_EXPORT void setViewport(const WebSize&amp; viewportSize);

nit: setViewportSize

&gt; Source/WebKit/chromium/public/WebLayerTreeViewDelegate.h:34
&gt; +class WebLayerTreeViewDelegate {

nit: *Client

&gt; Source/WebKit/chromium/public/WebLayerTreeViewDelegate.h:40
&gt; +    virtual void scheduleComposite() = 0;

it would be good to document the processing model.  for example, see
the comments in WebWidgetClient.h for the scheduleComposite method there.

&gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:32
&gt; +#include &lt;ui/gfx/transform.h&gt;

includes like this create a circular dependency between WebKit and Chromium.
we should make sure that we are happy never moving &lt;ui/gfx/transform.h&gt;.
at least let Ben Goodger know about this.  i suspect this is probably worth
while to do, just as it was worth while to add the dependency on &lt;ui/gfx/rect.h&gt;

&gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:52
&gt; +#if WEBKIT_IMPLEMENTATION

some of the functions in here seem like they would possibly
benefit from not being inlined.

&gt; Source/WebKit/chromium/src/WebContentLayerImpl.cpp:75
&gt; +void WebContentLayerImpl::notifySyncRequired()

looks like there is a terminology change here.  from notifySyncRequired
to notifyNeedsCommit.  should we try to change one to match the other?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478861</commentid>
    <comment_count>12</comment_count>
      <attachid>109899</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-05 18:45:45 -0700</bug_when>
    <thetext>Created attachment 109899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478863</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 18:49:54 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478869</commentid>
    <comment_count>14</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-05 19:01:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 109719 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109719&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:41
&gt; &gt; +    static WebContentLayer create(WebLayerDelegate*, WebContentLayerDelegate*);
&gt; 
&gt; nit: new line after static function block

Done.

&gt; 
&gt; Perhaps WebContentLayerDelegate should extend from WebLayerDelegate?
&gt; Notice how WebViewClient extends from WebWidgetClient and WebView
&gt; extends from WebWidget.
&gt; 
&gt; This requires virtual inheritance, but the upside is that the code
&gt; becomes a bit cleaner.

As mentioned in our discussion, it can easily make sense to have a single WebLayerClient for a whole tree, and one WebContentLayerClient for each WebContentLayer. Having inheritance there makes it harder. I&apos;ve kept them separate for now.

I&apos;m actually hoping at some point to be able to remove the need for a WebLayerClient (and passing the &quot;needs commit&quot; information through the compositor / WebLayerTreeView instead of through the layer tree), but that needs significant refactoring in the LayerChromium and friends, so that&apos;s for another CL.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayerDelegate.h:34
&gt; &gt; +class WebContentLayerDelegate {
&gt; 
&gt; nit: we use the suffix Client instead of Delegate.
&gt; 
&gt; can we rename to WebContentLayerClient and WebLayerClient?

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayerDelegate.h:36
&gt; &gt; +    virtual bool drawsContent() const = 0;
&gt; 
&gt; is there some relationship between drawsContent and paintContents?  &quot;draw&quot;
&gt; and &quot;paint&quot; sound similar.  should we use the same term?  or is there some
&gt; subtle distinction you are trying to make here?

There is a difference, and it&apos;s not what I would call subtle. paintContents is to update the contents of the layer. drawsContent is to indicate whether or not the layer should be drawn when the compositing pass occurs.
That being said, I removed paintContents from the visible client API and made it a settable value on the WebContentLayer - to be more consistent with the rest. I want to push a similar change lower in the stack but it&apos;s another significant refactoring, so that&apos;s also for another CL.

In any case, I added some doc/comments.

&gt; 
&gt; if drawsContent is a predicate to decide if paintContents should be called,
&gt; then how about renaming drawsContent to canPaintContents?
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayer.h:42
&gt; &gt; +    static WebLayer create(WebLayerDelegate*);
&gt; 
&gt; nit: new line after static function block

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerDelegate.h:33
&gt; &gt; +    virtual void notifyNeedsCommit() = 0;
&gt; 
&gt; what does this function mean?  can you document it a bit?
&gt; what is the implementer supposed to do in response to this
&gt; notification?

I renamed as notifyNeedsCompositing, and added some doc.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:42
&gt; &gt; +struct WebCompositorSettings {
&gt; 
&gt; nit: one header file per class/struct.

Moved as WebLayerTreeView::Settings

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:44
&gt; &gt; +            : acceleratePainting(false)
&gt; 
&gt; nit: indentation

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:58
&gt; &gt; +    static WebLayerTreeView create(WebLayerTreeViewDelegate*, const WebLayer&amp; root, const WebCompositorSettings&amp;);
&gt; 
&gt; nit: add a new line after this static function

Done.

&gt; 
&gt; perhaps it would make more sense for WebCompositorSettings to be named WebLayerTreeView::Settings?
Done.

&gt; or, if WebLayerTreeView is the top-level thing, then how does it differ from WebCompositor?  does
&gt; a WebCompositor own a WebLayerTreeView, or should they be merged together into one thing?

As discussed, WebCompositor maps to the compositor-thread API, whereas WebLayerTreeView maps to the main thread API, so keeping them separate is desirable.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:71
&gt; &gt; +    WEBKIT_EXPORT void composite();
&gt; 
&gt; perhaps you should document the side-effects of composite().  is it in the
&gt; context of this function that WebLayerClient methods will get invoked?

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:72
&gt; &gt; +    WEBKIT_EXPORT void setViewport(const WebSize&amp; viewportSize);
&gt; 
&gt; nit: setViewportSize

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeViewDelegate.h:34
&gt; &gt; +class WebLayerTreeViewDelegate {
&gt; 
&gt; nit: *Client

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeViewDelegate.h:40
&gt; &gt; +    virtual void scheduleComposite() = 0;
&gt; 
&gt; it would be good to document the processing model.  for example, see
&gt; the comments in WebWidgetClient.h for the scheduleComposite method there.

Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:32
&gt; &gt; +#include &lt;ui/gfx/transform.h&gt;
&gt; 
&gt; includes like this create a circular dependency between WebKit and Chromium.
&gt; we should make sure that we are happy never moving &lt;ui/gfx/transform.h&gt;.
&gt; at least let Ben Goodger know about this.  i suspect this is probably worth
&gt; while to do, just as it was worth while to add the dependency on &lt;ui/gfx/rect.h&gt;

I switched it to use SkMatrix44 so we don&apos;t depend on Chrome types.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:52
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; 
&gt; some of the functions in here seem like they would possibly
&gt; benefit from not being inlined.

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebContentLayerImpl.cpp:75
&gt; &gt; +void WebContentLayerImpl::notifySyncRequired()
&gt; 
&gt; looks like there is a terminology change here.  from notifySyncRequired
&gt; to notifyNeedsCommit.  should we try to change one to match the other?

I renamed notifyNeedsCommit to notifyNeedsCompositing. I think that indicates properly the intent.
The internal API could be renamed, but I believe that trickles all the way to WebCore, so that&apos;s for another CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478932</commentid>
    <comment_count>15</comment_count>
      <attachid>109899</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-05 21:26:49 -0700</bug_when>
    <thetext>Comment on attachment 109899
Patch

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

Very close... sorry, I was ready to R+ this, but then I found more things.  Nothing at all major.

&gt; Source/WebKit/chromium/public/WebContentLayer.h:51
&gt; +    // Sets whether the layer draws it content when compositing.

nit: &quot;draws it&quot; -&gt; &quot;draws its&quot;

&gt; Source/WebKit/chromium/public/WebContentLayer.h:53
&gt; +    WEBKIT_EXPORT bool drawsContent();

nit: make this function const?  on WebLayer, similar getters are const methods.

&gt; Source/WebKit/chromium/public/WebContentLayer.h:62
&gt; +    WEBKIT_EXPORT WebFloatRect dirtyRect();

nit: make this function const?

i&apos;d probably put a new line separating setNeedsDisplay from dirtyRect since they
are not a setter/getter pair.

nit: it might be nice to converge on fewer terms here and to reuse existing terms.
e.g., instead of setNeedsDisplay, how about invalidateRect?  see WebWidgetClient.
instead of dirtyRect, how about invalidationRect or invalidationBounds?

&gt; Source/WebKit/chromium/public/WebLayerTreeView.h:75
&gt; +    // later time. Before the compositing pass happens, WebContentLayers will be

Can you more strongly say &quot;Before composite() returns, WebContentsLayers will be...&quot;?

&gt; Source/WebKit/chromium/public/WebLayerTreeViewClient.h:40
&gt; +    // Applies a scroll delta to the root layer. This is trigerred by events

nit: trigerred

&gt; Source/WebKit/chromium/public/WebLayerTreeViewClient.h:50
&gt; +    virtual void didRecreateGraphicsContext(bool success) = 0;

in the comments you say &quot;rebinding&quot;, but in the method name you use the term &quot;recreate&quot;
are those supposed to mean the same thing?  should they perhaps use the same word?

&gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:32
&gt; +#include &quot;third_party/skia/include/utils/SkMatrix44.h&quot;

you should be able to just #include &lt;SkMatrix44.h&gt; here.  see WebImage.h for reference.

&gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:51
&gt; +#if WEBKIT_IMPLEMENTATION

nit: we usually make the WEBKIT_IMPLEMENTATION section be the very last bit
of the &quot;public:&quot; section.

&gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:69
&gt; +    double m_data[4][4];

had you considered just implementing this class as a SkMatrix44?  maybe it should
even just extend from SkMatrix44?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479522</commentid>
    <comment_count>16</comment_count>
      <attachid>110034</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-06 14:56:38 -0700</bug_when>
    <thetext>Created attachment 110034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479536</commentid>
    <comment_count>17</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-06 15:08:42 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 109899 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109899&amp;action=review
&gt; 
&gt; Very close... sorry, I was ready to R+ this, but then I found more things.  Nothing at all major.
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:51
&gt; &gt; +    // Sets whether the layer draws it content when compositing.
&gt; 
&gt; nit: &quot;draws it&quot; -&gt; &quot;draws its&quot;

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:53
&gt; &gt; +    WEBKIT_EXPORT bool drawsContent();
&gt; 
&gt; nit: make this function const?  on WebLayer, similar getters are const methods.

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebContentLayer.h:62
&gt; &gt; +    WEBKIT_EXPORT WebFloatRect dirtyRect();
&gt; 
&gt; nit: make this function const?

Done.

&gt; 
&gt; i&apos;d probably put a new line separating setNeedsDisplay from dirtyRect since they
&gt; are not a setter/getter pair.

Done.

&gt; 
&gt; nit: it might be nice to converge on fewer terms here and to reuse existing terms.
&gt; e.g., instead of setNeedsDisplay, how about invalidateRect?  see WebWidgetClient.
&gt; instead of dirtyRect, how about invalidationRect or invalidationBounds?

Done. (invalidateRect/invalidate/invalidRect)

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeView.h:75
&gt; &gt; +    // later time. Before the compositing pass happens, WebContentLayers will be
&gt; 
&gt; Can you more strongly say &quot;Before composite() returns, WebContentsLayers will be...&quot;?

Done. I mentioned that it&apos;s that way in the single thread case. In the out-of-thread compositing case, it&apos;s not.
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeViewClient.h:40
&gt; &gt; +    // Applies a scroll delta to the root layer. This is trigerred by events
&gt; 
&gt; nit: trigerred

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebLayerTreeViewClient.h:50
&gt; &gt; +    virtual void didRecreateGraphicsContext(bool success) = 0;
&gt; 
&gt; in the comments you say &quot;rebinding&quot;, but in the method name you use the term &quot;recreate&quot;
&gt; are those supposed to mean the same thing?  should they perhaps use the same word?

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:32
&gt; &gt; +#include &quot;third_party/skia/include/utils/SkMatrix44.h&quot;
&gt; 
&gt; you should be able to just #include &lt;SkMatrix44.h&gt; here.  see WebImage.h for reference.

Well, in the SkBitmap case, it&apos;s coming from skia/include/core, which is a dependent setting exported from skia/skia.gyp.
However, SkMatrix44 is in skia/include/utils, which is not. I explicitly added it to WebKit.gyp. If we want to, we could add it to skia/skia.gyp and then clean this after it rolls (but that&apos;d add a useless include path to ~8000 .cc files in chrome and WebCore, which I don&apos;t think is desirable).

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:51
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt; 
&gt; nit: we usually make the WEBKIT_IMPLEMENTATION section be the very last bit
&gt; of the &quot;public:&quot; section.
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebTransformationMatrix.h:69
&gt; &gt; +    double m_data[4][4];
&gt; 
&gt; had you considered just implementing this class as a SkMatrix44?  maybe it should
&gt; even just extend from SkMatrix44?

I axed that class, passing SkMatrix44 to WebLayer directly. Simpler, and fewer copies to get the data through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479537</commentid>
    <comment_count>18</comment_count>
      <attachid>110039</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-06 15:09:41 -0700</bug_when>
    <thetext>Created attachment 110039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479753</commentid>
    <comment_count>19</comment_count>
      <attachid>110039</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 20:00:29 -0700</bug_when>
    <thetext>Comment on attachment 110039
Patch

Clearing flags on attachment: 110039

Committed r96896: &lt;http://trac.webkit.org/changeset/96896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479754</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 20:00:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479782</commentid>
    <comment_count>21</comment_count>
      <attachid>110089</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-06 21:23:20 -0700</bug_when>
    <thetext>Created attachment 110089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479783</commentid>
    <comment_count>22</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-06 21:28:09 -0700</bug_when>
    <thetext>New patch up, should fix issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479820</commentid>
    <comment_count>23</comment_count>
      <attachid>110089</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-06 23:28:18 -0700</bug_when>
    <thetext>Comment on attachment 110089
Patch

Ugh, that warning :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479833</commentid>
    <comment_count>24</comment_count>
      <attachid>110089</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 23:49:02 -0700</bug_when>
    <thetext>Comment on attachment 110089
Patch

Clearing flags on attachment: 110089

Committed r96909: &lt;http://trac.webkit.org/changeset/96909&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479834</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-06 23:49:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480172</commentid>
    <comment_count>26</comment_count>
      <attachid>110185</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-07 11:43:52 -0700</bug_when>
    <thetext>Created attachment 110185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480174</commentid>
    <comment_count>27</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-10-07 11:44:19 -0700</bug_when>
    <thetext>Gah, hopefully they&apos;re all fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480379</commentid>
    <comment_count>28</comment_count>
      <attachid>110185</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 16:37:49 -0700</bug_when>
    <thetext>Comment on attachment 110185
Patch

Clearing flags on attachment: 110185

Committed r96990: &lt;http://trac.webkit.org/changeset/96990&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480380</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 16:37:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109216</attachid>
            <date>2011-09-29 16:30:59 -0700</date>
            <delta_ts>2011-09-30 16:16:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20110929163058.patch</filename>
            <type>text/plain</type>
            <size>68732</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Y2U4ZGQzYjhiNGVlYmZl
MDNhZDExOThiMWUyMDQ5NDY4ZjY1MzVhLi4zZTllMDQ4Zjk1MDZlYzFjMTY2MzM4N2Q5NTRkZmQz
YTVlNDZlMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMjkgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTA5LTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93
LXVwIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzEwMTkxMjQzPiBHbHlwaCB2YXJpYW50cyAobGlu
ZSBmaW5hbCBzd2FzaGVzKSBhcHBlYXIgd2hlcmUgdGhleSBzaG91bGQgbm90CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAppbmRleCBhMjFiYzY4MDhmODhjZjQ5N2E5YjdiYTM2NmUxNzFl
OTNmODk2ZTZkLi5iODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUxLDkgKzUxLDEwIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCi1wcml2YXRlOgor
cHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJEZWxl
Z2F0ZSopOwogCitwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggYzZmZmZhMGFkOTZhOWQxMTE0MzA2NTFkOTQzOTZhZjVlYjE4
ZWM1Yy4uMjg1NzJhNDM3NTlkYTBhMGMxZGEzZjBkODRjMjA1MTVlZTg5YTQ4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzYgQEAKKzIwMTEtMDktMjkgIEFudG9pbmUg
TGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9yIGNv
bXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21wb3NpdG9yUGxhdGZvcm1TdXBw
b3J0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21wb3NpdG9yUGxhdGZvcm1TdXBw
b3J0Ojp+V2ViQ29tcG9zaXRvclBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogcHVibGljL1dl
YkNvbnRlbnRMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
OjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6On5X
ZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJh
dG9yPSk6CisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllckRlbGVnYXRlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6fldlYkNvbnRlbnRM
YXllckRlbGVnYXRlKToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyOjp+V2ViTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXI6OnRvQ29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dW53cmFwKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXI6OmNvbnN0VW53cmFwKToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJMYXllckRlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckRl
bGVnYXRlOjp+V2ViTGF5ZXJEZWxlZ2F0ZSk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJl
ZUhvc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JTZXR0aW5nczo6
V2ViQ29tcG9zaXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9z
dDo6V2ViTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6
On5XZWJMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJL
aXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRyZWVIb3N0RGVsZWdh
dGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZTo6
fldlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZSk6CisgICAgICAgICogcHVibGljL1dlYlRyYW5zZm9y
bWF0aW9uTWF0cml4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIGdm
eDo6VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRN
YXRyaXgpOgorICAgICAgICAqIHNyYy9DQ1RocmVhZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpDQ1RocmVhZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNDVGhyZWFkSW1wbDo6
Y3JlYXRlRnJvbVdlYlRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OkNDVGhyZWFkSW1wbDo6Q0NU
aHJlYWRJbXBsKToKKyAgICAgICAgKiBzcmMvQ0NUaHJlYWRJbXBsLmg6CisgICAgICAgICogc3Jj
L1dlYkNvbXBvc2l0b3JQbGF0Zm9ybVN1cHBvcnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6aW5pdGlhbGl6ZUNvbXBvc2l0b3JQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAoV2ViS2l0
OjpzaHV0ZG93bkNvbXBvc2l0b3JQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9XZWJD
b250ZW50TGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OnNldE5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6ZGlydHlSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bT4pOgorICAgICAgICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRlbnRMYXllckltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVudExheWVySW1wbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OmRyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQpOgorICAgICAg
ICAqIHNyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJM
YXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjplcXVhbHMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphZGRDaGlsZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cmVtb3Zl
RnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVBbGxDaGlsZHJl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6YW5jaG9y
UG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEJvdW5kcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrc1RvQm91
bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE1hc2tMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFjaXR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0UG9zaXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0b3IgUGFz
c1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJ
bXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OnBhaW50
Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1
aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBz
cmMvV2ViTGF5ZXJUcmVlSG9zdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
b3NpdG9yU2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVI
b3N0OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6OmFzc2lnbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6OmVxdWFscyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlSG9zdDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9z
dDo6V2ViTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0Pik6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJl
ZUhvc3RJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3RJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0SW1wbDo6V2Vi
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0SW1w
bDo6fldlYkxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVIb3N0SW1wbDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdEltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdEltcGw6OnNjaGVkdWxlQ29t
cG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuaDogQWRkZWQuCisK
IDIwMTEtMDktMjkgIElhaW4gTWVycmljayAgPGh1c2t5QGdvb2dsZS5jb20+CiAKICAgICAgICAg
QWRkIHVuaXQgdGVzdCBmb3IgQ0NMYXllclNvcnRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDhjNDkxMjk1MjEzY2ZjODdjOWRjZTMzZTQ2ZWMwZjg5YzMzNjU5NzguLmZhMmM2YTM1
MmE0NDJkM2E3ODMzYjY3ODRhZDcwNTc4ODhhMDM5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTEyOCw2ICsxMjgsOCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29t
bW9uV29ya2VyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRp
b25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb25zb2xlTWVzc2Fn
ZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRlbnRMYXllci5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkNvbnRlbnRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQ29va2llLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29va2llSmFy
LmgnLApAQCAtMjE0LDYgKzIxNiwxMCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGFiZWxFbGVtZW50LmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViTGF5ZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXll
ckRlbGVnYXRlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXJUcmVlSG9zdC5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkxvY2FsaXplZFN0cmluZy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYk1lZGlhRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYk1lZGlhUGxheWVyLmgnLApAQCAtNDQ1LDYgKzQ1MSw5IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29sb3IuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ29udGVudExheWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ3Vyc29ySW5mby5jcHAnLApAQCAtNTI5LDYgKzUzOCwxMiBA
QAogICAgICAgICAgICAgICAgICdzcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJLaXQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkxh
YmVsRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXIuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYkxheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdz
cmMvV2ViTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlSG9z
dC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyVHJlZUhvc3RJbXBsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViTWVkaWFFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ29udGVudExheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMwMDM4ZGY3ZDQ4MThkZDc0ZmVmNzkx
MmE1NTg1ODdmNmY0NTcwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNv
bnRlbnRMYXllcl9oCisjZGVmaW5lIFdlYkNvbnRlbnRMYXllcl9oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIENvbnRlbnRMYXllckNocm9taXVtOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViQ29udGVudExheWVyRGVsZWdhdGU7CitjbGFzcyBXZWJGbG9hdFJlY3Q7CitjbGFzcyBXZWJM
YXllckRlbGVnYXRlOworCitjbGFzcyBXZWJDb250ZW50TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyRGVs
ZWdhdGUqLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSopOworICAgIFdlYkNvbnRlbnRMYXllcigp
IHsgfQorICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXZWJDb250ZW50TGF5ZXImIGwpIDogV2Vi
TGF5ZXIobCkgeyB9CisgICAgfldlYkNvbnRlbnRMYXllcigpIHsgfQorICAgIFdlYkNvbnRlbnRM
YXllciYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvbnRlbnRMYXllciYgbCkKKyAgICB7CisgICAgICAg
IFdlYkxheWVyOjphc3NpZ24obCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkZsb2F0UmVjdCYg
ZGlydHlSZWN0KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgZGlydHlSZWN0KCk7CisKKyNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KKyAgICBXZWJDb250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtPiYpOworICAgIFdlYkNvbnRlbnRMYXllciYg
b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q29udGVudExh
eWVyQ2hyb21pdW0+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckRlbGVnYXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVmZjZlMGMxMGUyMGI2NmY3NjMxMWY0NzA5MTQ5YjYxZTI2Y2U5YjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0
ZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlX2gKKyNk
ZWZpbmUgV2ViQ29udGVudExheWVyRGVsZWdhdGVfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUmVjdDsKKworY2xhc3MgV2ViQ29udGVu
dExheWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ2FudmFzKiwg
Y29uc3QgV2ViUmVjdCYgY2xpcCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2Vi
Q29udGVudExheWVyRGVsZWdhdGUoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyRGVsZWdhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE1YTA2ZTMwZDQ2MGU0ZWVmZDFkMDY2
MzlhM2IyZmFhZTlmZjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
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
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyX2gK
KyNkZWZpbmUgV2ViTGF5ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAi
V2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIExheWVyQ2hyb21p
dW07IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJGbG9hdFBvaW50OworY2xhc3Mg
V2ViTGF5ZXJEZWxlZ2F0ZTsKK2NsYXNzIFdlYlNpemU7CitjbGFzcyBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKKworY2xhc3MgV2ViTGF5ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJMYXll
ciBjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSopOworICAgIFdlYkxheWVyKCkgeyB9CisgICAgV2Vi
TGF5ZXIoY29uc3QgV2ViTGF5ZXImIG4pIHsgYXNzaWduKG4pOyB9CisgICAgfldlYkxheWVyKCkg
eyByZXNldCgpOyB9CisgICAgV2ViTGF5ZXImIG9wZXJhdG9yPShjb25zdCBXZWJMYXllciYgbikK
KyAgICB7CisgICAgICAgIGFzc2lnbihuKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YXNzaWduKGNvbnN0IFdlYkxheWVyJik7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhj
b25zdCBXZWJMYXllciYpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciByb290
TGF5ZXIoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkxheWVyIHBhcmVudCgpIGNvbnN0
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGRDaGlsZChjb25zdCBXZWJMYXllciYpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBpbnNlcnRDaGlsZChjb25zdCBXZWJMYXllciYsIHNpemVfdCBp
bmRleCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlcGxhY2VDaGlsZChjb25zdCBXZWJMYXll
ciYgcmVmZXJlbmNlLCBjb25zdCBXZWJMYXllciYgbmV3TGF5ZXIpOworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlbW92
ZUFsbENoaWxkcmVuKCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgV2ViRmxvYXRQb2ludCYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRQb2ludCBh
bmNob3JQb2ludCgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBv
aW50WihmbG9hdCk7CisgICAgV0VCS0lUX0VYUE9SVCBmbG9hdCBhbmNob3JQb2ludFooKSBjb25z
dDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYpOwor
ICAgIFdFQktJVF9FWFBPUlQgV2ViU2l6ZSBib3VuZHMoKSBjb25zdDsKKworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9v
bCBtYXNrc1RvQm91bmRzKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TWFz
a0xheWVyKGNvbnN0IFdlYkxheWVyJik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciBtYXNr
TGF5ZXIoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRPcGFjaXR5KGZsb2F0
KTsKKyAgICBXRUJLSVRfRVhQT1JUIGZsb2F0IG9wYWNpdHkoKSBjb25zdDsKKworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIG9w
YXF1ZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IFdlYkZsb2F0UG9pbnQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UG9pbnQgcG9zaXRp
b24oKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9y
bShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIFdFQktJVF9FWFBPUlQgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCB0bygpCisgICAgeworICAg
ICAgICBUIHJlczsKKyAgICAgICAgcmVzLldlYkxheWVyOjphc3NpZ24oKnRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQg
dG9Db25zdCgpIGNvbnN0CisgICAgeworICAgICAgICBUIHJlczsKKyAgICAgICAgcmVzLldlYkxh
eWVyOjphc3NpZ24oKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkxheWVyKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpMYXllckNocm9taXVtPiYpOworICAgIFdlYkxheWVyJiBvcGVyYXRvcj0oY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+Jik7CisgICAgb3BlcmF0b3Ig
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+KCkgY29uc3Q7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCogdW53cmFwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4obV9wcml2YXRlLmdldCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdCBUKiBjb25zdFVud3JhcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgfQorI2VuZGlm
CisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+
IG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViTGF5ZXIm
IGEsIGNvbnN0IFdlYkxheWVyJiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhiKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJMYXllciYgYSwgY29uc3QgV2ViTGF5ZXIm
IGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJMYXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJMYXllckRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJMYXllckRlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThjN2UzYWVjOTY1Y2Q5ZjBiOWE0
ZjRhYjRlMmM2ZTRkMzRjYTMxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkxheWVyRGVsZWdhdGUuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJMYXllckRlbGVnYXRlX2gKKyNkZWZpbmUgV2ViTGF5ZXJEZWxlZ2F0ZV9oCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5TmVlZHNDb21taXQoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5XZWJMYXllckRlbGVnYXRlKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFdlYkxheWVyRGVsZWdhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0YzQ3NjliMDJjNzYw
OTc5OWVkNmQ3YmU3YmVhZWVmNWJmNjViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
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
aWZuZGVmIFdlYkxheWVyVHJlZUhvc3RfaAorI2RlZmluZSBXZWJMYXllclRyZWVIb3N0X2gKKwor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NTZXR0aW5n
czsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdlYkxh
eWVyVHJlZUhvc3REZWxlZ2F0ZTsKK2NsYXNzIFdlYlNpemU7CisKK3N0cnVjdCBXZWJDb21wb3Np
dG9yU2V0dGluZ3MgeworICAgIFdlYkNvbXBvc2l0b3JTZXR0aW5ncygpCisgICAgICAgICAgICA6
IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKKyAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2Ny
ZWVuKGZhbHNlKQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKSB7
IH0KKworICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOworICAgIGJvb2wgY29tcG9zaXRlT2Zm
c2NyZWVuOworICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICBvcGVyYXRvciBXZWJDb3JlOjpDQ1NldHRpbmdzKCkgY29uc3Q7Cisj
ZW5kaWYKK307CisKK2NsYXNzIFdlYkxheWVyVHJlZUhvc3QgeworcHVibGljOgorICAgIHN0YXRp
YyBXZWJMYXllclRyZWVIb3N0IGNyZWF0ZShXZWJMYXllclRyZWVIb3N0RGVsZWdhdGUqLCBjb25z
dCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViQ29tcG9zaXRvclNldHRpbmdzJik7CisgICAgV2Vi
TGF5ZXJUcmVlSG9zdCgpIHsgfQorICAgIFdlYkxheWVyVHJlZUhvc3QoY29uc3QgV2ViTGF5ZXJU
cmVlSG9zdCYgbikgeyBhc3NpZ24obik7IH0KKyAgICB+V2ViTGF5ZXJUcmVlSG9zdCgpIHsgcmVz
ZXQoKTsgfQorICAgIFdlYkxheWVyVHJlZUhvc3QmIG9wZXJhdG9yPShjb25zdCBXZWJMYXllclRy
ZWVIb3N0JiBuKQorICAgIHsKKyAgICAgICAgYXNzaWduKG4pOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlSG9zdCYpOworICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlSG9zdCYpIGNvbnN0OworCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGNvbXBvc2l0ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRWaWV3cG9ydChjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpOworICAgIFdFQktJVF9FWFBP
UlQgV2ViU2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYkxheWVyVHJlZUhvc3QoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdD4mKTsKKyAgICBXZWJMYXllclRyZWVIb3N0JiBvcGVyYXRvcj0oY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4mKTsKKyAgICBvcGVy
YXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0Owor
I2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdD4gbV9wcml2YXRlOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBX
ZWJMYXllclRyZWVIb3N0JiBhLCBjb25zdCBXZWJMYXllclRyZWVIb3N0JiBiKQoreworICAgIHJl
dHVybiBhLmVxdWFscyhiKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJM
YXllclRyZWVIb3N0JiBhLCBjb25zdCBXZWJMYXllclRyZWVIb3N0JiBiKQoreworICAgIHJldHVy
biAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2Vi
TGF5ZXJUcmVlSG9zdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJMYXllclRyZWVIb3N0RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3M2MzODg3ZWVkYjY1
NzcwMTg3NTU4OGJiYjI3ZGY4NjY1N2RiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVIb3N0RGVsZWdhdGUuaApAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJMYXllclRyZWVIb3N0RGVsZWdhdGVfaAorI2RlZmluZSBXZWJMYXll
clRyZWVIb3N0RGVsZWdhdGVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgV2ViVGhyZWFkOworCitjbGFzcyBXZWJMYXllclRyZWVIb3N0
RGVsZWdhdGUgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworICAgIHZpcnR1YWwgV2ViVGhyZWFkKiBjcmVhdGVD
b21wb3NpdG9yVGhyZWFkKCkgPSAwOworICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNyZWF0ZUNvbnRleHQzRCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVl
SG9zdERlbGVnYXRlKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
OWM4NzNjYjMzZjRiZWMwYTdmODEyZmIxYWUxM2ZjNzQ5ZDRiOTFjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgu
aApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhfaAorI2Rl
ZmluZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeF9oCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2Vsc2UKKyNpbmNsdWRlIDx1
aS9nZngvdHJhbnNmb3JtLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHsKK3B1YmxpYzoKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkb3VibGUgbTExLCBkb3VibGUgbTEyLCBkb3VibGUgbTEzLCBkb3VibGUgbTE0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtMjEsIGRvdWJsZSBtMjIsIGRvdWJs
ZSBtMjMsIGRvdWJsZSBtMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG0z
MSwgZG91YmxlIG0zMiwgZG91YmxlIG0zMywgZG91YmxlIG0zNCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgbTQxLCBkb3VibGUgbTQyLCBkb3VibGUgbTQzLCBkb3VibGUgbTQ0
KSB7CisgICAgICAgIHNldE1hdHJpeChtMTEsIG0xMiwgbTEzLCBtMTQsIG0yMSwgbTIyLCBtMjMs
IG0yNCwgbTMxLCBtMzIsIG0zMywgbTM0LCBtNDEsIG00MiwgbTQzLCBtNDQpOworICAgIH0KKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dCkgeyBhc3NpZ24odCk7IH0KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3BlcmF0b3I9
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQorICAgIHsKKyAgICAgICAgYXNzaWdu
KHQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgodC5tMTEoKSwgdC5t
MTIoKSwgdC5tMTMoKSwgdC5tMTQoKSwKKyAgICAgICAgICAgICAgICAgIHQubTIxKCksIHQubTIy
KCksIHQubTIzKCksIHQubTI0KCksCisgICAgICAgICAgICAgICAgICB0Lm0zMSgpLCB0Lm0zMigp
LCB0Lm0zMygpLCB0Lm0zNCgpLAorICAgICAgICAgICAgICAgICAgdC5tNDEoKSwgdC5tNDIoKSwg
dC5tNDMoKSwgdC5tNDQoKSk7CisgICAgfQorCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKKyAgICB7
CisgICAgICAgIHNldE1hdHJpeCh0Lm0xMSgpLCB0Lm0xMigpLCB0Lm0xMygpLCB0Lm0xNCgpLAor
ICAgICAgICAgICAgICAgICAgdC5tMjEoKSwgdC5tMjIoKSwgdC5tMjMoKSwgdC5tMjQoKSwKKyAg
ICAgICAgICAgICAgICAgIHQubTMxKCksIHQubTMyKCksIHQubTMzKCksIHQubTM0KCksCisgICAg
ICAgICAgICAgICAgICB0Lm00MSgpLCB0Lm00MigpLCB0Lm00MygpLCB0Lm00NCgpKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeChtX2RhdGFbMF1bMF0sIG1fZGF0YVswXVsxXSwgbV9kYXRhWzBdWzJd
LCBtX2RhdGFbMF1bM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2RhdGFbMV1bMF0sIG1fZGF0YVsxXVsxXSwgbV9kYXRhWzFdWzJdLCBtX2RhdGFbMV1b
M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFb
Ml1bMF0sIG1fZGF0YVsyXVsxXSwgbV9kYXRhWzJdWzJdLCBtX2RhdGFbMl1bM10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFbM11bMF0sIG1fZGF0
YVszXVsxXSwgbV9kYXRhWzNdWzJdLCBtX2RhdGFbM11bM10pOworICAgIH0KKyNlbHNlCisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgZ2Z4OjpUcmFuc2Zvcm0mIHQpCisgICAgewor
ICAgICAgICBzZXRNYXRyaXgodC5tYXRyaXgoKSk7CisgICAgfQorCisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG9wZXJhdG9yPShjb25zdCBnZng6OlRyYW5zZm9ybSYgdCkKKyAgICB7Cisg
ICAgICAgIHNldE1hdHJpeCh0Lm1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIG9wZXJhdG9yIGdmeDo6VHJhbnNmb3JtKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGdmeDo6VHJhbnNmb3JtIHQ7CisgICAgICAgIFNrTWF0cml4NDQmIG1hdHJpeCA9IHQubWF0cml4
KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCA0OyArK2opCisgICAgICAgICAgICAgICAgbWF0cml4LnNldChpLCBq
LCBTa0RvdWJsZVRvTVNjYWxhcihtX2RhdGFbaV1bal0pKTsKKyAgICAgICAgcmV0dXJuIHQ7Cisg
ICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgodC5tX2RhdGFbMF1b
MF0sIHQubV9kYXRhWzBdWzFdLCB0Lm1fZGF0YVswXVsyXSwgdC5tX2RhdGFbMF1bM10sCisgICAg
ICAgICAgICAgICAgICB0Lm1fZGF0YVsxXVswXSwgdC5tX2RhdGFbMV1bMV0sIHQubV9kYXRhWzFd
WzJdLCB0Lm1fZGF0YVsxXVszXSwKKyAgICAgICAgICAgICAgICAgIHQubV9kYXRhWzJdWzBdLCB0
Lm1fZGF0YVsyXVsxXSwgdC5tX2RhdGFbMl1bMl0sIHQubV9kYXRhWzJdWzNdLAorICAgICAgICAg
ICAgICAgICAgdC5tX2RhdGFbM11bMF0sIHQubV9kYXRhWzNdWzFdLCB0Lm1fZGF0YVszXVsyXSwg
dC5tX2RhdGFbM11bM10pOworICAgIH0KKworICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBtMTEs
IGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRvdWJsZSBtMTQsCisgICAgICAgICAgICAgICAgICAg
ZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91YmxlIG0yMywgZG91YmxlIG0yNCwKKyAgICAgICAg
ICAgICAgICAgICBkb3VibGUgbTMxLCBkb3VibGUgbTMyLCBkb3VibGUgbTMzLCBkb3VibGUgbTM0
LAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtNDEsIGRvdWJsZSBtNDIsIGRvdWJsZSBtNDMs
IGRvdWJsZSBtNDQpCisgICAgeworICAgICAgICBtX2RhdGFbMF1bMF0gPSBtMTE7CisgICAgICAg
IG1fZGF0YVswXVsxXSA9IG0xMjsKKyAgICAgICAgbV9kYXRhWzBdWzJdID0gbTEzOworICAgICAg
ICBtX2RhdGFbMF1bM10gPSBtMTQ7CisgICAgICAgIG1fZGF0YVsxXVswXSA9IG0yMTsKKyAgICAg
ICAgbV9kYXRhWzFdWzFdID0gbTIyOworICAgICAgICBtX2RhdGFbMV1bMl0gPSBtMjM7CisgICAg
ICAgIG1fZGF0YVsxXVszXSA9IG0yNDsKKyAgICAgICAgbV9kYXRhWzJdWzBdID0gbTMxOworICAg
ICAgICBtX2RhdGFbMl1bMV0gPSBtMzI7CisgICAgICAgIG1fZGF0YVsyXVsyXSA9IG0zMzsKKyAg
ICAgICAgbV9kYXRhWzJdWzNdID0gbTM0OworICAgICAgICBtX2RhdGFbM11bMF0gPSBtNDE7Cisg
ICAgICAgIG1fZGF0YVszXVsxXSA9IG00MjsKKyAgICAgICAgbV9kYXRhWzNdWzJdID0gbTQzOwor
ICAgICAgICBtX2RhdGFbM11bM10gPSBtNDQ7CisgICAgfQorCisjaWYgIVdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4NDQmIG0pCisgICAgewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgNDsgKytqKQorICAgICAgICAgICAgICAgIG1fZGF0YVtpXVtqXSA9IFNrTVNj
YWxhclRvRG91YmxlKG0uZ2V0KGksIGopKTsKKyAgICB9CisjZW5kaWYKKworICAgIGRvdWJsZSBt
X2RhdGFbNF1bNF07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0NDVGhyZWFkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1Ro
cmVhZEltcGwuY3BwCmluZGV4IDYxNmI5NTA0MDBiOTU4YjFhZGYyNWNlMmRmNjMzNDJlNGQ3NzA1
OWMuLjNlYWQyYWQyNGRkZmFiYTczZDU0YWJhMjhkZTA1ODc3MzRjNGQ5NjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhyZWFkSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUaHJlYWRJbXBsLmNwcApAQCAtNzgsNyArNzgsMTMgQEAg
cHJpdmF0ZToKIAogUGFzc093blB0cjxDQ1RocmVhZD4gQ0NUaHJlYWRJbXBsOjpjcmVhdGUoKQog
ewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRJbXBsKCkpOworICAgIE93blB0cjxX
ZWJUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVh
dGVUaHJlYWQoIkNDVGhyZWFkIikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRJ
bXBsKHRocmVhZC5yZWxlYXNlKCkpKTsKK30KKworUGFzc093blB0cjxDQ1RocmVhZD4gQ0NUaHJl
YWRJbXBsOjpjcmVhdGVGcm9tV2ViVGhyZWFkKFBhc3NPd25QdHI8V2ViVGhyZWFkPiB0aHJlYWQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZEltcGwodGhyZWFkKSk7CiB9CiAK
IENDVGhyZWFkSW1wbDo6fkNDVGhyZWFkSW1wbCgpCkBAIC05NSw4ICsxMDEsOCBAQCBUaHJlYWRJ
ZGVudGlmaWVyIENDVGhyZWFkSW1wbDo6dGhyZWFkSUQoKSBjb25zdAogICAgIHJldHVybiBtX3Ro
cmVhZElEOwogfQogCi1DQ1RocmVhZEltcGw6OkNDVGhyZWFkSW1wbCgpCi0gICAgOiBtX3RocmVh
ZChhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlVGhyZWFkKCJDQ1RocmVh
ZCIpKSkKK0NDVGhyZWFkSW1wbDo6Q0NUaHJlYWRJbXBsKFBhc3NPd25QdHI8V2ViVGhyZWFkPiB0
aHJlYWQpCisgICAgOiBtX3RocmVhZCh0aHJlYWQpCiB7CiAgICAgLy8gR2V0IHRoZSB0aHJlYWRJ
ZCBmb3IgdGhlIG5ld2x5LWNyZWF0ZWQgdGhyZWFkIGJ5IHJ1bm5pbmcgYSB0YXNrCiAgICAgLy8g
b24gdGhhdCB0aHJlYWQsIGJsb2NraW5nIG9uIHRoZSByZXN1bHQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1RocmVhZEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0NDVGhyZWFkSW1wbC5oCmluZGV4IDljOTI5YWIxMDljNTNlM2IxNjcyMzI4MTdk
OTk4YThjZmUwYjUyMTUuLjgyZWMwZjZjNTNkN2U3OWNjN2NmNWI3ZjFmYTUxODA5YWRlNGU0YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhyZWFkSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhyZWFkSW1wbC5oCkBAIC0zOCwxMiAr
MzgsMTMgQEAgY2xhc3MgV2ViVGhyZWFkOwogY2xhc3MgQ0NUaHJlYWRJbXBsIDogcHVibGljIFdl
YkNvcmU6OkNDVGhyZWFkIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxXZWJDb3Jl
OjpDQ1RocmVhZD4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NU
aHJlYWQ+IGNyZWF0ZUZyb21XZWJUaHJlYWQoUGFzc093blB0cjxXZWJUaHJlYWQ+KTsKICAgICB2
aXJ0dWFsIH5DQ1RocmVhZEltcGwoKTsKICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8V2Vi
Q29yZTo6Q0NUaHJlYWQ6OlRhc2s+KTsKICAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1RocmVhZEltcGwoKTsKKyAgICBDQ1RocmVh
ZEltcGwoUGFzc093blB0cjxXZWJUaHJlYWQ+KTsKIAogICAgIE93blB0cjxXZWJUaHJlYWQ+IG1f
dGhyZWFkOwogICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMw
MGI0MWE3MGUxNjY5NjhmNmMzMzdmZjliZTkwNGYwZGNiOTljZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIGNvcHlyaWdodCAoYykgMjAxMSBnb29nbGUgaW5jLiBhbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIHJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiByZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBuZWl0aGVyIHRoZSBuYW1lIG9mIGdv
b2dsZSBpbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQg
Y29udHJpYnV0b3JzCisgKiAiYXMgaXMiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJh
bnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdAorICogbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2Fy
cmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCisgKiBhIHBhcnRpY3Vs
YXIgcHVycG9zZSBhcmUgZGlzY2xhaW1lZC4gaW4gbm8gZXZlbnQgc2hhbGwgdGhlIGNvcHlyaWdo
dAorICogb3duZXIgb3IgY29udHJpYnV0b3JzIGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5k
aXJlY3QsIGluY2lkZW50YWwsCisgKiBzcGVjaWFsLCBleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRp
YWwgZGFtYWdlcyAoaW5jbHVkaW5nLCBidXQgbm90CisgKiBsaW1pdGVkIHRvLCBwcm9jdXJlbWVu
dCBvZiBzdWJzdGl0dXRlIGdvb2RzIG9yIHNlcnZpY2VzOyBsb3NzIG9mIHVzZSwKKyAqIGRhdGEs
IG9yIHByb2ZpdHM7IG9yIGJ1c2luZXNzIGludGVycnVwdGlvbikgaG93ZXZlciBjYXVzZWQgYW5k
IG9uIGFueQorICogdGhlb3J5IG9mIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgc3Ry
aWN0IGxpYWJpbGl0eSwgb3IgdG9ydAorICogKGluY2x1ZGluZyBuZWdsaWdlbmNlIG9yIG90aGVy
d2lzZSkgYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlCisgKiBvZiB0aGlzIHNvZnR3
YXJlLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb250ZW50TGF5ZXIuaCIK
KworI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViQ29udGVu
dExheWVySW1wbC5oIgorI2luY2x1ZGUgIldlYkZsb2F0UmVjdC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvbnRlbnRMYXllciBXZWJD
b250ZW50TGF5ZXI6OmNyZWF0ZShXZWJMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViQ29udGVu
dExheWVyRGVsZWdhdGUqIGNvbnRlbnREZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gV2ViQ29udGVu
dExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShkZWxlZ2F0ZSwgY29udGVudERlbGVn
YXRlKSk7Cit9CisKK3ZvaWQgV2ViQ29udGVudExheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQorewor
ICAgIHVud3JhcDxDb250ZW50TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9
CisKK1dlYkZsb2F0UmVjdCBXZWJDb250ZW50TGF5ZXI6OmRpcnR5UmVjdCgpCit7CisgICAgcmV0
dXJuIFdlYkZsb2F0UmVjdCh1bndyYXA8Q29udGVudExheWVyQ2hyb21pdW0+KCktPmRpcnR5UmVj
dCgpKTsKK30KKworV2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1Jl
ZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4mIG5vZGUpCisgICAgOiBXZWJMYXllcihub2RlKQor
eworfQorCitXZWJDb250ZW50TGF5ZXImIFdlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+JiBub2RlKQoreworICAgIG1fcHJpdmF0
ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb250ZW50TGF5ZXI6Om9wZXJh
dG9yIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29udGVudExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUuZ2V0KCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE4MzAyOGRjMTVkMTI0
Y2VkODA4YTdhMTI4MWEwMmExOWJjYWNjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
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
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5j
bHVkZSAiV2ViQ29udGVudExheWVyRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJXZWJMYXllckRlbGVn
YXRlLmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2lmIFdFQktJVF9VU0lOR19TS0lBCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5
ZXJJbXBsPiBXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUsIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKiBjb250ZW50RGVsZWdhdGUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGRlbGVnYXRlLCBjb250ZW50
RGVsZWdhdGUpKTsKK30KKworV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1w
bChXZWJMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViQ29udGVudExheWVyRGVsZWdhdGUqIGNv
bnRlbnREZWxlZ2F0ZSkKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVtKHRoaXMpCisgICAgLCBt
X2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICwgbV9jb250ZW50RGVsZWdhdGUoY29udGVudERlbGVn
YXRlKQoreworfQorCitXZWJDb250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVudExheWVySW1wbCgp
Cit7Cit9CisKK2Jvb2wgV2ViQ29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZW50RGVsZWdhdGUgJiYgbV9jb250ZW50RGVsZWdhdGUtPmRy
YXdzQ29udGVudCgpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVu
dHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAo
IW1fY29udGVudERlbGVnYXRlKQorICAgICAgICByZXR1cm47CisjaWYgV0VCS0lUX1VTSU5HX1NL
SUEKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KTsKKyNlbGlmIFdFQktJVF9VU0lOR19DRworICAgIFdlYkNhbnZhcyogY2FudmFzID0gZ2MucGxh
dGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBtX2NvbnRlbnREZWxlZ2F0ZS0+cGFpbnRDb250
ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcklt
cGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAg
IG1fZGVsZWdhdGUtPm5vdGlmeU5lZWRzQ29tbWl0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAzMThhZjE4NTMwYTkwYjRmOGEwYzUzYjkyYzRmMGMzZTJiNjkxYWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50
TGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29udGVudExheWVySW1wbF9o
CisjZGVmaW5lIFdlYkNvbnRlbnRMYXllckltcGxfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkxheWVyRGVsZWdhdGU7CitjbGFzcyBXZWJDb250ZW50TGF5ZXJEZWxl
Z2F0ZTsKKworY2xhc3MgV2ViQ29udGVudExheWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRlKFdl
YkxheWVyRGVsZWdhdGUqLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogY29udGVudERlbGVnYXRl
KTsKKworcHJvdGVjdGVkOgorICAgIFdlYkNvbnRlbnRMYXllckltcGwoV2ViTGF5ZXJEZWxlZ2F0
ZSosIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKiBjb250ZW50RGVsZWdhdGUpOworICAgIHZpcnR1
YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOworCisgICAgV2ViTGF5ZXJEZWxlZ2F0ZSogbV9kZWxl
Z2F0ZTsKKyAgICBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogbV9jb250ZW50RGVsZWdhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkNvbnRlbnRMYXllcklt
cGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0
ZTMyMjAyNmY2YTE2MWQ0NDg2ZjBjNWZhMTNiNzAwZWZiYmU2NWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKQEAgLTAsMCArMSwyMTcg
QEAKKy8qCisgKiBjb3B5cmlnaHQgKGMpIDIwMTEgZ29vZ2xlIGluYy4gYWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiByZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogcmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogbmVpdGhlciB0aGUgbmFtZSBvZiBnb29nbGUg
aW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogdGhp
cyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kIGNvbnRy
aWJ1dG9ycworICogImFzIGlzIiBhbmQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50aWVz
LCBpbmNsdWRpbmcsIGJ1dCBub3QKKyAqIGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRp
ZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvcgorICogYSBwYXJ0aWN1bGFyIHB1
cnBvc2UgYXJlIGRpc2NsYWltZWQuIGluIG5vIGV2ZW50IHNoYWxsIHRoZSBjb3B5cmlnaHQKKyAq
IG93bmVyIG9yIGNvbnRyaWJ1dG9ycyBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0
LCBpbmNpZGVudGFsLAorICogc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRh
bWFnZXMgKGluY2x1ZGluZywgYnV0IG5vdAorICogbGltaXRlZCB0bywgcHJvY3VyZW1lbnQgb2Yg
c3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsCisgKiBkYXRhLCBvciBw
cm9maXRzOyBvciBidXNpbmVzcyBpbnRlcnJ1cHRpb24pIGhvd2V2ZXIgY2F1c2VkIGFuZCBvbiBh
bnkKKyAqIHRoZW9yeSBvZiBsaWFiaWxpdHksIHdoZXRoZXIgaW4gY29udHJhY3QsIHN0cmljdCBs
aWFiaWxpdHksIG9yIHRvcnQKKyAqIChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBvdGhlcndpc2Up
IGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZQorICogb2YgdGhpcyBzb2Z0d2FyZSwg
ZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKworI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
V2ViTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgIldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckRlbGVnYXRl
KiBkZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGUo
ZGVsZWdhdGUpKTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0
ZS5yZXNldCgpOworfQorCit2b2lkIFdlYkxheWVyOjphc3NpZ24oY29uc3QgV2ViTGF5ZXImIG90
aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKworYm9vbCBXZWJM
YXllcjo6ZXF1YWxzKGNvbnN0IFdlYkxheWVyJiBuKSBjb25zdAoreworICAgIHJldHVybiAobV9w
cml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKK30KKworV2ViTGF5ZXIgV2ViTGF5
ZXI6OnJvb3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyKGNvbnN0X2Nhc3Q8
TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cm9vdExheWVyKCkpKTsKK30KKworV2ViTGF5ZXIg
V2ViTGF5ZXI6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyKGNvbnN0X2Nh
c3Q8TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cGFyZW50KCkpKTsKK30KKwordm9pZCBXZWJM
YXllcjo6YWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxkKQoreworICAgIG1fcHJpdmF0ZS0+
YWRkQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIFdlYkxheWVyOjppbnNlcnRDaGlsZChjb25zdCBX
ZWJMYXllciYgY2hpbGQsIHNpemVfdCBpbmRleCkKK3sKKyAgICBtX3ByaXZhdGUtPmluc2VydENo
aWxkKGNoaWxkLCBpbmRleCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlcGxhY2VDaGlsZChjb25z
dCBXZWJMYXllciYgcmVmZXJlbmNlLCBjb25zdCBXZWJMYXllciYgbmV3TGF5ZXIpCit7CisgICAg
V2ViTGF5ZXIgcmVmID0gcmVmZXJlbmNlOworICAgIG1fcHJpdmF0ZS0+cmVwbGFjZUNoaWxkKHJl
Zi51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSwgbmV3TGF5ZXIpOworfQorCit2b2lkIFdlYkxheWVy
OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUZyb21QYXJlbnQo
KTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQoreworICAgIG1fcHJp
dmF0ZS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0QW5jaG9y
UG9pbnQoY29uc3QgV2ViRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpCit7CisgICAgbV9wcml2YXRl
LT5zZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7Cit9CisKK1dlYkZsb2F0UG9pbnQgV2ViTGF5
ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViRmxvYXRQb2ludChtX3By
aXZhdGUtPmFuY2hvclBvaW50KCkpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRBbmNob3JQb2lu
dFooZmxvYXQgYW5jaG9yUG9pbnRaKQoreworICAgIG1fcHJpdmF0ZS0+c2V0QW5jaG9yUG9pbnRa
KGFuY2hvclBvaW50Wik7Cit9CisKK2Zsb2F0IFdlYkxheWVyOjphbmNob3JQb2ludFooKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFuY2hvclBvaW50WigpOworfQorCit2b2lkIFdl
YkxheWVyOjpzZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvdW5kcyhzaXplKTsKK30KKworV2ViU2l6ZSBXZWJMYXllcjo6Ym91bmRzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPmJvdW5kcygpKTsKK30KKwordm9pZCBX
ZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpCit7CisgICAgbV9w
cml2YXRlLT5zZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMpOworfQorCitib29sIFdlYkxh
eWVyOjptYXNrc1RvQm91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXNr
c1RvQm91bmRzKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE1hc2tMYXllcihjb25zdCBXZWJM
YXllciYgbWFza0xheWVyKQoreworICAgIFdlYkxheWVyIHJlZiA9IG1hc2tMYXllcjsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5zZXRNYXNrTGF5ZXIocmVmLnVud3JhcDxMYXllckNocm9taXVtPigp
KTsKK30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6Om1hc2tMYXllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkxheWVyKG1fcHJpdmF0ZS0+bWFza0xheWVyKCkpOworfQorCit2b2lkIFdlYkxheWVy
OjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgbV9wcml2YXRlLT5zZXRPcGFjaXR5
KG9wYWNpdHkpOworfQorCitmbG9hdCBXZWJMYXllcjo6b3BhY2l0eSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+b3BhY2l0eSgpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRPcGFx
dWUoYm9vbCBvcGFxdWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRPcGFxdWUob3BhcXVlKTsKK30K
KworYm9vbCBXZWJMYXllcjo6b3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5vcGFxdWUoKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgV2ViRmxv
YXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wcml2YXRlLT5zZXRQb3NpdGlvbihwb3NpdGlv
bik7Cit9CisKK1dlYkZsb2F0UG9pbnQgV2ViTGF5ZXI6OnBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV2ViRmxvYXRQb2ludChtX3ByaXZhdGUtPnBvc2l0aW9uKCkpOworfQorCit2b2lk
IFdlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1fcHJpdmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViTGF5ZXI6OnN1Ymxh
eWVyVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgobV9wcml2YXRlLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKK30KKwordm9pZCBXZWJMYXllcjo6
c2V0VHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7
CisgICAgbV9wcml2YXRlLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKK30KKworV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggV2ViTGF5ZXI6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+dHJhbnNmb3JtKCkpOworfQorCitX
ZWJMYXllcjo6V2ViTGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkK
KyAgICA6IG1fcHJpdmF0ZShub2RlKQoreworfQorCitXZWJMYXllciYgV2ViTGF5ZXI6Om9wZXJh
dG9yPShjb25zdCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+JiBub2RlKQoreworICAgIG1fcHJp
dmF0ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJMYXllcjo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjk3ZDBkZDlmNTA3ZWU0ZWIy
MjBjMzM4OGJmNjUwOWZiOWYwMTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViTGF5ZXJE
ZWxlZ2F0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1Bhc3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBXZWJMYXllckltcGw6OmNyZWF0ZShXZWJM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkxh
eWVySW1wbChkZWxlZ2F0ZSkpOworfQorCitXZWJMYXllckltcGw6OldlYkxheWVySW1wbChXZWJM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkgOiBMYXllckNocm9taXVtKHRoaXMpLCBtX2RlbGVnYXRl
KGRlbGVnYXRlKQoreworfQorCitXZWJMYXllckltcGw6On5XZWJMYXllckltcGwoKQoreworfQor
Citib29sIFdlYkxheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApCit7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpu
b3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2Rl
bGVnYXRlLT5ub3RpZnlOZWVkc0NvbW1pdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFk
NjhjODIwODYyNzYwYjc1ZDE3OTRhYzE4NDk2ZWUyNDk0YTA3YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkxheWVySW1wbF9oCisjZGVmaW5lIFdlYkxheWVySW1wbF9oCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllckRlbGVnYXRlOworCitjbGFzcyBXZWJMYXll
ckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkND
TGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTGF5ZXJJ
bXBsPiBjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSopOworCitwcm90ZWN0ZWQ6CisgICAgV2ViTGF5
ZXJJbXBsKFdlYkxheWVyRGVsZWdhdGUqKTsKKyAgICB2aXJ0dWFsIH5XZWJMYXllckltcGwoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOwor
CisgICAgV2ViTGF5ZXJEZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUwYzRlOGQ1N2Q2
ZjQ4N2Q2MDM4NWYyYTQxZmIzYWJmZjE4YzEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3QuY3BwCkBAIC0wLDAgKzEsMTA3IEBA
CisvKgorICogY29weXJpZ2h0IChjKSAyMDExIGdvb2dsZSBpbmMuIGFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogcmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIHJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIG5laXRoZXIgdGhlIG5hbWUgb2YgZ29vZ2xlIGlu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIHRoaXMg
c29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmli
dXRvcnMKKyAqICJhcyBpcyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywg
aW5jbHVkaW5nLCBidXQgbm90CisgKiBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVz
IG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKKyAqIGEgcGFydGljdWxhciBwdXJw
b3NlIGFyZSBkaXNjbGFpbWVkLiBpbiBubyBldmVudCBzaGFsbCB0aGUgY29weXJpZ2h0CisgKiBv
d25lciBvciBjb250cmlidXRvcnMgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwg
aW5jaWRlbnRhbCwKKyAqIHNwZWNpYWwsIGV4ZW1wbGFyeSwgb3IgY29uc2VxdWVudGlhbCBkYW1h
Z2VzIChpbmNsdWRpbmcsIGJ1dCBub3QKKyAqIGxpbWl0ZWQgdG8sIHByb2N1cmVtZW50IG9mIHN1
YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXM7IGxvc3Mgb2YgdXNlLAorICogZGF0YSwgb3IgcHJv
Zml0czsgb3IgYnVzaW5lc3MgaW50ZXJydXB0aW9uKSBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55
CisgKiB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QgbGlh
YmlsaXR5LCBvciB0b3J0CisgKiAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3aXNlKSBh
cmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2UKKyAqIG9mIHRoaXMgc29mdHdhcmUsIGV2
ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUhvc3QuaCIKKworI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJDb21wb3NpdG9yU2V0dGluZ3M6Om9wZXJhdG9yIEND
U2V0dGluZ3MoKSBjb25zdAoreworICAgIENDU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxlcmF0ZVBhaW50aW5nOworICAgIHNldHRpbmdz
LmNvbXBvc2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0ZU9mZnNjcmVlbjsKKyAgICBzZXR0aW5ncy5l
bmFibGVDb21wb3NpdG9yVGhyZWFkID0gZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKworICAgIC8v
IHNob3dGUFNDb3VudGVyIC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIGFyZW4ndCBzdXBwb3J0ZWQg
Y3VycmVudGx5LgorICAgIHNldHRpbmdzLnNob3dGUFNDb3VudGVyID0gZmFsc2U7CisgICAgc2V0
dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZmFsc2U7CisgICAgcmV0dXJuIHNldHRpbmdz
OworfQorCitXZWJMYXllclRyZWVIb3N0IFdlYkxheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJMYXll
clRyZWVIb3N0RGVsZWdhdGUqIGRlbGVnYXRlLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3Qg
V2ViQ29tcG9zaXRvclNldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXJU
cmVlSG9zdChXZWJMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGRlbGVnYXRlLCByb290LCBzZXR0
aW5ncykpOworfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3Q6OnJlc2V0KCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVIb3N0Ojphc3NpZ24oY29uc3Qg
V2ViTGF5ZXJUcmVlSG9zdCYgb3RoZXIpCit7CisgICAgbV9wcml2YXRlID0gb3RoZXIubV9wcml2
YXRlOworfQorCitib29sIFdlYkxheWVyVHJlZUhvc3Q6OmVxdWFscyhjb25zdCBXZWJMYXllclRy
ZWVIb3N0JiBuKSBjb25zdAoreworICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpID09IG4ubV9w
cml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoKQor
eworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcml2YXRlLT5jb21wb3Np
dGUoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNv
bnN0IFdlYlNpemUmIHZpZXdwb3J0U2l6ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFZpZXdwb3J0
KHZpZXdwb3J0U2l6ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5ZXJUcmVlSG9zdDo6dmlld3BvcnRT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPnZpZXdwb3J0U2l6
ZSgpKTsKK30KKworV2ViTGF5ZXJUcmVlSG9zdDo6V2ViTGF5ZXJUcmVlSG9zdChjb25zdCBQYXNz
UmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCisgICAgOiBtX3ByaXZhdGUobm9kZSkKK3sK
K30KKworV2ViTGF5ZXJUcmVlSG9zdCYgV2ViTGF5ZXJUcmVlSG9zdDo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBu
b2RlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTGF5ZXJUcmVlSG9zdDo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3RJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZTE3NTk3M2U4NGE3NTk5ODc0YTQ1YjcxYzg2NWQwNzViYzNiZjZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJl
ZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJDQ1RocmVhZEltcGwuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5j
bHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJMYXllci5oIgorI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVIb3N0RGVs
ZWdhdGUuaCIKKyNpbmNsdWRlICJXZWJUaHJlYWQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkxheWVyVHJlZUhvc3RJ
bXBsPiBXZWJMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0
ZSogZGVsZWdhdGUsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0
dGluZ3MmIHNldHRpbmdzKQoreworICAgIFJlZlB0cjxXZWJMYXllclRyZWVIb3N0SW1wbD4gaG9z
dCA9IGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVIb3N0SW1wbChkZWxlZ2F0ZSwgcm9vdCwgc2V0
dGluZ3MpKTsKKyAgICBpZiAoIWhvc3QtPmluaXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGhvc3Q7Cit9CisKK1dlYkxheWVyVHJlZUhvc3RJbXBsOjpXZWJMYXllclRy
ZWVIb3N0SW1wbChXZWJMYXllclRyZWVIb3N0RGVsZWdhdGUqIGRlbGVnYXRlLCBjb25zdCBXZWJM
YXllciYgcm9vdCwgY29uc3QgV2ViQ29tcG9zaXRvclNldHRpbmdzJiBzZXR0aW5ncykgCisgICAg
OiBDQ0xheWVyVHJlZUhvc3QodGhpcywgcm9vdCwgc2V0dGluZ3MpCisgICAgLCBtX2RlbGVnYXRl
KGRlbGVnYXRlKQoreworfQorCitXZWJMYXllclRyZWVIb3N0SW1wbDo6fldlYkxheWVyVHJlZUhv
c3RJbXBsKCkKK3sKK30KKwordm9pZCBXZWJMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUFuZExh
eW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAg
ICAgIG1fZGVsZWdhdGUtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworfQorCitQ
YXNzT3duUHRyPENDVGhyZWFkPiBXZWJMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlQ29tcG9zaXRv
clRocmVhZCgpCit7CisgICAgaWYgKCFtX2RlbGVnYXRlKQorICAgICAgICByZXR1cm4gUGFzc093
blB0cjxDQ1RocmVhZD4oKTsKKyAgICBPd25QdHI8V2ViVGhyZWFkPiB3ZWJUaHJlYWQgPSBhZG9w
dFB0cihtX2RlbGVnYXRlLT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkpOworICAgIGlmICghd2Vi
VGhyZWFkKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxDQ1RocmVhZD4oKTsKKyAgICByZXR1
cm4gQ0NUaHJlYWRJbXBsOjpjcmVhdGVGcm9tV2ViVGhyZWFkKHdlYlRocmVhZC5yZWxlYXNlKCkp
OworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJMYXllclRyZWVIb3N0SW1w
bDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCit7CisgICAgaWYgKCFtX2RlbGVnYXRl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdl
YkNvbnRleHQgPSBhZG9wdFB0cihtX2RlbGVnYXRlLT5jcmVhdGVDb250ZXh0M0QoKSk7CisgICAg
aWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSB3ZWJDb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXM7CisgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0
cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CisgICAgYXR0cmlidXRlcy5zdGVu
Y2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0g
d2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CisgICAgYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxw
aGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmNh
blJlY292ZXJGcm9tQ29udGV4dExvc3MgPSB3ZWJBdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29u
dGV4dExvc3M7CisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB3ZWJBdHRyaWJ1dGVzLm5v
RXh0ZW5zaW9uczsKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gd2ViQXR0cmlidXRl
cy5zaGFyZVJlc291cmNlczsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9
IGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHN0eWxlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OworICAgIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6VGhyZWFkVXNhZ2UgdXNhZ2UgPSBzZXR0aW5ncygpLmVuYWJsZUNv
bXBvc2l0b3JUaHJlYWQgPyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhl
clRocmVhZCA6IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkOwor
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRyaWJ1dGVzLCAwLCBzdHls
ZSwgdXNhZ2UpOworfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3RJbXBsOjpkaWRSZWNyZWF0ZUdy
YXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAg
ICAgIG1fZGVsZWdhdGUtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOworfQor
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViTGF5ZXJUcmVlSG9zdElt
cGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAg
bV9kZWxlZ2F0ZS0+c2NoZWR1bGVDb21wb3NpdGUoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRy
ZWVIb3N0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmZjc1NzBhMWM4MTkyNmRkNDRmODUwNTBkYTQ2MGJh
ZDc3OTYxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
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
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJl
ZUhvc3RJbXBsX2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlSG9zdEltcGxfaAorCisjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb21wb3NpdG9yU2V0dGluZ3M7CitjbGFzcyBXZWJM
YXllcjsKK2NsYXNzIFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZTsKKworY2xhc3MgV2ViTGF5ZXJU
cmVlSG9zdEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0LCBwdWJsaWMgV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0
ZSosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MmKTsK
KworcHJpdmF0ZToKKyAgICBXZWJMYXllclRyZWVIb3N0SW1wbChXZWJMYXllclRyZWVIb3N0RGVs
ZWdhdGUqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViQ29tcG9zaXRvclNldHRpbmdz
Jik7CisgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdy
YXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKKworICAg
IFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlSG9zdEltcGxfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109368</attachid>
            <date>2011-09-30 16:16:51 -0700</date>
            <delta_ts>2011-10-04 17:07:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20110930161650.patch</filename>
            <type>text/plain</type>
            <size>66544</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0MjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MTRlZDA3NDViY2Q5NDM2
NzZiMTI3ZDhhNWEwOGU4OTc2NTJhZGE3Li5kYjVjMWUyOGVjYjNiMzA0NjgzNWNmODg5YjM5Mzgy
NGE0NjljNzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMjkgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTA5LTMwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzEwMjA4MjkxPiBmaXJzdC1sZXR0ZXIgaW4gZ2VuZXJhdGVkIGJlZm9yZSBjb250
ZW50IHdpdGggZGlzcGxheTogdGFibGUgaXMgbm90IHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oCmluZGV4IGEyMWJjNjgwOGY4OGNmNDk3YTliN2JhMzY2ZTE3MWU5M2Y4OTZl
NmQuLmI4MzRlNjc2YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTEsOSArNTEsMTAgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKLXByaXZhdGU6Citwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7
CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA2MDVmODMzMzRjYjQ0YjJhMjc4NmQ1YjA2OTFiMTE3MDBjMjExNDQ3Li5i
ZjYwNDcyODRjZDRjYzM0NWMwMjIxOWNmZmZiNTI1NDE2MWQ3MWZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAxMS0wOS0yOSAgQW50b2luZSBMYWJvdXIg
IDxwaW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2Via2l0IEFQSSBmb3IgY29tcG9zaXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXA6CisgICAgICAgICogcHVibGljL1dlYkNvbXBvc2l0b3JQbGF0Zm9ybVN1cHBvcnQuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JQbGF0Zm9ybVN1cHBvcnQ6On5X
ZWJDb21wb3NpdG9yUGxhdGZvcm1TdXBwb3J0KToKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVu
dExheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OldlYkNv
bnRlbnRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6fldlYkNvbnRl
bnRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3I9KToK
KyAgICAgICAgKiBwdWJsaWMvV2ViQ29udGVudExheWVyRGVsZWdhdGUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckRlbGVnYXRlOjp+V2ViQ29udGVudExheWVyRGVs
ZWdhdGUpOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXI6OldlYkxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6On5X
ZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllcjo6dG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG9D
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjp1bndyYXApOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllcjo6Y29uc3RVbndyYXApOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkxh
eWVyRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyRGVsZWdhdGU6
On5XZWJMYXllckRlbGVnYXRlKToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXJUcmVlSG9zdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvclNldHRpbmdzOjpXZWJDb21w
b3NpdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0OjpXZWJM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6fldlYkxh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlOjp+V2ViTGF5
ZXJUcmVlSG9zdERlbGVnYXRlKToKKyAgICAgICAgKiBwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6b3BlcmF0b3IgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgZ2Z4OjpUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YXNzaWdu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeCk6
CisgICAgICAgICogc3JjL0NDVGhyZWFkSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNDVGhy
ZWFkSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q0NUaHJlYWRJbXBsOjpjcmVhdGVG
cm9tV2ViVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6Q0NUaHJlYWRJbXBsOjpDQ1RocmVhZElt
cGwpOgorICAgICAgICAqIHNyYy9DQ1RocmVhZEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViQ29t
cG9zaXRvclBsYXRmb3JtU3VwcG9ydC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojppbml0
aWFsaXplQ29tcG9zaXRvclBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgIChXZWJLaXQ6OnNodXRk
b3duQ29tcG9zaXRvclBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRM
YXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpkaXJ0eVJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGVudExheWVyOjpvcGVyYXRvciBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPik6Cisg
ICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRlbnRMYXllckltcGw6On5XZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRlbnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OmVxdWFscyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cGFy
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXI6Omluc2VydENoaWxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6
OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVGcm9tUGFy
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlbW92ZUFsbENoaWxkcmVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OmFuY2hvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNl
dEFuY2hvclBvaW50Wik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludFop
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OmJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRNYXNr
c1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6Om1hc2tzVG9Cb3VuZHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6Om1hc2tMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRP
cGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6Om9wYWNpdHkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6c2V0T3BhcXVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6
Om9wYXF1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyOjpwb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpz
dWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXI6OldlYkxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVyYXRvciBQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+KToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
ckltcGw6On5XZWJMYXllckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmRy
YXdzQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6bm90aWZ5U3luY1JlcXVpcmVkKToK
KyAgICAgICAgKiBzcmMvV2ViTGF5ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJM
YXllclRyZWVIb3N0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JT
ZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3Q6OnJl
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6YXNzaWduKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6ZXF1YWxzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlSG9zdDo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0
Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0OjpXZWJM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdDo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDQ0xheWVyVHJlZUhvc3Q+KToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlSG9zdElt
cGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlSG9zdEltcGw6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3RJbXBsOjpXZWJMYXllclRy
ZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3RJbXBsOjp+V2Vi
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZUhvc3RJ
bXBsOjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVIb3N0SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVIb3N0SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUp
OgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVIb3N0SW1wbC5oOiBBZGRlZC4KKwogMjAxMS0w
OS0zMCAgRWxsaW90IFBvZ2VyICA8ZXBvZ2VyQGdvb2dsZS5jb20+CiAKICAgICAgICAgd2Via2l0
LT5jaHJvbWl1bSBERVBTIHJvbGwgMTAyOTEwLT4xMDM0NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCA2NjMwYjM1MTE3YjBkMDM2NmQzMGRjOTIwYjJmZGM4NmQwMmNjNTYwLi41YWM0
OWJiNmNkNmJkNmU2ZjM4NmQwMGQ5ZTJiNmUwNWQ5NmJjNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCkBAIC0xMzAsNiArMTMwLDggQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkNvbXBvc2l0b3JDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3Np
dG9yLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29uc29sZU1lc3NhZ2UuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkNvb2tpZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvb2tpZUphci5oJywKQEAg
LTIxNiw2ICsyMTgsMTAgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdC5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkxhYmVsRWxlbWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkxheWVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXJEZWxlZ2F0
ZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxheWVyVHJlZUhvc3QuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXllclRyZWVIb3N0RGVsZWdhdGUuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJMb2NhbGl6ZWRTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJNZWRpYUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJN
ZWRpYVBsYXllci5oJywKQEAgLTQ0OSw2ICs0NTUsOSBAQAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW1wbC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvckltcGwuaCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCkBAIC01MzMsNiAr
NTQyLDEyIEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5o
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYktpdC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViTGFiZWxFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllci5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJMYXllckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXll
clRyZWVIb3N0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVIb3N0SW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdjYTI0OTlkZmFmZWM0
YmQyZTE3ODYxNmNkYjM4OGZhZjIxODk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
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
ZWYgV2ViQ29udGVudExheWVyX2gKKyNkZWZpbmUgV2ViQ29udGVudExheWVyX2gKKworI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsgY2xhc3MgQ29udGVudExheWVyQ2hyb21pdW07IH0KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZTsKK2NsYXNzIFdlYkZsb2F0UmVjdDsKK2Ns
YXNzIFdlYkxheWVyRGVsZWdhdGU7CisKK2NsYXNzIFdlYkNvbnRlbnRMYXllciA6IHB1YmxpYyBX
ZWJMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYkNvbnRlbnRMYXllciBjcmVhdGUoV2Vi
TGF5ZXJEZWxlZ2F0ZSosIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKik7CisgICAgV2ViQ29udGVu
dExheWVyKCkgeyB9CisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdlYkNvbnRlbnRMYXllciYg
bGF5ZXIpIDogV2ViTGF5ZXIobGF5ZXIpIHsgfQorICAgIH5XZWJDb250ZW50TGF5ZXIoKSB7IH0K
KyAgICBXZWJDb250ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXZWJDb250ZW50TGF5ZXImIGxh
eWVyKQorICAgIHsKKyAgICAgICAgV2ViTGF5ZXI6OmFzc2lnbihsYXllcik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KGNvbnN0IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgZGly
dHlSZWN0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJDb250ZW50TGF5
ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtPiYp
OworICAgIFdlYkNvbnRlbnRMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW0+KCkgY29uc3Q7CisjZW5kaWYKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXll
ckRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5
ZXJEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmZjZlMGMxMGUyMGI2NmY3NjMxMWY0NzA5MTQ5YjYx
ZTI2Y2U5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNv
bnRlbnRMYXllckRlbGVnYXRlX2gKKyNkZWZpbmUgV2ViQ29udGVudExheWVyRGVsZWdhdGVfaAor
CisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
UmVjdDsKKworY2xhc3MgV2ViQ29udGVudExheWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHMoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgY2xpcCkgPSAwOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVyRGVsZWdhdGUoKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyRGVsZWdh
dGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTVhYjU4YmQxMTNmZDJjZGI3ZTdhNTFlNjZhYTk4MDAxMTMzMDg4YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCArMSwx
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAorCisjaW5jbHVkZSAi
V2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7IGNsYXNzIExheWVyQ2hyb21pdW07IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBXZWJGbG9hdFBvaW50OworY2xhc3MgV2ViTGF5ZXJEZWxlZ2F0ZTsKK2NsYXNzIFdlYlNpemU7
CitjbGFzcyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKworY2xhc3MgV2ViTGF5ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBXZWJMYXllciBjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSopOworICAg
IFdlYkxheWVyKCkgeyB9CisgICAgV2ViTGF5ZXIoY29uc3QgV2ViTGF5ZXImIGxheWVyKSB7IGFz
c2lnbihsYXllcik7IH0KKyAgICB+V2ViTGF5ZXIoKSB7IHJlc2V0KCk7IH0KKyAgICBXZWJMYXll
ciYgb3BlcmF0b3I9KGNvbnN0IFdlYkxheWVyJiBsYXllcikKKyAgICB7CisgICAgICAgIGFzc2ln
bihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJM
YXllciYpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXImKSBj
b25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIgcm9vdExheWVyKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciBwYXJlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgaW5zZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImLCBzaXplX3QgaW5kZXgpOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZXBsYWNlQ2hpbGQoY29uc3QgV2ViTGF5ZXImIHJlZmVyZW5jZSwgY29u
c3QgV2ViTGF5ZXImIG5ld0xheWVyKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVtb3ZlRnJv
bVBhcmVudCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOwor
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFdlYkZsb2F0UG9p
bnQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25z
dDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbmNob3JQb2ludFooZmxvYXQpOworICAg
IFdFQktJVF9FWFBPUlQgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3Q7CisKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0Qm91bmRzKGNvbnN0IFdlYlNpemUmKTsKKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlNpemUgYm91bmRzKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TWFz
a3NUb0JvdW5kcyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbWFza3NUb0JvdW5kcygp
IGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE1hc2tMYXllcihjb25zdCBXZWJM
YXllciYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIgbWFza0xheWVyKCkgY29uc3Q7CisK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgV0VCS0lUX0VY
UE9SVCBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
T3BhcXVlKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBvcGFxdWUoKSBjb25zdDsKKwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJGbG9hdFBvaW50Jik7
CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV0VCS0lU
X0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG8oKQorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAg
ICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyAgICBXZWJMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bT4mKTsKKyAgICBXZWJMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpMYXllckNocm9taXVtPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpMYXllckNocm9taXVtPigpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQqIHVud3JhcCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJp
dmF0ZS5nZXQoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCog
Y29uc3RVbndyYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFQqPihtX3ByaXZhdGUuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6Cisg
ICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiBtX3ByaXZhdGU7Cit9Owor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkxheWVyJiBhLCBjb25zdCBXZWJMYXll
ciYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgV2ViTGF5ZXImIGEsIGNvbnN0IFdlYkxheWVyJiBiKQoreworICAgIHJldHVy
biAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2Vi
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJEZWxl
Z2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE4YzdlM2FlYzk2NWNkOWYwYjlhNGY0YWI0ZTJjNmU0ZDM0Y2Ez
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllckRlbGVnYXRlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJEZWxlZ2F0ZV9o
CisjZGVmaW5lIFdlYkxheWVyRGVsZWdhdGVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5l
ZWRzQ29tbWl0KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViTGF5ZXJEZWxl
Z2F0ZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJM
YXllckRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkxheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxh
eWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjMwNTkzMGIzYjlhNmI0NWFjMzhhYzczNDI2ODNh
N2Y0ZGEyY2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
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
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJMYXllclRy
ZWVIb3N0X2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlSG9zdF9oCisKKyNpbmNsdWRlICJXZWJDb21t
b24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDU2V0dGluZ3M7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgV2ViTGF5ZXI7CitjbGFzcyBXZWJMYXllclRyZWVIb3N0RGVsZWdh
dGU7CitjbGFzcyBXZWJTaXplOworCitzdHJ1Y3QgV2ViQ29tcG9zaXRvclNldHRpbmdzIHsKKyAg
ICBXZWJDb21wb3NpdG9yU2V0dGluZ3MoKQorICAgICAgICAgICAgOiBhY2NlbGVyYXRlUGFpbnRp
bmcoZmFsc2UpCisgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVlbihmYWxzZSkKKyAgICAg
ICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkgeyB9CisKKyAgICBib29sIGFj
Y2VsZXJhdGVQYWludGluZzsKKyAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKKyAgICBib29s
IGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQ7CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
b3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCit9OworCitjbGFz
cyBXZWJMYXllclRyZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViTGF5ZXJUcmVlSG9z
dCBjcmVhdGUoV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlKiwgY29uc3QgV2ViTGF5ZXImIHJvb3Qs
IGNvbnN0IFdlYkNvbXBvc2l0b3JTZXR0aW5ncyYpOworICAgIFdlYkxheWVyVHJlZUhvc3QoKSB7
IH0KKyAgICBXZWJMYXllclRyZWVIb3N0KGNvbnN0IFdlYkxheWVyVHJlZUhvc3QmIGxheWVyKSB7
IGFzc2lnbihsYXllcik7IH0KKyAgICB+V2ViTGF5ZXJUcmVlSG9zdCgpIHsgcmVzZXQoKTsgfQor
ICAgIFdlYkxheWVyVHJlZUhvc3QmIG9wZXJhdG9yPShjb25zdCBXZWJMYXllclRyZWVIb3N0JiBs
YXllcikKKyAgICB7CisgICAgICAgIGFzc2lnbihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJMYXllclRyZWVIb3N0Jik7CisgICAgV0VCS0lUX0VY
UE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJMYXllclRyZWVIb3N0JikgY29uc3Q7CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgY29tcG9zaXRlKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dFZpZXdwb3J0KGNvbnN0IFdlYlNpemUmIHZpZXdwb3J0U2l6ZSk7CisgICAgV0VCS0lUX0VYUE9S
VCBXZWJTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgV2ViTGF5ZXJUcmVlSG9zdChjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0PiYpOworICAgIFdlYkxheWVyVHJlZUhvc3QmIG9wZXJhdG9yPShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOworICAgIG9wZXJh
dG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3Q7Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0PiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdl
YkxheWVyVHJlZUhvc3QmIGEsIGNvbnN0IFdlYkxheWVyVHJlZUhvc3QmIGIpCit7CisgICAgcmV0
dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkxh
eWVyVHJlZUhvc3QmIGEsIGNvbnN0IFdlYkxheWVyVHJlZUhvc3QmIGIpCit7CisgICAgcmV0dXJu
ICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJM
YXllclRyZWVIb3N0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM4MzNmOWQ5M2I4YjQy
ZWVkZTUxMWVmOWY4ZDc3YTVlZTdkZGI5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZS5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZV9oCisjZGVmaW5lIFdlYkxheWVy
VHJlZUhvc3REZWxlZ2F0ZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBXZWJUaHJlYWQ7CisKK2NsYXNzIFdlYkxheWVyVHJlZUhvc3RE
ZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQz
RCogY3JlYXRlQ29udGV4dDNEKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdy
YXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDb21wb3NpdGUoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJMYXllclRy
ZWVIb3N0RGVsZWdhdGUoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE2YzUzNmI3ZTFjNWI2OGZlOTE1NzMyNDYzZmQ0NGYxN2FlMmExOWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeF9oCisj
ZGVmaW5lIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjZWxzZQorI2luY2x1ZGUg
PHVpL2dmeC90cmFuc2Zvcm0uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggeworcHVibGljOgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRvdWJsZSBtMTQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91
YmxlIG0yMywgZG91YmxlIG0yNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
bTMxLCBkb3VibGUgbTMyLCBkb3VibGUgbTMzLCBkb3VibGUgbTM0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBtNDEsIGRvdWJsZSBtNDIsIGRvdWJsZSBtNDMsIGRvdWJsZSBt
NDQpIHsKKyAgICAgICAgc2V0TWF0cml4KG0xMSwgbTEyLCBtMTMsIG0xNCwgbTIxLCBtMjIsIG0y
MywgbTI0LCBtMzEsIG0zMiwgbTMzLCBtMzQsIG00MSwgbTQyLCBtNDMsIG00NCk7CisgICAgfQor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0KSB7IGFzc2lnbih0KTsgfQorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcGVyYXRv
cj0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCisgICAgeworICAgICAgICBhc3Np
Z24odCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdCkKKyAgICB7CisgICAgICAgIHNldE1hdHJpeCh0Lm0xMSgpLCB0
Lm0xMigpLCB0Lm0xMygpLCB0Lm0xNCgpLAorICAgICAgICAgICAgICAgICAgdC5tMjEoKSwgdC5t
MjIoKSwgdC5tMjMoKSwgdC5tMjQoKSwKKyAgICAgICAgICAgICAgICAgIHQubTMxKCksIHQubTMy
KCksIHQubTMzKCksIHQubTM0KCksCisgICAgICAgICAgICAgICAgICB0Lm00MSgpLCB0Lm00Migp
LCB0Lm00MygpLCB0Lm00NCgpKTsKKyAgICB9CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQorICAg
IHsKKyAgICAgICAgc2V0TWF0cml4KHQubTExKCksIHQubTEyKCksIHQubTEzKCksIHQubTE0KCks
CisgICAgICAgICAgICAgICAgICB0Lm0yMSgpLCB0Lm0yMigpLCB0Lm0yMygpLCB0Lm0yNCgpLAor
ICAgICAgICAgICAgICAgICAgdC5tMzEoKSwgdC5tMzIoKSwgdC5tMzMoKSwgdC5tMzQoKSwKKyAg
ICAgICAgICAgICAgICAgIHQubTQxKCksIHQubTQyKCksIHQubTQzKCksIHQubTQ0KCkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4KG1fZGF0YVswXVswXSwgbV9kYXRhWzBdWzFdLCBtX2RhdGFbMF1b
Ml0sIG1fZGF0YVswXVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YVsxXVswXSwgbV9kYXRhWzFdWzFdLCBtX2RhdGFbMV1bMl0sIG1fZGF0YVsx
XVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YVsyXVswXSwgbV9kYXRhWzJdWzFdLCBtX2RhdGFbMl1bMl0sIG1fZGF0YVsyXVszXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVszXVswXSwgbV9k
YXRhWzNdWzFdLCBtX2RhdGFbM11bMl0sIG1fZGF0YVszXVszXSk7CisgICAgfQorI2Vsc2UKKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCB1aTo6VHJhbnNmb3JtJiB0KQorICAgIHsK
KyAgICAgICAgc2V0TWF0cml4KHQubWF0cml4KCkpOworICAgIH0KKworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBvcGVyYXRvcj0oY29uc3QgdWk6OlRyYW5zZm9ybSYgdCkKKyAgICB7Cisg
ICAgICAgIHNldE1hdHJpeCh0Lm1hdHJpeCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIG9wZXJhdG9yIHVpOjpUcmFuc2Zvcm0oKSBjb25zdAorICAgIHsKKyAgICAgICAg
dWk6OlRyYW5zZm9ybSB0OworICAgICAgICBTa01hdHJpeDQ0JiBtYXRyaXggPSB0Lm1hdHJpeCgp
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNDsgKytqKQorICAgICAgICAgICAgICAgIG1hdHJpeC5zZXQoaiwgaSwg
U2tEb3VibGVUb01TY2FsYXIobV9kYXRhW2ldW2pdKSk7CisgICAgICAgIHJldHVybiB0OworICAg
IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0KQorICAgIHsKKyAgICAgICAgc2V0TWF0cml4KHQubV9kYXRhWzBdWzBd
LCB0Lm1fZGF0YVswXVsxXSwgdC5tX2RhdGFbMF1bMl0sIHQubV9kYXRhWzBdWzNdLAorICAgICAg
ICAgICAgICAgICAgdC5tX2RhdGFbMV1bMF0sIHQubV9kYXRhWzFdWzFdLCB0Lm1fZGF0YVsxXVsy
XSwgdC5tX2RhdGFbMV1bM10sCisgICAgICAgICAgICAgICAgICB0Lm1fZGF0YVsyXVswXSwgdC5t
X2RhdGFbMl1bMV0sIHQubV9kYXRhWzJdWzJdLCB0Lm1fZGF0YVsyXVszXSwKKyAgICAgICAgICAg
ICAgICAgIHQubV9kYXRhWzNdWzBdLCB0Lm1fZGF0YVszXVsxXSwgdC5tX2RhdGFbM11bMl0sIHQu
bV9kYXRhWzNdWzNdKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1hdHJpeChkb3VibGUgbTExLCBk
b3VibGUgbTEyLCBkb3VibGUgbTEzLCBkb3VibGUgbTE0LAorICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBtMjEsIGRvdWJsZSBtMjIsIGRvdWJsZSBtMjMsIGRvdWJsZSBtMjQsCisgICAgICAgICAg
ICAgICAgICAgZG91YmxlIG0zMSwgZG91YmxlIG0zMiwgZG91YmxlIG0zMywgZG91YmxlIG0zNCwK
KyAgICAgICAgICAgICAgICAgICBkb3VibGUgbTQxLCBkb3VibGUgbTQyLCBkb3VibGUgbTQzLCBk
b3VibGUgbTQ0KQorICAgIHsKKyAgICAgICAgbV9kYXRhWzBdWzBdID0gbTExOworICAgICAgICBt
X2RhdGFbMF1bMV0gPSBtMTI7CisgICAgICAgIG1fZGF0YVswXVsyXSA9IG0xMzsKKyAgICAgICAg
bV9kYXRhWzBdWzNdID0gbTE0OworICAgICAgICBtX2RhdGFbMV1bMF0gPSBtMjE7CisgICAgICAg
IG1fZGF0YVsxXVsxXSA9IG0yMjsKKyAgICAgICAgbV9kYXRhWzFdWzJdID0gbTIzOworICAgICAg
ICBtX2RhdGFbMV1bM10gPSBtMjQ7CisgICAgICAgIG1fZGF0YVsyXVswXSA9IG0zMTsKKyAgICAg
ICAgbV9kYXRhWzJdWzFdID0gbTMyOworICAgICAgICBtX2RhdGFbMl1bMl0gPSBtMzM7CisgICAg
ICAgIG1fZGF0YVsyXVszXSA9IG0zNDsKKyAgICAgICAgbV9kYXRhWzNdWzBdID0gbTQxOworICAg
ICAgICBtX2RhdGFbM11bMV0gPSBtNDI7CisgICAgICAgIG1fZGF0YVszXVsyXSA9IG00MzsKKyAg
ICAgICAgbV9kYXRhWzNdWzNdID0gbTQ0OworICAgIH0KKworI2lmICFXRUJLSVRfSU1QTEVNRU5U
QVRJT04KKyAgICB2b2lkIHNldE1hdHJpeChjb25zdCBTa01hdHJpeDQ0JiBtKQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IDQ7ICsraikKKyAgICAgICAgICAgICAgICBtX2RhdGFbaV1bal0gPSBTa01TY2Fs
YXJUb0RvdWJsZShtLmdldChqLCBpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBkb3VibGUgbV9k
YXRhWzRdWzRdOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Q29udGVudExheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODdlYzRlYzk5MmI3NzI4ZjU5MjkxMzk0Y2I3
Y2MxYjc5OTBhM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogY29weXJpZ2h0
IChjKSAyMDExIGdvb2dsZSBpbmMuIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogcmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogcmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIHJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIG5laXRoZXIgdGhlIG5hbWUgb2YgZ29vZ2xlIGluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlk
ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKKyAqICJhcyBpcyIg
YW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90
CisgKiBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0
eSBhbmQgZml0bmVzcyBmb3IKKyAqIGEgcGFydGljdWxhciBwdXJwb3NlIGFyZSBkaXNjbGFpbWVk
LiBpbiBubyBldmVudCBzaGFsbCB0aGUgY29weXJpZ2h0CisgKiBvd25lciBvciBjb250cmlidXRv
cnMgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwKKyAqIHNw
ZWNpYWwsIGV4ZW1wbGFyeSwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIChpbmNsdWRpbmcsIGJ1
dCBub3QKKyAqIGxpbWl0ZWQgdG8sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Ig
c2VydmljZXM7IGxvc3Mgb2YgdXNlLAorICogZGF0YSwgb3IgcHJvZml0czsgb3IgYnVzaW5lc3Mg
aW50ZXJydXB0aW9uKSBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55CisgKiB0aGVvcnkgb2YgbGlh
YmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QgbGlhYmlsaXR5LCBvciB0b3J0Cisg
KiAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3aXNlKSBhcmlzaW5nIGluIGFueSB3YXkg
b3V0IG9mIHRoZSB1c2UKKyAqIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0
aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllci5oIgorCisjaW5jbHVkZSAiQ29udGVudExheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJDb250ZW50TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAi
V2ViRmxvYXRSZWN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViQ29udGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkxh
eWVyRGVsZWdhdGUqIGRlbGVnYXRlLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogY29udGVudERl
bGVnYXRlKQoreworICAgIHJldHVybiBXZWJDb250ZW50TGF5ZXIoV2ViQ29udGVudExheWVySW1w
bDo6Y3JlYXRlKGRlbGVnYXRlLCBjb250ZW50RGVsZWdhdGUpKTsKK30KKwordm9pZCBXZWJDb250
ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBXZWJGbG9hdFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICB1bndyYXA8Q29udGVudExheWVyQ2hyb21pdW0+KCktPnNldE5lZWRzRGlzcGxheShk
aXJ0eVJlY3QpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkK
K3sKKyAgICB1bndyYXA8Q29udGVudExheWVyQ2hyb21pdW0+KCktPnNldE5lZWRzRGlzcGxheSgp
OworfQorCitXZWJGbG9hdFJlY3QgV2ViQ29udGVudExheWVyOjpkaXJ0eVJlY3QoKQoreworICAg
IHJldHVybiBXZWJGbG9hdFJlY3QodW53cmFwPENvbnRlbnRMYXllckNocm9taXVtPigpLT5kaXJ0
eVJlY3QoKSk7Cit9CisKK1dlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBh
c3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+JiBub2RlKQorICAgIDogV2ViTGF5ZXIobm9k
ZSkKK3sKK30KKworV2ViQ29udGVudExheWVyJiBXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPShj
b25zdCBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiYgbm9kZSkKK3sKKyAgICBtX3By
aXZhdGUgPSBub2RlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViQ29udGVudExheWVyOjpv
cGVyYXRvciBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvbnRlbnRMYXllckNocm9taXVtKj4obV9wcml2YXRlLmdldCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxODMwMjhkYzE1
ZDEyNGNlZDgwOGE3YTEyODFhMDJhMTliY2FjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDg2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllckltcGwuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNhbnZhcy5oIgor
I2luY2x1ZGUgIldlYkNvbnRlbnRMYXllckRlbGVnYXRlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJE
ZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViQ29udGVu
dExheWVySW1wbD4gV2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyRGVsZWdhdGUq
IGRlbGVnYXRlLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogY29udGVudERlbGVnYXRlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGVudExheWVySW1wbChkZWxlZ2F0ZSwgY29u
dGVudERlbGVnYXRlKSk7Cit9CisKK1dlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRlbnRMYXll
ckltcGwoV2ViTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYkNvbnRlbnRMYXllckRlbGVnYXRl
KiBjb250ZW50RGVsZWdhdGUpCisgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bSh0aGlzKQorICAg
ICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1fY29udGVudERlbGVnYXRlKGNvbnRlbnRE
ZWxlZ2F0ZSkKK3sKK30KKworV2ViQ29udGVudExheWVySW1wbDo6fldlYkNvbnRlbnRMYXllcklt
cGwoKQoreworfQorCitib29sIFdlYkNvbnRlbnRMYXllckltcGw6OmRyYXdzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudERlbGVnYXRlICYmIG1fY29udGVudERlbGVnYXRl
LT5kcmF3c0NvbnRlbnQoKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAg
aWYgKCFtX2NvbnRlbnREZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworI2lmIFdFQktJVF9VU0lO
R19TS0lBCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdj
LnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisgICAgbV9jb250ZW50RGVsZWdhdGUtPnBhaW50
Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5
ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlmIChtX2RlbGVnYXRlKQorICAg
ICAgICBtX2RlbGVnYXRlLT5ub3RpZnlOZWVkc0NvbW1pdCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMzE4YWYxODUzMGE5MGI0ZjhhMGM1M2I5MmM0ZjBjM2UyYjY5
MWFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVySW1wbC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllcklt
cGxfaAorI2RlZmluZSBXZWJDb250ZW50TGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkNvbnRlbnRM
YXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitjbGFzcyBXZWJMYXllckRlbGVnYXRlOworY2xhc3MgV2ViQ29udGVudExheWVy
RGVsZWdhdGU7CisKK2NsYXNzIFdlYkNvbnRlbnRMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6
Q29udGVudExheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0
ZShXZWJMYXllckRlbGVnYXRlKiwgV2ViQ29udGVudExheWVyRGVsZWdhdGUqIGNvbnRlbnREZWxl
Z2F0ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyRGVs
ZWdhdGUqLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogY29udGVudERlbGVnYXRlKTsKKyAgICB2
aXJ0dWFsIH5XZWJDb250ZW50TGF5ZXJJbXBsKCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKKworICAgIFdlYkxheWVyRGVsZWdhdGUqIG1f
ZGVsZWdhdGU7CisgICAgV2ViQ29udGVudExheWVyRGVsZWdhdGUqIG1fY29udGVudERlbGVnYXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZW50TGF5
ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xNGUzMjIwMjZmNmExNjFkNDQ4NmYwYzVmYTEzYjcwMGVmYmJlNjViCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCkBAIC0wLDAgKzEs
MjE3IEBACisvKgorICogY29weXJpZ2h0IChjKSAyMDExIGdvb2dsZSBpbmMuIGFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogcmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIHJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIG5laXRoZXIgdGhlIG5hbWUgb2YgZ29v
Z2xlIGluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBj
b250cmlidXRvcnMKKyAqICJhcyBpcyIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFu
dGllcywgaW5jbHVkaW5nLCBidXQgbm90CisgKiBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJy
YW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKKyAqIGEgcGFydGljdWxh
ciBwdXJwb3NlIGFyZSBkaXNjbGFpbWVkLiBpbiBubyBldmVudCBzaGFsbCB0aGUgY29weXJpZ2h0
CisgKiBvd25lciBvciBjb250cmlidXRvcnMgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRp
cmVjdCwgaW5jaWRlbnRhbCwKKyAqIHNwZWNpYWwsIGV4ZW1wbGFyeSwgb3IgY29uc2VxdWVudGlh
bCBkYW1hZ2VzIChpbmNsdWRpbmcsIGJ1dCBub3QKKyAqIGxpbWl0ZWQgdG8sIHByb2N1cmVtZW50
IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXM7IGxvc3Mgb2YgdXNlLAorICogZGF0YSwg
b3IgcHJvZml0czsgb3IgYnVzaW5lc3MgaW50ZXJydXB0aW9uKSBob3dldmVyIGNhdXNlZCBhbmQg
b24gYW55CisgKiB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJp
Y3QgbGlhYmlsaXR5LCBvciB0b3J0CisgKiAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3
aXNlKSBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2UKKyAqIG9mIHRoaXMgc29mdHdh
cmUsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIldlYkxheWVySW1wbC5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIKKyNpbmNsdWRlICJXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYkxheWVyIFdlYkxheWVyOjpjcmVhdGUoV2ViTGF5ZXJEZWxl
Z2F0ZSogZGVsZWdhdGUpCit7CisgICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3Jl
YXRlKGRlbGVnYXRlKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlc2V0KCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6YXNzaWduKGNvbnN0IFdlYkxheWVy
JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK2Jvb2wg
V2ViTGF5ZXI6OmVxdWFscyhjb25zdCBXZWJMYXllciYgbikgY29uc3QKK3sKKyAgICByZXR1cm4g
KG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7Cit9CisKK1dlYkxheWVyIFdl
YkxheWVyOjpyb290TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcihjb25zdF9j
YXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnJvb3RMYXllcigpKSk7Cit9CisKK1dlYkxh
eWVyIFdlYkxheWVyOjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcihjb25z
dF9jYXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnBhcmVudCgpKSk7Cit9CisKK3ZvaWQg
V2ViTGF5ZXI6OmFkZENoaWxkKGNvbnN0IFdlYkxheWVyJiBjaGlsZCkKK3sKKyAgICBtX3ByaXZh
dGUtPmFkZENoaWxkKGNoaWxkKTsKK30KKwordm9pZCBXZWJMYXllcjo6aW5zZXJ0Q2hpbGQoY29u
c3QgV2ViTGF5ZXImIGNoaWxkLCBzaXplX3QgaW5kZXgpCit7CisgICAgbV9wcml2YXRlLT5pbnNl
cnRDaGlsZChjaGlsZCwgaW5kZXgpOworfQorCit2b2lkIFdlYkxheWVyOjpyZXBsYWNlQ2hpbGQo
Y29uc3QgV2ViTGF5ZXImIHJlZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXImIG5ld0xheWVyKQorewor
ICAgIFdlYkxheWVyIHJlZiA9IHJlZmVyZW5jZTsKKyAgICBtX3ByaXZhdGUtPnJlcGxhY2VDaGls
ZChyZWYudW53cmFwPExheWVyQ2hyb21pdW0+KCksIG5ld0xheWVyKTsKK30KKwordm9pZCBXZWJM
YXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgbV9wcml2YXRlLT5yZW1vdmVGcm9tUGFy
ZW50KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlbW92ZUFsbENoaWxkcmVuKCkKK3sKKyAgICBt
X3ByaXZhdGUtPnJlbW92ZUFsbENoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldEFu
Y2hvclBvaW50KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGFuY2hvclBvaW50KQoreworICAgIG1fcHJp
dmF0ZS0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOworfQorCitXZWJGbG9hdFBvaW50IFdl
YkxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZsb2F0UG9pbnQo
bV9wcml2YXRlLT5hbmNob3JQb2ludCgpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0QW5jaG9y
UG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEFuY2hvclBv
aW50WihhbmNob3JQb2ludFopOworfQorCitmbG9hdCBXZWJMYXllcjo6YW5jaG9yUG9pbnRaKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hbmNob3JQb2ludFooKTsKK30KKwordm9p
ZCBXZWJMYXllcjo6c2V0Qm91bmRzKGNvbnN0IFdlYlNpemUmIHNpemUpCit7CisgICAgbV9wcml2
YXRlLT5zZXRCb3VuZHMoc2l6ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5ZXI6OmJvdW5kcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9wcml2YXRlLT5ib3VuZHMoKSk7Cit9CisKK3Zv
aWQgV2ViTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKQoreworICAg
IG1fcHJpdmF0ZS0+c2V0TWFza3NUb0JvdW5kcyhtYXNrc1RvQm91bmRzKTsKK30KKworYm9vbCBX
ZWJMYXllcjo6bWFza3NUb0JvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bWFza3NUb0JvdW5kcygpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRNYXNrTGF5ZXIoY29uc3Qg
V2ViTGF5ZXImIG1hc2tMYXllcikKK3sKKyAgICBXZWJMYXllciByZWYgPSBtYXNrTGF5ZXI7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2V0TWFza0xheWVyKHJlZi51bndyYXA8TGF5ZXJDaHJvbWl1
bT4oKSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjptYXNrTGF5ZXIoKSBjb25zdAoreworICAg
IHJldHVybiBXZWJMYXllcihtX3ByaXZhdGUtPm1hc2tMYXllcigpKTsKK30KKwordm9pZCBXZWJM
YXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1fcHJpdmF0ZS0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKK30KKworZmxvYXQgV2ViTGF5ZXI6Om9wYWNpdHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0
T3BhcXVlKGJvb2wgb3BhcXVlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0T3BhcXVlKG9wYXF1ZSk7
Cit9CisKK2Jvb2wgV2ViTGF5ZXI6Om9wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+b3BhcXVlKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IFdl
YkZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fcHJpdmF0ZS0+c2V0UG9zaXRpb24ocG9z
aXRpb24pOworfQorCitXZWJGbG9hdFBvaW50IFdlYkxheWVyOjpwb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkZsb2F0UG9pbnQobV9wcml2YXRlLT5wb3NpdGlvbigpKTsKK30KKwor
dm9pZCBXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN1YmxheWVyVHJhbnNm
b3JtKHRyYW5zZm9ybSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYkxheWVyOjpz
dWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7Cit9CisKK3ZvaWQgV2ViTGF5
ZXI6OnNldFRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Cit9CisKK1dlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IFdlYkxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJl
dHVybiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnRyYW5zZm9ybSgpKTsKK30K
KworV2ViTGF5ZXI6OldlYkxheWVyKGNvbnN0IFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4mIG5v
ZGUpCisgICAgOiBtX3ByaXZhdGUobm9kZSkKK3sKK30KKworV2ViTGF5ZXImIFdlYkxheWVyOjpv
cGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkKK3sKKyAgICBt
X3ByaXZhdGUgPSBub2RlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTGF5ZXI6Om9wZXJh
dG9yIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4oKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5N2QwZGQ5ZjUwN2Vl
NGViMjIwYzMzODhiZjY1MDlmYjlmMDExZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKKworI2luY2x1ZGUgIldlYkxh
eWVyRGVsZWdhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkxheWVySW1wbD4gV2ViTGF5ZXJJbXBsOjpjcmVhdGUo
V2ViTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJMYXllckltcGwoZGVsZWdhdGUpKTsKK30KKworV2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwo
V2ViTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpIDogTGF5ZXJDaHJvbWl1bSh0aGlzKSwgbV9kZWxl
Z2F0ZShkZWxlZ2F0ZSkKK3sKK30KKworV2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKCkKK3sK
K30KKworYm9vbCBXZWJMYXllckltcGw6OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkxheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworfQorCit2b2lkIFdlYkxheWVySW1w
bDo6bm90aWZ5U3luY1JlcXVpcmVkKCkKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAg
bV9kZWxlZ2F0ZS0+bm90aWZ5TmVlZHNDb21taXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkxZDY4YzgyMDg2Mjc2MGI3NWQxNzk0YWMxODQ5NmVlMjQ5NGEwN2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaApAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJMYXllckltcGxfaAorI2RlZmluZSBXZWJMYXllckltcGxfaAorCisj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViTGF5ZXJEZWxlZ2F0ZTsKKworY2xhc3MgV2Vi
TGF5ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OkxheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3Jl
OjpDQ0xheWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkxh
eWVySW1wbD4gY3JlYXRlKFdlYkxheWVyRGVsZWdhdGUqKTsKKworcHJvdGVjdGVkOgorICAgIFdl
YkxheWVySW1wbChXZWJMYXllckRlbGVnYXRlKik7CisgICAgdmlydHVhbCB+V2ViTGF5ZXJJbXBs
KCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQo
KTsKKworICAgIFdlYkxheWVyRGVsZWdhdGUqIG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwZWJlN2Y5
MTgzMzRlZWY0YzdjMWE5MmE0MDllYzhkOGVkNGE2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDEw
OSBAQAorLyoKKyAqIGNvcHlyaWdodCAoYykgMjAxMSBnb29nbGUgaW5jLiBhbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIHJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiByZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBuZWl0aGVyIHRoZSBuYW1lIG9mIGdvb2ds
ZSBpbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiB0
aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQgY29u
dHJpYnV0b3JzCisgKiAiYXMgaXMiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRp
ZXMsIGluY2x1ZGluZywgYnV0IG5vdAorICogbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFu
dGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCisgKiBhIHBhcnRpY3VsYXIg
cHVycG9zZSBhcmUgZGlzY2xhaW1lZC4gaW4gbm8gZXZlbnQgc2hhbGwgdGhlIGNvcHlyaWdodAor
ICogb3duZXIgb3IgY29udHJpYnV0b3JzIGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJl
Y3QsIGluY2lkZW50YWwsCisgKiBzcGVjaWFsLCBleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRpYWwg
ZGFtYWdlcyAoaW5jbHVkaW5nLCBidXQgbm90CisgKiBsaW1pdGVkIHRvLCBwcm9jdXJlbWVudCBv
ZiBzdWJzdGl0dXRlIGdvb2RzIG9yIHNlcnZpY2VzOyBsb3NzIG9mIHVzZSwKKyAqIGRhdGEsIG9y
IHByb2ZpdHM7IG9yIGJ1c2luZXNzIGludGVycnVwdGlvbikgaG93ZXZlciBjYXVzZWQgYW5kIG9u
IGFueQorICogdGhlb3J5IG9mIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgc3RyaWN0
IGxpYWJpbGl0eSwgb3IgdG9ydAorICogKGluY2x1ZGluZyBuZWdsaWdlbmNlIG9yIG90aGVyd2lz
ZSkgYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlCisgKiBvZiB0aGlzIHNvZnR3YXJl
LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVIb3N0LmgiCisK
KyNpbmNsdWRlICJXZWJMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViQ29tcG9zaXRvclNldHRpbmdzOjpvcGVyYXRv
ciBDQ1NldHRpbmdzKCkgY29uc3QKK3sKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIHNl
dHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGFjY2VsZXJhdGVQYWludGluZzsKKyAgICBzZXR0
aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBjb21wb3NpdGVPZmZzY3JlZW47CisKKyAgICAvLyBG
SVhNRTogY29tcG9zaXRvciB0aHJlYWQgaXNuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KKyAgICBz
ZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisKKyAgICAvLyBGSVhNRTog
c2hvd0ZQU0NvdW50ZXIgLyBzaG93UGxhdGZvcm1MYXllclRyZWUgYXJlbid0IHN1cHBvcnRlZCBj
dXJyZW50bHkuCisgICAgc2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBmYWxzZTsKKyAgICBzZXR0
aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBmYWxzZTsKKyAgICByZXR1cm4gc2V0dGluZ3M7
Cit9CisKK1dlYkxheWVyVHJlZUhvc3QgV2ViTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKFdlYkxheWVy
VHJlZUhvc3REZWxlZ2F0ZSogZGVsZWdhdGUsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBX
ZWJDb21wb3NpdG9yU2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIHJldHVybiBXZWJMYXllclRy
ZWVIb3N0KFdlYkxheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoZGVsZWdhdGUsIHJvb3QsIHNldHRp
bmdzKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlSG9zdDo6cmVzZXQoKQoreworICAgIG1fcHJp
dmF0ZS5yZXNldCgpOworfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3Q6OmFzc2lnbihjb25zdCBX
ZWJMYXllclRyZWVIb3N0JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZh
dGU7Cit9CisKK2Jvb2wgV2ViTGF5ZXJUcmVlSG9zdDo6ZXF1YWxzKGNvbnN0IFdlYkxheWVyVHJl
ZUhvc3QmIG4pIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3ByaXZhdGUuZ2V0KCkgPT0gbi5tX3By
aXZhdGUuZ2V0KCkpOworfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSgpCit7
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3ByaXZhdGUtPmNvbXBvc2l0
ZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29u
c3QgV2ViU2l6ZSYgdmlld3BvcnRTaXplKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Vmlld3BvcnQo
dmlld3BvcnRTaXplKTsKK30KKworV2ViU2l6ZSBXZWJMYXllclRyZWVIb3N0Ojp2aWV3cG9ydFNp
emUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTaXplKG1fcHJpdmF0ZS0+dmlld3BvcnRTaXpl
KCkpOworfQorCitXZWJMYXllclRyZWVIb3N0OjpXZWJMYXllclRyZWVIb3N0KGNvbnN0IFBhc3NS
ZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKKyAgICA6IG1fcHJpdmF0ZShub2RlKQorewor
fQorCitXZWJMYXllclRyZWVIb3N0JiBXZWJMYXllclRyZWVIb3N0OjpvcGVyYXRvcj0oY29uc3Qg
UGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9IG5v
ZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJMYXllclRyZWVIb3N0OjpvcGVyYXRvciBQ
YXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlSG9zdEltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBj
MDdlMDRmODA1NDU4NmI0OGI2ZDRkOTIzZGM1M2ViNTc3MGFkMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVl
SG9zdEltcGwuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUhvc3REZWxl
Z2F0ZS5oIgorI2luY2x1ZGUgIldlYlRocmVhZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlSG9zdElt
cGw+IFdlYkxheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRl
KiBkZWxlZ2F0ZSwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkNvbXBvc2l0b3JTZXR0
aW5ncyYgc2V0dGluZ3MpCit7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZUhvc3RJbXBsPiBob3N0
ID0gYWRvcHRSZWYobmV3IFdlYkxheWVyVHJlZUhvc3RJbXBsKGRlbGVnYXRlLCByb290LCBzZXR0
aW5ncykpOworICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gaG9zdDsKK30KKworV2ViTGF5ZXJUcmVlSG9zdEltcGw6OldlYkxheWVyVHJl
ZUhvc3RJbXBsKFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZSogZGVsZWdhdGUsIGNvbnN0IFdlYkxh
eWVyJiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MmIHNldHRpbmdzKSAKKyAgICA6
IENDTGF5ZXJUcmVlSG9zdCh0aGlzLCByb290LCBzZXR0aW5ncykKKyAgICAsIG1fZGVsZWdhdGUo
ZGVsZWdhdGUpCit7Cit9CisKK1dlYkxheWVyVHJlZUhvc3RJbXBsOjp+V2ViTGF5ZXJUcmVlSG9z
dEltcGwoKQoreworfQorCit2b2lkIFdlYkxheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAg
ICAgbV9kZWxlZ2F0ZS0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cit9CisKK1Bh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYkxheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGVM
YXllclRyZWVIb3N0Q29udGV4dDNEKCkKK3sKKyAgICBpZiAoIW1fZGVsZWdhdGUpCisgICAgICAg
IHJldHVybiAwOworICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9
IGFkb3B0UHRyKG1fZGVsZWdhdGUtPmNyZWF0ZUNvbnRleHQzRCgpKTsKKyAgICBpZiAoIXdlYkNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgd2ViQXR0cmlidXRlcyA9IHdlYkNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBh
dHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmRl
cHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB3ZWJB
dHRyaWJ1dGVzLnN0ZW5jaWw7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSB3ZWJBdHRyaWJ1
dGVzLmFudGlhbGlhczsKKyAgICBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHdlYkF0
dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOworICAgIGF0dHJpYnV0ZXMuY2FuUmVjb3ZlckZy
b21Db250ZXh0TG9zcyA9IHdlYkF0dHJpYnV0ZXMuY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zczsK
KyAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHdlYkF0dHJpYnV0ZXMubm9FeHRlbnNpb25z
OworICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSB3ZWJBdHRyaWJ1dGVzLnNoYXJlUmVz
b3VyY2VzOworICAgIGF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7CisK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgc3R5bGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3c7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpUaHJlYWRVc2FnZSB1c2FnZSA9IHNldHRpbmdzKCkuZW5hYmxlQ29tcG9zaXRvclRo
cmVhZCA/IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkIDog
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQ7CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIGF0dHJpYnV0ZXMsIDAsIHN0eWxlLCB1c2FnZSk7
Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlSG9zdEltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KGJvb2wgc3VjY2VzcykKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxl
Z2F0ZS0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7Cit9CisKKyNpZiAhVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBXZWJMYXllclRyZWVIb3N0SW1wbDo6c2NoZWR1
bGVDb21wb3NpdGUoKQoreworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRl
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZUhvc3RJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzdiNjg1Y2RjN2E3MTVjZDc2YzU4ZWRiZjNlOTc3NzI0NGNhOTAwMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlSG9zdEltcGxf
aAorI2RlZmluZSBXZWJMYXllclRyZWVIb3N0SW1wbF9oCisKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkNvbXBvc2l0b3JTZXR0aW5nczsKK2NsYXNzIFdlYkxheWVyOworY2xh
c3MgV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlOworCitjbGFzcyBXZWJMYXllclRyZWVIb3N0SW1w
bCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3QsIHB1YmxpYyBXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkxh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoV2ViTGF5ZXJUcmVlSG9zdERlbGVnYXRlKiwgY29uc3Qg
V2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkNvbXBvc2l0b3JTZXR0aW5ncyYpOworCitwcml2YXRl
OgorICAgIFdlYkxheWVyVHJlZUhvc3RJbXBsKFdlYkxheWVyVHJlZUhvc3REZWxlZ2F0ZSosIGNv
bnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MmKTsKKyAgICB2
aXJ0dWFsIH5XZWJMYXllclRyZWVIb3N0SW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3Vj
Y2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgorCisgICAgV2ViTGF5ZXJUcmVlSG9zdERlbGVn
YXRlKiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJMYXllclRyZWVIb3N0SW1wbF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109719</attachid>
            <date>2011-10-04 17:07:08 -0700</date>
            <delta_ts>2011-10-05 18:45:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111004170707.patch</filename>
            <type>text/plain</type>
            <size>62895</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY1NjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNzBhZWM5MTFlMmRkYjgy
M2E2NzgyZDg1MzAzM2Q3NTM3N2Q5OThjLi4wODVlMGNhOTQ4M2MyMzYyMTZmMjYzNWY4YTI1MzUx
ZTdmMjRmNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTAzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
V29yayB0b3dhcmRzIG1ha2luZyBQbGF0Zm9ybVdoZWVsRXZlbnQgaW1tdXRhYmxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBhMjFiYzY4MDhmODhjZjQ5N2E5YjdiYTM2NmUx
NzFlOTNmODk2ZTZkLi5iODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUxLDkgKzUxLDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNocm9taXVtKENDTGF5ZXJE
ZWxlZ2F0ZSopOwogCitwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2Vz
KCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjAwYjVlNGZjMjE4N2QwZWM1MDM4NTA3YzI1YzNlY2I1
ODJlNGNmMS4uZjJlYmJjNjdkOGRkMmMxZDg4YzljNjQ1ZTNjNGExMjQ1NGE3MDJkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjYgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJDb250ZW50TGF5ZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjp+V2ViQ29udGVudExheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIHB1
YmxpYy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyRGVsZWdhdGU6On5XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSk6CisgICAg
ICAgICogcHVibGljL1dlYkxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6V2ViTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6
OnRvQ29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dW53cmFwKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXI6OmNvbnN0VW53cmFwKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9X
ZWJMYXllckRlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckRlbGVn
YXRlOjp+V2ViTGF5ZXJEZWxlZ2F0ZSk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJlZVZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBvc2l0b3JTZXR0aW5nczo6V2Vi
Q29tcG9zaXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6On5X
ZWJMYXllclRyZWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6
Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRyZWVWaWV3RGVsZWdhdGUu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZTo6fldl
YkxheWVyVHJlZVZpZXdEZWxlZ2F0ZSk6CisgICAgICAgICogcHVibGljL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIHVpOjpU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YXNz
aWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJp
eCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVu
dExheWVyOjpkaXJ0eVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Oldl
YkNvbnRlbnRMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpvcGVyYXRvciBQYXNzUmVm
UHRyPENvbnRlbnRMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVu
dExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6On5XZWJD
b250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6cGFp
bnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6Om5vdGlm
eVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6fldlYkxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjplcXVhbHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEJvdW5kcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNr
c1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE1hc2tMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFjaXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0UG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9zaXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0
b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkxheWVySW1w
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6
OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6Om5vdGlmeVN5
bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21wb3NpdG9yU2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmFz
c2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmVxdWFscyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0Pik6CisgICAgICAgICogc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1w
bDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVW
aWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29t
cG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDogQWRkZWQuCisK
IDIwMTEtMTAtMDMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFR3ZWFrIFdlYkNvbXBvc2l0b3IgQVBJIGZvciBpbnB1dCBldmVudCBo
YW5kbGluZyB0byBleHByZXNzIHRocmVlIHBvc3NpYmxlIHN0YXRlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCmluZGV4IDY2MzBiMzUxMTdiMGQwMzY2ZDMwZGM5MjBiMmZkYzg2ZDAyY2M1NjAu
LjUzYjcwNDUzNThiMjE0ZGZmMzg2NjQzNDBlNzUwZGI3YTUwMjIyYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKQEAgLTEzMCw2ICsxMzAsOCBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29tcG9zaXRvckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNv
bXBvc2l0b3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb25zb2xlTWVzc2FnZS5o
JywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRlbnRMYXllci5oJywKKyAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkNvbnRlbnRMYXllckRlbGVnYXRlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29va2llLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29va2llSmFyLmgn
LApAQCAtMjE2LDYgKzIxOCwxMCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViTGFiZWxFbGVtZW50LmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTGF5ZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXllckRl
bGVnYXRlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oJywK
KyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkxvY2FsaXplZFN0cmluZy5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYk1lZGlhRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYk1lZGlhUGxheWVyLmgnLApAQCAtNDQ5LDYgKzQ1NSw5IEBACiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJDb21tb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0b3JJ
bXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW1wbC5oJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRlbnRMYXllci5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
Q29udGVudExheWVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNTdHJp
bmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkN1cnNvckluZm8uY3BwJywKQEAgLTUz
Myw2ICs1NDIsMTIgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYklucHV0RXZlbnRDb252ZXJz
aW9uLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViS2l0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJMYWJlbEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxh
eWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllckltcGwuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkxheWVyVHJlZVZpZXcuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyVHJlZVZp
ZXdJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5o
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyZGUxYWY5Nzk1
NzRiNmM4MTNkNzQzMjBjNTUyMWFkNDM0Zjc0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJDb250ZW50TGF5ZXJfaAorI2RlZmluZSBXZWJDb250ZW50TGF5
ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bTsgfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlOworY2xhc3MgV2Vi
RmxvYXRSZWN0OworY2xhc3MgV2ViTGF5ZXJEZWxlZ2F0ZTsKKworY2xhc3MgV2ViQ29udGVudExh
eWVyIDogcHVibGljIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViQ29udGVudExh
eWVyIGNyZWF0ZShXZWJMYXllckRlbGVnYXRlKiwgV2ViQ29udGVudExheWVyRGVsZWdhdGUqKTsK
KyAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KKyAgICBXZWJDb250ZW50TGF5ZXIoY29uc3QgV2Vi
Q29udGVudExheWVyJiBsYXllcikgOiBXZWJMYXllcihsYXllcikgeyB9CisgICAgdmlydHVhbCB+
V2ViQ29udGVudExheWVyKCkgeyB9CisgICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29u
c3QgV2ViQ29udGVudExheWVyJiBsYXllcikKKyAgICB7CisgICAgICAgIFdlYkxheWVyOjphc3Np
Z24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBXZWJGbG9hdFJlY3QmIGRpcnR5UmVjdCk7
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIFdFQktJVF9F
WFBPUlQgV2ViRmxvYXRSZWN0IGRpcnR5UmVjdCgpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJDb250ZW50TGF5ZXImIG9wZXJhdG9yPShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW0+Jik7Cisg
ICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVt
PigpIGNvbnN0OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYkNvbnRlbnRMYXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29udGVudExheWVyRGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWRkZDM1ODc0
MmZhN2MwNDQ0Y2VlYzVjNjkyZTYyY2E1MjgwNzFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyRGVsZWdhdGUuaApAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZV9oCisjZGVm
aW5lIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlX2gKKworI2luY2x1ZGUgIldlYkNhbnZhcy5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlJlY3Q7CisKK2NsYXNzIFdlYkNvbnRlbnRM
YXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNhbnZhcyosIGNv
bnN0IFdlYlJlY3QmIGNsaXApID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkNv
bnRlbnRMYXllckRlbGVnYXRlKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZjMzNjU0ZWEzZTc5MDEzMDMzZjVmYWY0
Mjg5YWEzNTA3ZTNkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJMYXllci5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJM
YXllcl9oCisjZGVmaW5lIFdlYkxheWVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBMYXll
ckNocm9taXVtOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRmxvYXRQb2ludDsK
K2NsYXNzIFdlYkxheWVyRGVsZWdhdGU7CitjbGFzcyBXZWJTaXplOworY2xhc3MgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg7CisKK2NsYXNzIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
V2ViTGF5ZXIgY3JlYXRlKFdlYkxheWVyRGVsZWdhdGUqKTsKKyAgICBXZWJMYXllcigpIHsgfQor
ICAgIFdlYkxheWVyKGNvbnN0IFdlYkxheWVyJiBsYXllcikgeyBhc3NpZ24obGF5ZXIpOyB9Cisg
ICAgdmlydHVhbCB+V2ViTGF5ZXIoKTsKKyAgICBXZWJMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdl
YkxheWVyJiBsYXllcikKKyAgICB7CisgICAgICAgIGFzc2lnbihsYXllcik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXImKSBjb25zdDsKKworICAgIFdFQktJVF9F
WFBPUlQgV2ViTGF5ZXIgcm9vdExheWVyKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJM
YXllciBwYXJlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkQ2hpbGQoY29u
c3QgV2ViTGF5ZXImKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5zZXJ0Q2hpbGQoY29uc3Qg
V2ViTGF5ZXImLCBzaXplX3QgaW5kZXgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXBsYWNl
Q2hpbGQoY29uc3QgV2ViTGF5ZXImIHJlZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXImIG5ld0xheWVy
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFdlYkZsb2F0UG9pbnQmKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIFdlYkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRBbmNob3JQb2ludFooZmxvYXQpOworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQg
YW5jaG9yUG9pbnRaKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Qm91bmRz
KGNvbnN0IFdlYlNpemUmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlNpemUgYm91bmRzKCkgY29u
c3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0OworCisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldE1hc2tMYXllcihjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9F
WFBPUlQgV2ViTGF5ZXIgbWFza0xheWVyKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgV0VCS0lUX0VYUE9SVCBmbG9hdCBvcGFjaXR5KCkg
Y29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0T3BhcXVlKGJvb2wpOworICAgIFdF
QktJVF9FWFBPUlQgYm9vbCBvcGFxdWUoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRQb3NpdGlvbihjb25zdCBXZWJGbG9hdFBvaW50Jik7CisgICAgV0VCS0lUX0VYUE9SVCBX
ZWJGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgdG8oKQorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNz
aWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7
CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJl
czsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJMYXllcihjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJMYXll
ciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVt
PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVt
PigpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIHVud3JhcCgpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCogY29uc3RVbndyYXAoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFQqPihtX3ByaXZhdGUuZ2V0
KCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJD
b3JlOjpMYXllckNocm9taXVtPiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkxheWVyJiBhLCBjb25zdCBXZWJMYXllciYgYikKK3sKKyAgICByZXR1cm4g
YS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViTGF5ZXIm
IGEsIGNvbnN0IFdlYkxheWVyJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJEZWxlZ2F0ZS5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
NWMzNDhiYWNiMWYzZmRjZjg1N2UwNTVlODE3ZTZjNDg0YmRiYjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckRlbGVnYXRlLmgKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJEZWxlZ2F0ZV9oCisjZGVmaW5lIFdl
YkxheWVyRGVsZWdhdGVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJE
ZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRzQ29tbWl0KCkg
PSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViTGF5ZXJEZWxlZ2F0ZSgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllckRlbGVnYXRl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJl
ZVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40Y2Q3MDY2MzAzNzFiNGI5MTQxMGI5NjdiZTA3Njg2YmI2NjE3YTliCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJU
cmVlVmlldy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZp
ZXdfaAorI2RlZmluZSBXZWJMYXllclRyZWVWaWV3X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NTZXR0aW5nczsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZTsK
K2NsYXNzIFdlYlNpemU7CisKK3N0cnVjdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MgeworICAgIFdl
YkNvbXBvc2l0b3JTZXR0aW5ncygpCisgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhm
YWxzZSkKKyAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQorICAgICAgICAg
ICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKSB7IH0KKworICAgIGJvb2wgYWNjZWxl
cmF0ZVBhaW50aW5nOworICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOworICAgIGJvb2wgZW5h
YmxlQ29tcG9zaXRvclRocmVhZDsKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBvcGVy
YXRvciBXZWJDb3JlOjpDQ1NldHRpbmdzKCkgY29uc3Q7CisjZW5kaWYKK307CisKK2NsYXNzIFdl
YkxheWVyVHJlZVZpZXcgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJMYXllclRyZWVWaWV3IGNy
ZWF0ZShXZWJMYXllclRyZWVWaWV3RGVsZWdhdGUqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29u
c3QgV2ViQ29tcG9zaXRvclNldHRpbmdzJik7CisgICAgV2ViTGF5ZXJUcmVlVmlldygpIHsgfQor
ICAgIFdlYkxheWVyVHJlZVZpZXcoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbGF5ZXIpIHsgYXNz
aWduKGxheWVyKTsgfQorICAgIH5XZWJMYXllclRyZWVWaWV3KCkgeyByZXNldCgpOyB9CisgICAg
V2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGxheWVy
KQorICAgIHsKKyAgICAgICAgYXNzaWduKGxheWVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgYXNzaWduKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKTsKKyAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgZXF1YWxzKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKSBjb25zdDsKKworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBjb21wb3NpdGUoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Vmll
d3BvcnQoY29uc3QgV2ViU2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdl
YlNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q+Jik7CisgICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7CisgICAgb3BlcmF0b3Ig
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdDsKKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q+IG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViTGF5
ZXJUcmVlVmlldyYgYSwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgYikKK3sKKyAgICByZXR1cm4g
YS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViTGF5ZXJU
cmVlVmlldyYgYSwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgYikKK3sKKyAgICByZXR1cm4gIShh
ID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVy
VHJlZVZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
TGF5ZXJUcmVlVmlld0RlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJMYXllclRyZWVWaWV3RGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjA5ZjAzYjYwODczYTY1ZTc2
YThkZDI3Yzg3Nzk4YjU1YTFiNjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0RlbGVnYXRlLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlVmlld0RlbGVnYXRlX2gKKyNkZWZpbmUgV2Vi
TGF5ZXJUcmVlVmlld0RlbGVnYXRlX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdlYlNpemU7CitjbGFzcyBXZWJUaHJlYWQ7CisKK2Ns
YXNzIFdlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViU2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFs
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVDb250ZXh0M0QoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpID0gMDsKKworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgfldlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZSgpIHsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllclRyZWVWaWV3RGVsZWdhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmYxMzYyNjY3MzMwY2E3OTBkYjlmNzU2MzFhZWEzMzUyZjY0
YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXhfaAorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNlbHNlCisjaW5jbHVkZSA8dWkvZ2Z4L3RyYW5zZm9ybS5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB7
CitwdWJsaWM6CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZG91YmxlIG0xMSwgZG91Ymxl
IG0xMiwgZG91YmxlIG0xMywgZG91YmxlIG0xNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgbTIxLCBkb3VibGUgbTIyLCBkb3VibGUgbTIzLCBkb3VibGUgbTI0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtMzEsIGRvdWJsZSBtMzIsIGRvdWJsZSBtMzMs
IGRvdWJsZSBtMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG00MSwgZG91
YmxlIG00MiwgZG91YmxlIG00MywgZG91YmxlIG00NCkgeworICAgICAgICBzZXRNYXRyaXgobTEx
LCBtMTIsIG0xMywgbTE0LCBtMjEsIG0yMiwgbTIzLCBtMjQsIG0zMSwgbTMyLCBtMzMsIG0zNCwg
bTQxLCBtNDIsIG00MywgbTQ0KTsKKyAgICB9CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIHsgYXNzaWduKHQpOyB9CisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCkKKyAgICB7CisgICAgICAgIGFzc2lnbih0KTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQorICAgIHsK
KyAgICAgICAgc2V0TWF0cml4KHQubTExKCksIHQubTEyKCksIHQubTEzKCksIHQubTE0KCksCisg
ICAgICAgICAgICAgICAgICB0Lm0yMSgpLCB0Lm0yMigpLCB0Lm0yMygpLCB0Lm0yNCgpLAorICAg
ICAgICAgICAgICAgICAgdC5tMzEoKSwgdC5tMzIoKSwgdC5tMzMoKSwgdC5tMzQoKSwKKyAgICAg
ICAgICAgICAgICAgIHQubTQxKCksIHQubTQyKCksIHQubTQzKCksIHQubTQ0KCkpOworICAgIH0K
KworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgodC5tMTEo
KSwgdC5tMTIoKSwgdC5tMTMoKSwgdC5tMTQoKSwKKyAgICAgICAgICAgICAgICAgIHQubTIxKCks
IHQubTIyKCksIHQubTIzKCksIHQubTI0KCksCisgICAgICAgICAgICAgICAgICB0Lm0zMSgpLCB0
Lm0zMigpLCB0Lm0zMygpLCB0Lm0zNCgpLAorICAgICAgICAgICAgICAgICAgdC5tNDEoKSwgdC5t
NDIoKSwgdC5tNDMoKSwgdC5tNDQoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBvcGVyYXRvciBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgobV9kYXRhWzBd
WzBdLCBtX2RhdGFbMF1bMV0sIG1fZGF0YVswXVsyXSwgbV9kYXRhWzBdWzNdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhWzFdWzBdLCBtX2RhdGFb
MV1bMV0sIG1fZGF0YVsxXVsyXSwgbV9kYXRhWzFdWzNdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhWzJdWzBdLCBtX2RhdGFbMl1bMV0sIG1fZGF0
YVsyXVsyXSwgbV9kYXRhWzJdWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9kYXRhWzNdWzBdLCBtX2RhdGFbM11bMV0sIG1fZGF0YVszXVsyXSwgbV9k
YXRhWzNdWzNdKTsKKyAgICB9CisjZWxzZQorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGNv
bnN0IHVpOjpUcmFuc2Zvcm0mIHQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgodC5tYXRyaXgo
KSk7CisgICAgfQorCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9wZXJhdG9yPShjb25z
dCB1aTo6VHJhbnNmb3JtJiB0KQorICAgIHsKKyAgICAgICAgc2V0TWF0cml4KHQubWF0cml4KCkp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgdWk6OlRyYW5z
Zm9ybSgpIGNvbnN0CisgICAgeworICAgICAgICB1aTo6VHJhbnNmb3JtIHQ7CisgICAgICAgIFNr
TWF0cml4NDQmIG1hdHJpeCA9IHQubWF0cml4KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNDsgKytpKQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opCisgICAg
ICAgICAgICAgICAgbWF0cml4LnNldChqLCBpLCBTa0RvdWJsZVRvTVNjYWxhcihtX2RhdGFbaV1b
al0pKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
dm9pZCBhc3NpZ24oY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCisgICAgeworICAg
ICAgICBzZXRNYXRyaXgodC5tX2RhdGFbMF1bMF0sIHQubV9kYXRhWzBdWzFdLCB0Lm1fZGF0YVsw
XVsyXSwgdC5tX2RhdGFbMF1bM10sCisgICAgICAgICAgICAgICAgICB0Lm1fZGF0YVsxXVswXSwg
dC5tX2RhdGFbMV1bMV0sIHQubV9kYXRhWzFdWzJdLCB0Lm1fZGF0YVsxXVszXSwKKyAgICAgICAg
ICAgICAgICAgIHQubV9kYXRhWzJdWzBdLCB0Lm1fZGF0YVsyXVsxXSwgdC5tX2RhdGFbMl1bMl0s
IHQubV9kYXRhWzJdWzNdLAorICAgICAgICAgICAgICAgICAgdC5tX2RhdGFbM11bMF0sIHQubV9k
YXRhWzNdWzFdLCB0Lm1fZGF0YVszXVsyXSwgdC5tX2RhdGFbM11bM10pOworICAgIH0KKworICAg
IHZvaWQgc2V0TWF0cml4KGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRvdWJs
ZSBtMTQsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91Ymxl
IG0yMywgZG91YmxlIG0yNCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgbTMxLCBkb3VibGUg
bTMyLCBkb3VibGUgbTMzLCBkb3VibGUgbTM0LAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSBt
NDEsIGRvdWJsZSBtNDIsIGRvdWJsZSBtNDMsIGRvdWJsZSBtNDQpCisgICAgeworICAgICAgICBt
X2RhdGFbMF1bMF0gPSBtMTE7CisgICAgICAgIG1fZGF0YVswXVsxXSA9IG0xMjsKKyAgICAgICAg
bV9kYXRhWzBdWzJdID0gbTEzOworICAgICAgICBtX2RhdGFbMF1bM10gPSBtMTQ7CisgICAgICAg
IG1fZGF0YVsxXVswXSA9IG0yMTsKKyAgICAgICAgbV9kYXRhWzFdWzFdID0gbTIyOworICAgICAg
ICBtX2RhdGFbMV1bMl0gPSBtMjM7CisgICAgICAgIG1fZGF0YVsxXVszXSA9IG0yNDsKKyAgICAg
ICAgbV9kYXRhWzJdWzBdID0gbTMxOworICAgICAgICBtX2RhdGFbMl1bMV0gPSBtMzI7CisgICAg
ICAgIG1fZGF0YVsyXVsyXSA9IG0zMzsKKyAgICAgICAgbV9kYXRhWzJdWzNdID0gbTM0OworICAg
ICAgICBtX2RhdGFbM11bMF0gPSBtNDE7CisgICAgICAgIG1fZGF0YVszXVsxXSA9IG00MjsKKyAg
ICAgICAgbV9kYXRhWzNdWzJdID0gbTQzOworICAgICAgICBtX2RhdGFbM11bM10gPSBtNDQ7Cisg
ICAgfQorCisjaWYgIVdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZvaWQgc2V0TWF0cml4KGNv
bnN0IFNrTWF0cml4NDQmIG0pCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKQorICAgICAgICAg
ICAgICAgIG1fZGF0YVtpXVtqXSA9IFNrTVNjYWxhclRvRG91YmxlKG0uZ2V0KGosIGkpKTsKKyAg
ICB9CisjZW5kaWYKKworICAgIGRvdWJsZSBtX2RhdGFbNF1bNF07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQxYjE0NWE1NjE4ZjRiYTNlZGZmNGFmZWEzN2JlYTlkMDQ4MDYwMTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29u
dGVudExheWVyLmgiCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIldlYkNvbnRlbnRMYXllckltcGwuaCIKKyNpbmNsdWRlICJXZWJGbG9hdFJlY3QuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb250
ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSogZGVsZWdh
dGUsIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKiBjb250ZW50RGVsZWdhdGUpCit7CisgICAgcmV0
dXJuIFdlYkNvbnRlbnRMYXllcihXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoZGVsZWdhdGUs
IGNvbnRlbnREZWxlZ2F0ZSkpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIHVud3JhcDxDb250
ZW50TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3Zv
aWQgV2ViQ29udGVudExheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHVud3JhcDxDb250
ZW50TGF5ZXJDaHJvbWl1bT4oKS0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK1dlYkZsb2F0UmVj
dCBXZWJDb250ZW50TGF5ZXI6OmRpcnR5UmVjdCgpCit7CisgICAgcmV0dXJuIFdlYkZsb2F0UmVj
dCh1bndyYXA8Q29udGVudExheWVyQ2hyb21pdW0+KCktPmRpcnR5UmVjdCgpKTsKK30KKworV2Vi
Q29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxDb250ZW50TGF5
ZXJDaHJvbWl1bT4mIG5vZGUpCisgICAgOiBXZWJMYXllcihub2RlKQoreworfQorCitXZWJDb250
ZW50TGF5ZXImIFdlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9IG5vZGU7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q29udGVudExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNv
bnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVu
dExheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA4MDMwYWZlM2Q5ZjI0ZjA0ZmRhM2Q4NzcwNjNj
MDA4MTk5NjIwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAi
V2ViQ29udGVudExheWVyRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJXZWJMYXllckRlbGVnYXRlLmgi
CisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2lmIFdFQktJVF9VU0lOR19TS0lBCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBs
PiBXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUs
IFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKiBjb250ZW50RGVsZWdhdGUpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGRlbGVnYXRlLCBjb250ZW50RGVsZWdh
dGUpKTsKK30KKworV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbChXZWJM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViQ29udGVudExheWVyRGVsZWdhdGUqIGNvbnRlbnRE
ZWxlZ2F0ZSkKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVtKHRoaXMpCisgICAgLCBtX2RlbGVn
YXRlKGRlbGVnYXRlKQorICAgICwgbV9jb250ZW50RGVsZWdhdGUoY29udGVudERlbGVnYXRlKQor
eworfQorCitXZWJDb250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVudExheWVySW1wbCgpCit7Cit9
CisKK2Jvb2wgV2ViQ29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZW50RGVsZWdhdGUgJiYgbV9jb250ZW50RGVsZWdhdGUtPmRyYXdzQ29u
dGVudCgpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIW1fY29u
dGVudERlbGVnYXRlKQorICAgICAgICByZXR1cm47CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAg
ICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyNl
bGlmIFdFQktJVF9VU0lOR19DRworICAgIFdlYkNhbnZhcyogY2FudmFzID0gZ2MucGxhdGZvcm1D
b250ZXh0KCk7CisjZW5kaWYKKyAgICBtX2NvbnRlbnREZWxlZ2F0ZS0+cGFpbnRDb250ZW50cyhj
YW52YXMsIFdlYlJlY3QoY2xpcCkpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6Om5v
dGlmeVN5bmNSZXF1aXJlZCgpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVs
ZWdhdGUtPm5vdGlmeU5lZWRzQ29tbWl0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFkYjUzYTIzNDM1MTg4YjM1YTdiZDBjZDFmZGViNGY0ODhmNWQ1NGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJ
bXBsLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29udGVudExheWVySW1w
bF9oCisjZGVmaW5lIFdlYkNvbnRlbnRMYXllckltcGxfaAorCisjaW5jbHVkZSAiQ29udGVudExh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyRGVsZWdhdGU7CitjbGFzcyBXZWJDb250ZW50TGF5ZXJE
ZWxlZ2F0ZTsKKworY2xhc3MgV2ViQ29udGVudExheWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpD
b250ZW50TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRl
KFdlYkxheWVyRGVsZWdhdGUqLCBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogY29udGVudERlbGVn
YXRlKTsKKworcHJvdGVjdGVkOgorICAgIFdlYkNvbnRlbnRMYXllckltcGwoV2ViTGF5ZXJEZWxl
Z2F0ZSosIFdlYkNvbnRlbnRMYXllckRlbGVnYXRlKiBjb250ZW50RGVsZWdhdGUpOworICAgIHZp
cnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOworCisgICAgV2ViTGF5ZXJEZWxlZ2F0ZSogbV9k
ZWxlZ2F0ZTsKKyAgICBXZWJDb250ZW50TGF5ZXJEZWxlZ2F0ZSogbV9jb250ZW50RGVsZWdhdGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkNvbnRlbnRMYXll
ckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY1OTdjYzljMDkyYjEwMTRjNmFlYTUwMGM1ZjQxZWNkOGViNDIwNmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKQEAgLTAsMCArMSwy
MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIK
KworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJXZWJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiV2ViTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1
ZGUgIldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViTGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJM
YXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXIoV2ViTGF5ZXJJ
bXBsOjpjcmVhdGUoZGVsZWdhdGUpKTsKK30KKworV2ViTGF5ZXI6On5XZWJMYXllcigpCit7Cisg
ICAgcmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0
ZS5yZXNldCgpOworfQorCit2b2lkIFdlYkxheWVyOjphc3NpZ24oY29uc3QgV2ViTGF5ZXImIG90
aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKworYm9vbCBXZWJM
YXllcjo6ZXF1YWxzKGNvbnN0IFdlYkxheWVyJiBuKSBjb25zdAoreworICAgIHJldHVybiAobV9w
cml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKK30KKworV2ViTGF5ZXIgV2ViTGF5
ZXI6OnJvb3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyKGNvbnN0X2Nhc3Q8
TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cm9vdExheWVyKCkpKTsKK30KKworV2ViTGF5ZXIg
V2ViTGF5ZXI6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyKGNvbnN0X2Nh
c3Q8TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cGFyZW50KCkpKTsKK30KKwordm9pZCBXZWJM
YXllcjo6YWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxkKQoreworICAgIG1fcHJpdmF0ZS0+
YWRkQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIFdlYkxheWVyOjppbnNlcnRDaGlsZChjb25zdCBX
ZWJMYXllciYgY2hpbGQsIHNpemVfdCBpbmRleCkKK3sKKyAgICBtX3ByaXZhdGUtPmluc2VydENo
aWxkKGNoaWxkLCBpbmRleCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlcGxhY2VDaGlsZChjb25z
dCBXZWJMYXllciYgcmVmZXJlbmNlLCBjb25zdCBXZWJMYXllciYgbmV3TGF5ZXIpCit7CisgICAg
V2ViTGF5ZXIgcmVmID0gcmVmZXJlbmNlOworICAgIG1fcHJpdmF0ZS0+cmVwbGFjZUNoaWxkKHJl
Zi51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSwgbmV3TGF5ZXIpOworfQorCit2b2lkIFdlYkxheWVy
OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUZyb21QYXJlbnQo
KTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQoreworICAgIG1fcHJp
dmF0ZS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0QW5jaG9y
UG9pbnQoY29uc3QgV2ViRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpCit7CisgICAgbV9wcml2YXRl
LT5zZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7Cit9CisKK1dlYkZsb2F0UG9pbnQgV2ViTGF5
ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViRmxvYXRQb2ludChtX3By
aXZhdGUtPmFuY2hvclBvaW50KCkpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRBbmNob3JQb2lu
dFooZmxvYXQgYW5jaG9yUG9pbnRaKQoreworICAgIG1fcHJpdmF0ZS0+c2V0QW5jaG9yUG9pbnRa
KGFuY2hvclBvaW50Wik7Cit9CisKK2Zsb2F0IFdlYkxheWVyOjphbmNob3JQb2ludFooKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFuY2hvclBvaW50WigpOworfQorCit2b2lkIFdl
YkxheWVyOjpzZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvdW5kcyhzaXplKTsKK30KKworV2ViU2l6ZSBXZWJMYXllcjo6Ym91bmRzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPmJvdW5kcygpKTsKK30KKwordm9pZCBX
ZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tzVG9Cb3VuZHMpCit7CisgICAgbV9w
cml2YXRlLT5zZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3VuZHMpOworfQorCitib29sIFdlYkxh
eWVyOjptYXNrc1RvQm91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXNr
c1RvQm91bmRzKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE1hc2tMYXllcihjb25zdCBXZWJM
YXllciYgbWFza0xheWVyKQoreworICAgIFdlYkxheWVyIHJlZiA9IG1hc2tMYXllcjsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5zZXRNYXNrTGF5ZXIocmVmLnVud3JhcDxMYXllckNocm9taXVtPigp
KTsKK30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6Om1hc2tMYXllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkxheWVyKG1fcHJpdmF0ZS0+bWFza0xheWVyKCkpOworfQorCit2b2lkIFdlYkxheWVy
OjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgbV9wcml2YXRlLT5zZXRPcGFjaXR5
KG9wYWNpdHkpOworfQorCitmbG9hdCBXZWJMYXllcjo6b3BhY2l0eSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+b3BhY2l0eSgpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRPcGFx
dWUoYm9vbCBvcGFxdWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRPcGFxdWUob3BhcXVlKTsKK30K
KworYm9vbCBXZWJMYXllcjo6b3BhcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5vcGFxdWUoKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgV2ViRmxv
YXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wcml2YXRlLT5zZXRQb3NpdGlvbihwb3NpdGlv
bik7Cit9CisKK1dlYkZsb2F0UG9pbnQgV2ViTGF5ZXI6OnBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV2ViRmxvYXRQb2ludChtX3ByaXZhdGUtPnBvc2l0aW9uKCkpOworfQorCit2b2lk
IFdlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1fcHJpdmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViTGF5ZXI6OnN1Ymxh
eWVyVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgobV9wcml2YXRlLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKK30KKwordm9pZCBXZWJMYXllcjo6
c2V0VHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7
CisgICAgbV9wcml2YXRlLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKK30KKworV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggV2ViTGF5ZXI6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+dHJhbnNmb3JtKCkpOworfQorCitX
ZWJMYXllcjo6V2ViTGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkK
KyAgICA6IG1fcHJpdmF0ZShub2RlKQoreworfQorCitXZWJMYXllciYgV2ViTGF5ZXI6Om9wZXJh
dG9yPShjb25zdCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+JiBub2RlKQoreworICAgIG1fcHJp
dmF0ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJMYXllcjo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDE1OTVjMDM3MDBmNjgxZTEz
MmM2YWYyZmExZWM0NmI1Y2EyYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgorCisjaW5jbHVkZSAi
V2ViTGF5ZXJEZWxlZ2F0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBXZWJMYXllckltcGw6OmNy
ZWF0ZShXZWJMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYkxheWVySW1wbChkZWxlZ2F0ZSkpOworfQorCitXZWJMYXllckltcGw6OldlYkxheWVy
SW1wbChXZWJMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkgOiBMYXllckNocm9taXVtKHRoaXMpLCBt
X2RlbGVnYXRlKGRlbGVnYXRlKQoreworfQorCitXZWJMYXllckltcGw6On5XZWJMYXllckltcGwo
KQoreworfQorCitib29sIFdlYkxheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApCit7Cit9CisKK3ZvaWQgV2ViTGF5
ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlmIChtX2RlbGVnYXRlKQorICAg
ICAgICBtX2RlbGVnYXRlLT5ub3RpZnlOZWVkc0NvbW1pdCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2NlMTliNWVkODI0ODliZTZhNTJmNzNkNzRiMDdiNWNjNmMwMzU3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVySW1wbF9oCisjZGVmaW5lIFdlYkxh
eWVySW1wbF9oCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllckRlbGVnYXRl
OworCitjbGFzcyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwg
cHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJEZWxlZ2F0ZSopOworCitwcm90
ZWN0ZWQ6CisgICAgV2ViTGF5ZXJJbXBsKFdlYkxheWVyRGVsZWdhdGUqKTsKKyAgICB2aXJ0dWFs
IH5XZWJMYXllckltcGwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVN5bmNSZXF1aXJlZCgpOworCisgICAgV2ViTGF5ZXJEZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJJbXBsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGJhOGU2ZDAwOGU2ZDQxMjA1NzFlYTkxYjI0OWM0NDFlNDFjNDI3MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3Bw
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkxheWVyVHJlZVZpZXcuaCIKKworI2luY2x1ZGUgIldlYkxheWVyVHJlZVZpZXdJbXBsLmgi
CisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJDb21w
b3NpdG9yU2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAoreworICAgIENDU2V0
dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxl
cmF0ZVBhaW50aW5nOworICAgIHNldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0
ZU9mZnNjcmVlbjsKKworICAgIC8vIEZJWE1FOiBjb21wb3NpdG9yIHRocmVhZCBpc24ndCBzdXBw
b3J0ZWQgY3VycmVudGx5LgorICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBm
YWxzZTsKKworICAgIC8vIEZJWE1FOiBzaG93RlBTQ291bnRlciAvIHNob3dQbGF0Zm9ybUxheWVy
VHJlZSBhcmVuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KKyAgICBzZXR0aW5ncy5zaG93RlBTQ291
bnRlciA9IGZhbHNlOworICAgIHNldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IGZhbHNl
OworICAgIHJldHVybiBzZXR0aW5nczsKK30KKworV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRy
ZWVWaWV3OjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0RlbGVnYXRlKiBkZWxlZ2F0ZSwgY29uc3Qg
V2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkNvbXBvc2l0b3JTZXR0aW5ncyYgc2V0dGluZ3MpCit7
CisgICAgcmV0dXJuIFdlYkxheWVyVHJlZVZpZXcoV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0
ZShkZWxlZ2F0ZSwgcm9vdCwgc2V0dGluZ3MpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3
OjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJU
cmVlVmlldzo6YXNzaWduKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIG90aGVyKQoreworICAgIG1f
cHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0ZTsKK30KKworYm9vbCBXZWJMYXllclRyZWVWaWV3Ojpl
cXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
cHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJU
cmVlVmlldzo6Y29tcG9zaXRlKCkKK3sKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
ICAgIG1fcHJpdmF0ZS0+Y29tcG9zaXRlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJMYXllclRy
ZWVWaWV3OjpzZXRWaWV3cG9ydChjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpCit7CisgICAg
bV9wcml2YXRlLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUpOworfQorCitXZWJTaXplIFdlYkxh
eWVyVHJlZVZpZXc6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUo
bV9wcml2YXRlLT52aWV3cG9ydFNpemUoKSk7Cit9CisKK1dlYkxheWVyVHJlZVZpZXc6OldlYkxh
eWVyVHJlZVZpZXcoY29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQorICAg
IDogbV9wcml2YXRlKG5vZGUpCit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXcmIFdlYkxheWVyVHJl
ZVZpZXc6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUp
Cit7CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkxh
eWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNThiN2JmMjBjMDQyNzNkYjUzOTA5MDQ3NjI1M2FiZmJkOGFj
OTQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3SW1wbC5oIgorCisjaW5jbHVkZSAi
Q0NUaHJlYWRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3Lmgi
CisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlld0RlbGVnYXRlLmgiCisjaW5jbHVkZSAiV2ViU2l6
ZS5oIgorI2luY2x1ZGUgIldlYlRocmVhZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+
IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0RlbGVnYXRlKiBk
ZWxlZ2F0ZSwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkNvbXBvc2l0b3JTZXR0aW5n
cyYgc2V0dGluZ3MpCit7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBob3N0ID0g
YWRvcHRSZWYobmV3IFdlYkxheWVyVHJlZVZpZXdJbXBsKGRlbGVnYXRlLCByb290LCBzZXR0aW5n
cykpOworICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gaG9zdDsKK30KKworV2ViTGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZp
ZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZSogZGVsZWdhdGUsIGNvbnN0IFdlYkxheWVy
JiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MmIHNldHRpbmdzKSAKKyAgICA6IEND
TGF5ZXJUcmVlSG9zdCh0aGlzLCByb290LCBzZXR0aW5ncykKKyAgICAsIG1fZGVsZWdhdGUoZGVs
ZWdhdGUpCit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXdJbXBsOjp+V2ViTGF5ZXJUcmVlVmlld0lt
cGwoKQoreworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAg
bV9kZWxlZ2F0ZS0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQg
V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgZGVsdGEpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVsZWdhdGUt
PmFwcGx5U2Nyb2xsRGVsdGEoV2ViU2l6ZShkZWx0YSkpOworfQorCitQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENv
bnRleHQzRCgpCit7CisgICAgaWYgKCFtX2RlbGVnYXRlKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBhZG9wdFB0cihtX2Rl
bGVnYXRlLT5jcmVhdGVDb250ZXh0M0QoKSk7CisgICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0
dHJpYnV0ZXMgPSB3ZWJDb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbHBo
YSA9IHdlYkF0dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJp
YnV0ZXMuZGVwdGg7CisgICAgYXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVu
Y2lsOworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7
CisgICAgYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11
bHRpcGxpZWRBbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3Mg
PSB3ZWJBdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3M7CisgICAgYXR0cmlidXRl
cy5ub0V4dGVuc2lvbnMgPSB3ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5zaW9uczsKKyAgICBhdHRyaWJ1
dGVzLnNoYXJlUmVzb3VyY2VzID0gd2ViQXR0cmlidXRlcy5zaGFyZVJlc291cmNlczsKKyAgICBh
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlOworCisgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHN0eWxlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93OworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6VGhyZWFk
VXNhZ2UgdXNhZ2UgPSBzZXR0aW5ncygpLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCA6IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkOworICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRl
eHQucmVsZWFzZSgpLCBhdHRyaWJ1dGVzLCAwLCBzdHlsZSwgdXNhZ2UpOworfQorCit2b2lkIFdl
YkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nl
c3MpCit7CisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1fZGVsZWdhdGUtPmRpZFJlY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOworfQorCisjaWYgIVVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkK
K3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+c2NoZWR1bGVDb21w
b3NpdGUoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc0ZDc2MDY5MDFhOTk3OTY2MjEzOTE2MDdiNjMxNTQyOGE1MzkzZmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZpZXdJbXBsX2gKKyNk
ZWZpbmUgV2ViTGF5ZXJUcmVlVmlld0ltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJDb21wb3NpdG9yU2V0dGluZ3M7CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdl
YkxheWVyVHJlZVZpZXdEZWxlZ2F0ZTsKKworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0ltcGwgOiBw
dWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXllclRy
ZWVWaWV3SW1wbD4gY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdEZWxlZ2F0ZSosIGNvbnN0IFdlYkxh
eWVyJiByb290LCBjb25zdCBXZWJDb21wb3NpdG9yU2V0dGluZ3MmKTsKKworcHJpdmF0ZToKKyAg
ICBXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3RGVsZWdhdGUqLCBjb25zdCBX
ZWJMYXllciYgcm9vdCwgY29uc3QgV2ViQ29tcG9zaXRvclNldHRpbmdzJik7CisgICAgdmlydHVh
bCB+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExh
eW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9s
bERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNj
ZXNzKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCisKKyAgICBXZWJMYXllclRyZWVWaWV3RGVsZWdh
dGUqIG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYkxheWVyVHJlZVZpZXdJbXBsX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109899</attachid>
            <date>2011-10-05 18:45:45 -0700</date>
            <delta_ts>2011-10-06 14:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111005184544.patch</filename>
            <type>text/plain</type>
            <size>68377</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZWQyNGRjNGU3ZWEzYjUw
OWYyY2IxYzUwNmM0NzAwMjk2MzNhNDA4Li44MThiY2MyNTljYzk2Zjk2NGUxZGU5MGQ2MDMwYTRk
ZWEyZjJkNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
TW92ZSBjb2RlIGludG8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmJlZ2luU2Nyb2xsR2Vz
dHVyZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBhMjFiYzY4MDhmODhj
ZjQ5N2E5YjdiYTM2NmUxNzFlOTNmODk2ZTZkLi5iODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUy
ODAyNDBmMzgwOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTUxLDkg
KzUxLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eSgpOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENvbnRlbnRMYXllckNo
cm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwogCitwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBj
bGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJl
ZUhvc3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTk5MjI1MDY5ZDdlNDczMmFm
ZWRkZmJiMjJmYzFkMThiZTRjNTUzYS4uMzgwODczM2M4NGE3NDIxMDc2YjZkZGMyM2Q0ZGYwMzJl
OTA0NGQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzIgQEAKKzIw
MTEtMTAtMDUgIEFudG9pbmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFdlYmtpdCBBUEkgZm9yIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJDb250
ZW50TGF5ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6V2Vi
Q29udGVudExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjp+V2ViQ29u
dGVudExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIHB1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckNsaWVudDo6fldlYkNvbnRlbnRMYXllckNsaWVu
dCk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6V2ViTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRvKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OnRvQ29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dW53cmFwKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OmNvbnN0VW53cmFwKToKKyAgICAgICAgKFdlYktp
dDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAq
IHB1YmxpYy9XZWJMYXllckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJDbGllbnQ6On5XZWJMYXllckNsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJl
ZVZpZXcuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OlNldHRp
bmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OldlYkxh
eWVyVHJlZVZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojp+V2ViTGF5
ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVy
YXRvciE9KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6fldlYkxheWVyVHJl
ZVZpZXdDbGllbnQpOgorICAgICAgICAqIHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6Om9wZXJhdG9yPSk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bnRlbnRMYXllcjo6ZGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVy
OjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFz
c1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPik6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1w
bDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6V2ViQ29u
dGVudExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6On5X
ZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1w
bDo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1w
bDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6Om5v
dGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDog
QWRkZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6fldlYkxh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjplcXVhbHMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphZGRDaGls
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGlsZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVB
bGxDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEJvdW5kcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpt
YXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE1hc2tMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFj
aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0
UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3Bl
cmF0b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkxheWVy
SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcklt
cGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6Om5vdGlm
eVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
Vmlldzo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6ZXF1YWxz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0Pik6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRl
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6
OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwu
aDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
b3BlcmF0b3IgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE1hdHJpeCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBTa01hdHJpeDQ0KToKKwogMjAxMS0xMC0wNCAg
U2NvdHQgR3JhaGFtICA8c2NvdHRtZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIEdBTUVQ
QUQgZmVhdHVyZSBmbGFnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNTI0NDAzMzg4
YjE0NGRkZWI1MmM5NmJkOGFhYjgxNmEwMmNmOTM5Mi4uYTM1ODlkZjRjMGJmMDA3NGRhM2EwOTU3
ODkzODdiZmFkZWFjNzQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTMwLDYg
KzEzMCw4IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yQ2xpZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvci5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkNvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29udGVudExheWVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGVu
dExheWVyQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGV4dE1lbnVE
YXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29va2llLmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29va2llSmFyLmgnLApAQCAtMjE2LDYgKzIxOCwxMCBAQAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGFi
ZWxFbGVtZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXIuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXllckNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkxheWVyVHJlZVZpZXcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTG9jYWxp
emVkU3RyaW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFFbGVtZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCkBAIC00NDksNiAr
NDU1LDkgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ29tcG9zaXRvckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkNvbXBvc2l0b3JJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQ29udGVudExh
eWVyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCcs
CisgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ3Vyc29ySW5mby5jcHAnLApAQCAtNTMzLDYgKzU0MiwxMiBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJLaXQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkxhYmVsRWxlbWVudC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkxheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmgn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVk
aWFFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVu
dEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bC5oJywKQEAgLTU5MCw2ICs2MDUsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RyaW5n
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJUZXh0UnVuLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJUaHJlYWRTYWZlRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVS
TC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJMTG9hZFRpbWluZy5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViVVJMUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGI1NjFiNzcz
MGIwMzY2ZWU2NzA2NjI2NWY2MDczMDZlMTU1ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViQ29udGVudExheWVyX2gKKyNkZWZpbmUgV2ViQ29udGVudExh
eWVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OworY2xhc3Mg
V2ViQ29udGVudExheWVySW1wbDsKK2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYkxheWVy
Q2xpZW50OworCitjbGFzcyBXZWJDb250ZW50TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50Kiwg
V2ViQ29udGVudExheWVyQ2xpZW50Kik7CisKKyAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KKyAg
ICBXZWJDb250ZW50TGF5ZXIoY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikgOiBXZWJMYXll
cihsYXllcikgeyB9CisgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVyKCkgeyB9CisgICAgV2Vi
Q29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikKKyAg
ICB7CisgICAgICAgIFdlYkxheWVyOjphc3NpZ24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBsYXllciBkcmF3cyBpdCBjb250
ZW50IHdoZW4gY29tcG9zaXRpbmcuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERyYXdzQ29u
dGVudChib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZHJhd3NDb250ZW50KCk7CisKKyAg
ICAvLyBTZXRzIGEgcmVnaW9uIG9mIHRoZSBsYXllciBhcyBkaXJ0eSwgaS5lLiBuZWVkcyB0byB1
cGRhdGUgaXRzIGNvbnRlbnQuCisgICAgLy8gVGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlydHkg
cmVjdCB3aWxsIGJlIHBhc3NlZCB0byBvbmUgb3IgbW9yZSBjYWxscyB0bworICAgIC8vIFdlYkNv
bnRlbnRMYXllckNsaWVudDo6cGFpbnRDb250ZW50cyBiZWZvcmUgdGhlIGNvbXBvc2l0aW5nIHBh
c3Mgb2NjdXJzLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOworCisgICAgLy8gU2V0cyB0aGUgZW50aXJlIGxheWVy
IGFzIGRpcnR5LCBpLmUuIG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9h
dFJlY3QgZGlydHlSZWN0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJD
b250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7
CisgICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvbnRlbnRMYXllckltcGw+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
bnRlbnRMYXllckltcGw+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWI0YmUwY2E3N2ZjNmUzOWY3ODg0ODc2YjFiY2M2YzQzZThjNmI5YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllckNsaWVudF9o
CisjZGVmaW5lIFdlYkNvbnRlbnRMYXllckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJSZWN0OworCitjbGFzcyBXZWJDb250
ZW50TGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFBhaW50cyB0aGUgY29udGVudCBhcmVh
IGZvciB0aGUgbGF5ZXIsIHR5cGljYWxseSBkaXJ0eSByZWN0cyBzdWJtaXR0ZWQKKyAgICAvLyB0
aHJvdWdoIFdlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5LCBzdWJtaXR0aW5nIGRyYXdp
bmcgY29tbWFuZHMKKyAgICAvLyB0aHJvdWdoIHRoZSBXZWJDYW52YXMuCisgICAgLy8gVGhlIGNh
bnZhcyBpcyBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIHxjbGlwfCByZWN0LgorICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIGNsaXApID0gMDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckNsaWVudCgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZW50TGF5ZXJD
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGI5ZmQxN2RlZTczYjg3MmMyMTBlMjk4NGY1ODM5ZGM2YmNlYmFmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAor
CisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIExheWVyQ2hyb21pdW07IH0KKworbmFtZXNwYWNlIFdl
YktpdCB7CitjbGFzcyBXZWJGbG9hdFBvaW50OworY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CitjbGFz
cyBXZWJTaXplOworY2xhc3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKK2NsYXNzIFdlYkxh
eWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViTGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50
Kik7CisKKyAgICBXZWJMYXllcigpIHsgfQorICAgIFdlYkxheWVyKGNvbnN0IFdlYkxheWVyJiBs
YXllcikgeyBhc3NpZ24obGF5ZXIpOyB9CisgICAgdmlydHVhbCB+V2ViTGF5ZXIoKTsKKyAgICBX
ZWJMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdlYkxheWVyJiBsYXllcikKKyAgICB7CisgICAgICAg
IGFzc2lnbihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25z
dCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5
ZXImKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIgcm9vdExheWVyKCkgY29u
c3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciBwYXJlbnQoKSBjb25zdDsKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgYWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgaW5zZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImLCBzaXplX3QgaW5kZXgpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCByZXBsYWNlQ2hpbGQoY29uc3QgV2ViTGF5ZXImIHJlZmVyZW5j
ZSwgY29uc3QgV2ViTGF5ZXImIG5ld0xheWVyKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZW1vdmVBbGxDaGlsZHJl
bigpOworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IFdlYkZs
b2F0UG9pbnQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UG9pbnQgYW5jaG9yUG9pbnQo
KSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbmNob3JQb2ludFooZmxvYXQp
OworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3Q7CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0Qm91bmRzKGNvbnN0IFdlYlNpemUmKTsKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYlNpemUgYm91bmRzKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgbWFza3NUb0Jv
dW5kcygpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE1hc2tMYXllcihjb25z
dCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIgbWFza0xheWVyKCkgY29u
c3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgV0VC
S0lUX0VYUE9SVCBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0T3BhcXVlKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBvcGFxdWUoKSBjb25z
dDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBXZWJGbG9hdFBv
aW50Jik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3Q7
CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAg
V0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0oKSBjb25zdDsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG8oKQorICAgIHsKKyAgICAgICAgVCByZXM7
CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJl
czsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBj
b25zdAorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNzaWdu
KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJMYXllcihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPigpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQqIHVud3JhcCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+
KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgVCogY29uc3RVbndyYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFQqPihtX3ByaXZhdGUuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0
ZWQ6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiBtX3ByaXZhdGU7
Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkxheWVyJiBhLCBjb25zdCBX
ZWJMYXllciYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgV2ViTGF5ZXImIGEsIGNvbnN0IFdlYkxheWVyJiBiKQoreworICAg
IHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVy
Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYxNDhiYTJlZTEzNzg0MmIxMTJkYzMyOTJjOTgwNDllNTVj
ZTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkxheWVyQ2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJD
bGllbnRfaAorI2RlZmluZSBXZWJMYXllckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gTm90aWZpZXMgdGhlIGNs
aWVudCB0aGF0IHRoZSBsYXllciBoYXMgY2hhbmdlZCBpbiBhIHdheSB0aGF0IG5lZWRzIGEKKyAg
ICAvLyBjb21wb3NpdGluZyBwYXNzIHRvIHZpc3VhbGx5IHVwZGF0ZS4gVGhlIGNsaWVudCBzaG91
bGQgZXZlbnR1YWxseSBjYWxsCisgICAgLy8gV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlLgor
ICAgIC8vIE5vdGU6IHNvbWUgY29tcGxleCBvcGVyYXRpb25zIChlLmcgbGF5ZXIgcmVwYXJlbnRp
bmcpIGNhbiBjYXVzZSB0aGlzIHRvCisgICAgLy8gYmUgY2FsbGVkIHdoaWxlIHRoZSBsYXllciB0
cmVlIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gdG8gZ2V0CisgICAgLy8gY29ycmVj
dCByZXN1bHRzLCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUgc2hvdWxkIGJlIGNhbGxlZCBh
ZnRlciB0aGUKKyAgICAvLyBvcGVyYXRpb24gaGFzIGZpbmlzaGVkIChlLmcuIGJ5IHBvc3Rpbmcg
YSB0YXNrKS4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZHNDb21wb3NpdGUoKSA9IDA7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJMYXllckNsaWVudCgpIHsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllckNsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTljZDdjYWYwYTgxZWMxNjg2Nzc3YTU3N2UxY2IwN2VjOGFiYzBmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlVmlld19oCisjZGVm
aW5lIFdlYkxheWVyVHJlZVZpZXdfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVk
ZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0xheWVy
VHJlZUhvc3Q7CitjbGFzcyBDQ1NldHRpbmdzOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYkxheWVyOworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKK2NsYXNzIFdlYlNp
emU7CisKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXcgeworcHVibGljOgorICAgIHN0cnVjdCBTZXR0
aW5ncyB7CisgICAgICAgIFNldHRpbmdzKCkKKyAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50
aW5nKGZhbHNlKQorICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAg
ICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpIHsgfQorCisgICAgICAgIGJv
b2wgYWNjZWxlcmF0ZVBhaW50aW5nOworICAgICAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsK
KyAgICAgICAgYm9vbCBlbmFibGVDb21wb3NpdG9yVGhyZWFkOworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgICAgICBvcGVyYXRvciBXZWJDb3JlOjpDQ1NldHRpbmdzKCkgY29uc3Q7Cisj
ZW5kaWYKKyAgICB9OworCisgICAgc3RhdGljIFdlYkxheWVyVHJlZVZpZXcgY3JlYXRlKFdlYkxh
eWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgU2V0dGluZ3Mm
KTsKKworICAgIFdlYkxheWVyVHJlZVZpZXcoKSB7IH0KKyAgICBXZWJMYXllclRyZWVWaWV3KGNv
bnN0IFdlYkxheWVyVHJlZVZpZXcmIGxheWVyKSB7IGFzc2lnbihsYXllcik7IH0KKyAgICB+V2Vi
TGF5ZXJUcmVlVmlldygpIHsgcmVzZXQoKTsgfQorICAgIFdlYkxheWVyVHJlZVZpZXcmIG9wZXJh
dG9yPShjb25zdCBXZWJMYXllclRyZWVWaWV3JiBsYXllcikKKyAgICB7CisgICAgICAgIGFzc2ln
bihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJM
YXllclRyZWVWaWV3Jik7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJM
YXllclRyZWVWaWV3JikgY29uc3Q7CisKKyAgICAvLyBUcmlnZ2VycyBhIGNvbXBvc2l0aW5nIHBh
c3MuIElmIHRoZSBjb21wb3NpdG9yIHRocmVhZCBpcyBkaXNhYmxlZAorICAgIC8vIChlbmFibGVD
b21wb3NpdG9yVGhyZWFkID09IGZhbHNlKSwgdGhlIGNvbXBvc2l0aW5nIHBhc3MgaGFwcGVucwor
ICAgIC8vIGltbWVkaWF0ZWx5LiBJZiBpdCBpcyBlbmFibGVkLCB0aGUgY29tcG9zaXRpbmcgcGFz
cyB3aWxsIGhhcHBlbiBhdCBhCisgICAgLy8gbGF0ZXIgdGltZS4gQmVmb3JlIHRoZSBjb21wb3Np
dGluZyBwYXNzIGhhcHBlbnMsIFdlYkNvbnRlbnRMYXllcnMgd2lsbCBiZQorICAgIC8vIGFza2Vk
IHRvIHBhaW50IHRoZWlyIGRpcnR5IHJlZ2lvbiwgdGhyb3VnaAorICAgIC8vIFdlYkNvbnRlbnRM
YXllckNsaWVudDo6cGFpbnRDb250ZW50cy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgY29tcG9z
aXRlKCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IFdl
YlNpemUmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7
CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7CisgICAgV2ViTGF5
ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdD4oKSBjb25zdDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJp
dmF0ZVB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fcHJpdmF0ZTsKK307CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgYSwgY29uc3QgV2ViTGF5
ZXJUcmVlVmlldyYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVhbHMoYik7Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgYSwgY29uc3QgV2ViTGF5ZXJU
cmVlVmlldyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVyVHJlZVZpZXdfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMwOTdiMzViNWU3MWFlNWIxYTY4MWQzOTJmNzQ3MWM0OWI0NDA1NDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3
Q2xpZW50LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlVmll
d0NsaWVudF9oCisjZGVmaW5lIFdlYkxheWVyVHJlZVZpZXdDbGllbnRfaAorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgV2ViU2l6ZTsKK2Ns
YXNzIFdlYlRocmVhZDsKKworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCB7CitwdWJsaWM6
CisgICAgLy8gVXBkYXRlcyBhbmltYXRpb24gYW5kIGxheW91dC4gVGhpcyBpcyBjYWxsZWQgYmVm
b3JlIHRoZSBjb21wb3NpdGluZyBwYXNzCisgICAgLy8gc28gdGhhdCBsYXllcnMgY2FuIGJlIHVw
ZGF0ZWQgYXQgdGhlIGdpdmVuIGZyYW1lIHRpbWUuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVB
bmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisKKyAgICAvLyBBcHBsaWVzIGEg
c2Nyb2xsIGRlbHRhIHRvIHRoZSByb290IGxheWVyLiBUaGlzIGlzIHRyaWdlcnJlZCBieSBldmVu
dHMKKyAgICAvLyBzZW50IHRvIHRoZSBjb21wb3NpdG9yIHRocmVhZCB0aHJvdWdoIHRoZSBXZWJD
b21wb3NpdG9yIGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxEZWx0YShj
b25zdCBXZWJTaXplJikgPSAwOworCisgICAgLy8gQ3JlYXRlcyBhIDNEIGNvbnRleHQgc3VpdGFi
bGUgZm9yIHRoZSBjb21wb3NpdGluZy4gVGhpcyBtYXkgYmUgY2FsbGVkCisgICAgLy8gbW9yZSB0
aGFuIG9uY2UgaWYgdGhlIGNvbnRleHQgZ2V0cyBsb3N0LgorICAgIHZpcnR1YWwgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGNyZWF0ZUNvbnRleHQzRCgpID0gMDsKKworICAgIC8vIFNpZ25hbHMgYSBz
dWNjZXNzZnVsIHJlYmluZGluZyBvZiB0aGUgM0QgY29udGV4dCAoZS5nLiBhZnRlciBhIGxvc3QK
KyAgICAvLyBjb250ZXh0IGV2ZW50KS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CisKKyAgICAvLyBTY2hlZHVsZXMgYSBjb21w
b3NpdGluZyBwYXNzLCBtZWFuaW5nIHRoZSBjbGllbnQgc2hvdWxkIGNhbGwKKyAgICAvLyBXZWJM
YXllclRyZWVWaWV3Ojpjb21wb3NpdGUgYXQgYSBsYXRlciB0aW1lLiBUaGlzIGlzIG9ubHkgY2Fs
bGVkIGlmIHRoZQorICAgIC8vIGNvbXBvc2l0b3IgdGhyZWFkIGlzIGRpc2FibGVkOyB3aGVuIGVu
YWJsZWQsIHRoZSBjb21wb3NpdG9yIHdpbGwKKyAgICAvLyBpbnRlcm5hbGx5IHNjaGVkdWxlIGEg
Y29tcG9zaXRpbmcgcGFzcyB3aGVuIG5lZWRlZC4KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGUoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVW
aWV3Q2xpZW50KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYkxheWVyVHJlZVZpZXdDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTcwOTI2
ODFjY2QyYTU1OTNjNjI3OGQ0NjU5YzZkZTk5OTAyNjFmOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhfaAor
I2RlZmluZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeF9oCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2VuZGlmCisjaW5jbHVk
ZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrTWF0cml4NDQuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHsKK3B1YmxpYzoK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChkb3VibGUgbTExLCBkb3VibGUgbTEyLCBkb3Vi
bGUgbTEzLCBkb3VibGUgbTE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBt
MjEsIGRvdWJsZSBtMjIsIGRvdWJsZSBtMjMsIGRvdWJsZSBtMjQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIG0zMSwgZG91YmxlIG0zMiwgZG91YmxlIG0zMywgZG91YmxlIG0z
NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbTQxLCBkb3VibGUgbTQyLCBk
b3VibGUgbTQzLCBkb3VibGUgbTQ0KSB7CisgICAgICAgIHNldE1hdHJpeChtMTEsIG0xMiwgbTEz
LCBtMTQsIG0yMSwgbTIyLCBtMjMsIG0yNCwgbTMxLCBtMzIsIG0zMywgbTM0LCBtNDEsIG00Miwg
bTQzLCBtNDQpOworICAgIH0KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkgeyBhc3NpZ24odCk7IH0KKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQor
ICAgIHsKKyAgICAgICAgYXNzaWduKHQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdDsK
KyNlbmRpZgorCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgU2tNYXRyaXg0NCYp
OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcGVyYXRvcj0oY29uc3QgU2tNYXRyaXg0
NCYpOworICAgIG9wZXJhdG9yIFNrTWF0cml4NDQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGFzc2lnbihjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0
TWF0cml4KGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRvdWJsZSBtMTMsIGRvdWJsZSBtMTQsCisg
ICAgICAgICAgICAgICAgICAgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwgZG91YmxlIG0yMywgZG91
YmxlIG0yNCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgbTMxLCBkb3VibGUgbTMyLCBkb3Vi
bGUgbTMzLCBkb3VibGUgbTM0LAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtNDEsIGRvdWJs
ZSBtNDIsIGRvdWJsZSBtNDMsIGRvdWJsZSBtNDQpOworICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0
IFNrTWF0cml4NDQmKTsKKworICAgIGRvdWJsZSBtX2RhdGFbNF1bNF07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJjZTAyNzU3YzlhNDg0ODQ5ZThjZTA5MTczYmE3NTdlMmU4ZjE5ZGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwCkBA
IC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
Q29udGVudExheWVyLmgiCisKKyNpbmNsdWRlICJXZWJDb250ZW50TGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiV2ViRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb250ZW50
TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2Vi
Q29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQoreworICAgIHJldHVybiBXZWJDb250
ZW50TGF5ZXIoV2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRlKGNsaWVudCwgY29udGVudENsaWVu
dCkpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJh
d3NDb250ZW50KQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXREcmF3
c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKK30KKworYm9vbCBXZWJDb250ZW50TGF5ZXI6OmRyYXdz
Q29udGVudCgpCit7CisgICAgcmV0dXJuIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5k
cmF3c0NvbnRlbnQoKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxh
eShjb25zdCBXZWJGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICB1bndyYXA8V2ViQ29udGVu
dExheWVySW1wbD4oKS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2Vi
Q29udGVudExheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHVud3JhcDxXZWJDb250ZW50
TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworV2ViRmxvYXRSZWN0IFdlYkNv
bnRlbnRMYXllcjo6ZGlydHlSZWN0KCkKK3sKKyAgICByZXR1cm4gV2ViRmxvYXRSZWN0KHVud3Jh
cDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kaXJ0eVJlY3QoKSk7Cit9CisKK1dlYkNvbnRlbnRM
YXllcjo6V2ViQ29udGVudExheWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1w
bD4mIG5vZGUpCisgICAgOiBXZWJMYXllcihub2RlKQoreworfQorCitXZWJDb250ZW50TGF5ZXIm
IFdlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExh
eWVySW1wbD4mIG5vZGUpCit7CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb250ZW50
TGF5ZXJJbXBsPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvbnRlbnRM
YXllckltcGwqPihtX3ByaXZhdGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjY0MWU2Y2EwNzI5NGI5Nzk1NDc3ZDRlMjAyMmU4OTllYWIxYzI3YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRM
YXllckltcGwuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViQ29udGVudExh
eWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJS
ZWN0LmgiCisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXll
ckltcGw6OmNyZWF0ZShXZWJMYXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGll
bnQqIGNvbnRlbnRDbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZW50
TGF5ZXJJbXBsKGNsaWVudCwgY29udGVudENsaWVudCkpOworfQorCitXZWJDb250ZW50TGF5ZXJJ
bXBsOjpXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiBjbGllbnQsIFdlYkNvbnRl
bnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVt
KHRoaXMpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2NvbnRlbnRDbGllbnQoY29u
dGVudENsaWVudCkKKyAgICAsIG1fZHJhd3NDb250ZW50KHRydWUpCit7Cit9CisKK1dlYkNvbnRl
bnRMYXllckltcGw6On5XZWJDb250ZW50TGF5ZXJJbXBsKCkKK3sKK30KKwordm9pZCBXZWJDb250
ZW50TGF5ZXJJbXBsOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAg
bV9kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQ7Cit9CisKK2Jvb2wgV2ViQ29udGVudExheWVy
SW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3c0NvbnRlbnQ7
Cit9CisKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmIGdjLCBjb25zdCBJbnRSZWN0JiBjbGlwKQoreworICAgIGlmICghbV9jb250ZW50Q2xp
ZW50KQorICAgICAgICByZXR1cm47CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICBXZWJDYW52
YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyNlbGlmIFdFQktJ
VF9VU0lOR19DRworICAgIFdlYkNhbnZhcyogY2FudmFzID0gZ2MucGxhdGZvcm1Db250ZXh0KCk7
CisjZW5kaWYKKyAgICBtX2NvbnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJS
ZWN0KGNsaXApKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVx
dWlyZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5l
ZWRzQ29tcG9zaXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
OGRmNWUzYTI1NGVkOTU2OTQ1OTg2ZmQ2NTQxYTg0YTk4ODY1ZmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29udGVudExheWVySW1wbF9oCisjZGVmaW5l
IFdlYkNvbnRlbnRMYXllckltcGxfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYkxheWVyQ2xpZW50OworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OworCitjbGFz
cyBXZWJDb250ZW50TGF5ZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9t
aXVtLCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQq
LCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOworCisgICAgdm9pZCBzZXRE
cmF3c0NvbnRlbnQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgV2ViQ29udGVudExheWVySW1wbChXZWJMYXllckNsaWVudCos
IFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCk7CisgICAgdmlydHVhbCB+V2Vi
Q29udGVudExheWVySW1wbCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKKworICAgIFdlYkxheWVyQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBXZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsK
KyAgICBib29sIG1fZHJhd3NDb250ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJDb250ZW50TGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGJkYWUyYzhkMTY3YjY4ZTExYjI0MTc0MWM0MTBj
NDc5NjllYTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF5ZXIuY3BwCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisj
aW5jbHVkZSAiV2ViRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYlNpemUuaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkxh
eWVyIFdlYkxheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1
cm4gV2ViTGF5ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGUoY2xpZW50KSk7Cit9CisKK1dlYkxheWVy
Ojp+V2ViTGF5ZXIoKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlc2V0
KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6YXNzaWdu
KGNvbnN0IFdlYkxheWVyJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZh
dGU7Cit9CisKK2Jvb2wgV2ViTGF5ZXI6OmVxdWFscyhjb25zdCBXZWJMYXllciYgbikgY29uc3QK
K3sKKyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7Cit9
CisKK1dlYkxheWVyIFdlYkxheWVyOjpyb290TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBX
ZWJMYXllcihjb25zdF9jYXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnJvb3RMYXllcigp
KSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVy
biBXZWJMYXllcihjb25zdF9jYXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnBhcmVudCgp
KSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OmFkZENoaWxkKGNvbnN0IFdlYkxheWVyJiBjaGlsZCkK
K3sKKyAgICBtX3ByaXZhdGUtPmFkZENoaWxkKGNoaWxkKTsKK30KKwordm9pZCBXZWJMYXllcjo6
aW5zZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxkLCBzaXplX3QgaW5kZXgpCit7CisgICAg
bV9wcml2YXRlLT5pbnNlcnRDaGlsZChjaGlsZCwgaW5kZXgpOworfQorCit2b2lkIFdlYkxheWVy
OjpyZXBsYWNlQ2hpbGQoY29uc3QgV2ViTGF5ZXImIHJlZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXIm
IG5ld0xheWVyKQoreworICAgIFdlYkxheWVyIHJlZiA9IHJlZmVyZW5jZTsKKyAgICBtX3ByaXZh
dGUtPnJlcGxhY2VDaGlsZChyZWYudW53cmFwPExheWVyQ2hyb21pdW0+KCksIG5ld0xheWVyKTsK
K30KKwordm9pZCBXZWJMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgbV9wcml2YXRl
LT5yZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlbW92ZUFsbENoaWxk
cmVuKCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUFsbENoaWxkcmVuKCk7Cit9CisKK3ZvaWQg
V2ViTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGFuY2hvclBvaW50
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOworfQorCitX
ZWJGbG9hdFBvaW50IFdlYkxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYkZsb2F0UG9pbnQobV9wcml2YXRlLT5hbmNob3JQb2ludCgpKTsKK30KKwordm9pZCBXZWJM
YXllcjo6c2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEFuY2hvclBvaW50WihhbmNob3JQb2ludFopOworfQorCitmbG9hdCBXZWJMYXllcjo6
YW5jaG9yUG9pbnRaKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hbmNob3JQb2lu
dFooKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0Qm91bmRzKGNvbnN0IFdlYlNpemUmIHNpemUp
Cit7CisgICAgbV9wcml2YXRlLT5zZXRCb3VuZHMoc2l6ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5
ZXI6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9wcml2YXRlLT5ib3Vu
ZHMoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1Rv
Qm91bmRzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TWFza3NUb0JvdW5kcyhtYXNrc1RvQm91bmRz
KTsKK30KKworYm9vbCBXZWJMYXllcjo6bWFza3NUb0JvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bWFza3NUb0JvdW5kcygpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRN
YXNrTGF5ZXIoY29uc3QgV2ViTGF5ZXImIG1hc2tMYXllcikKK3sKKyAgICBXZWJMYXllciByZWYg
PSBtYXNrTGF5ZXI7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2V0TWFza0xheWVyKHJlZi51bndy
YXA8TGF5ZXJDaHJvbWl1bT4oKSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjptYXNrTGF5ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcihtX3ByaXZhdGUtPm1hc2tMYXllcigpKTsK
K30KKwordm9pZCBXZWJMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1f
cHJpdmF0ZS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKK30KKworZmxvYXQgV2ViTGF5ZXI6Om9wYWNp
dHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm9wYWNpdHkoKTsKK30KKwordm9p
ZCBXZWJMYXllcjo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
T3BhcXVlKG9wYXF1ZSk7Cit9CisKK2Jvb2wgV2ViTGF5ZXI6Om9wYXF1ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+b3BhcXVlKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFBv
c2l0aW9uKGNvbnN0IFdlYkZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0UG9zaXRpb24ocG9zaXRpb24pOworfQorCitXZWJGbG9hdFBvaW50IFdlYkxheWVyOjpwb3Np
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZsb2F0UG9pbnQobV9wcml2YXRlLT5wb3Np
dGlvbigpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFN1YmxheWVyVHJhbnNmb3JtKHRyYW5zZm9ybSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IFdlYkxheWVyOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7Cit9
CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKHRyYW5zZm9y
bSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYkxheWVyOjp0cmFuc2Zvcm0oKSBj
b25zdAoreworICAgIHJldHVybiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnRy
YW5zZm9ybSgpKTsKK30KKworV2ViTGF5ZXI6OldlYkxheWVyKGNvbnN0IFBhc3NSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4mIG5vZGUpCisgICAgOiBtX3ByaXZhdGUobm9kZSkKK3sKK30KKworV2ViTGF5
ZXImIFdlYkxheWVyOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYg
bm9kZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBub2RlOworICAgIHJldHVybiAqdGhpczsKK30KKwor
V2ViTGF5ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4oKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDk4MTMyMWVkMjBlZGQ4ODJhYzA3MjEwNmYyM2MzYTUzZTVlMjhiMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllcklt
cGwuaCIKKworI2luY2x1ZGUgIldlYkxheWVyQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJMYXllckltcGw+
IFdlYkxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJMYXllckltcGwoY2xpZW50KSk7Cit9CisKK1dlYkxheWVySW1w
bDo6V2ViTGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpIDogTGF5ZXJDaHJvbWl1bSh0
aGlzKSwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJMYXllckltcGw6On5XZWJMYXllcklt
cGwoKQoreworfQorCitib29sIFdlYkxheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApCit7Cit9CisKK3ZvaWQgV2Vi
TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NThkNDFiNWNkZTFhODQ4NzAyY2FkMGYzNzUxMmM4OTExNTUxMTE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJJbXBsX2gKKyNkZWZpbmUgV2Vi
TGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyQ2xpZW50
OworCitjbGFzcyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwg
cHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKworcHJvdGVj
dGVkOgorICAgIFdlYkxheWVySW1wbChXZWJMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldl
YkxheWVySW1wbCgpOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCk7CisKKyAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVySW1wbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3
ZGIxYWUwYjg5OTIwNmI0YmJkNjM3MjgzM2FlNWI2MGI2MDBjYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMCww
ICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXll
clRyZWVWaWV3LmgiCisKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3SW1wbC5oIgorI2luY2x1
ZGUgIldlYlNpemUuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViTGF5ZXJUcmVlVmll
dzo6U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAoreworICAgIENDU2V0dGlu
Z3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxlcmF0
ZVBhaW50aW5nOworICAgIHNldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0ZU9m
ZnNjcmVlbjsKKworICAgIC8vIEZJWE1FOiBjb21wb3NpdG9yIHRocmVhZCBpc24ndCBzdXBwb3J0
ZWQgY3VycmVudGx5LgorICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBmYWxz
ZTsKKworICAgIC8vIEZJWE1FOiBzaG93RlBTQ291bnRlciAvIHNob3dQbGF0Zm9ybUxheWVyVHJl
ZSBhcmVuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KKyAgICBzZXR0aW5ncy5zaG93RlBTQ291bnRl
ciA9IGZhbHNlOworICAgIHNldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IGZhbHNlOwor
ICAgIHJldHVybiBzZXR0aW5nczsKK30KKworV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVW
aWV3OjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXll
ciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQorewor
ICAgIHJldHVybiBXZWJMYXllclRyZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUo
Y2xpZW50LCByb290LCBzZXR0aW5ncykpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJl
c2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVW
aWV3Ojphc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgb3RoZXIpCit7CisgICAgbV9wcml2
YXRlID0gb3RoZXIubV9wcml2YXRlOworfQorCitib29sIFdlYkxheWVyVHJlZVZpZXc6OmVxdWFs
cyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBjb25zdAoreworICAgIHJldHVybiAobV9wcml2
YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVW
aWV3Ojpjb21wb3NpdGUoKQoreworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
bV9wcml2YXRlLT5jb21wb3NpdGUoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkxheWVyVHJlZVZp
ZXc6OnNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpCit7CisgICAg
bV9wcml2YXRlLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUpOworfQorCitXZWJTaXplIFdlYkxh
eWVyVHJlZVZpZXc6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUo
bV9wcml2YXRlLT52aWV3cG9ydFNpemUoKSk7Cit9CisKK1dlYkxheWVyVHJlZVZpZXc6OldlYkxh
eWVyVHJlZVZpZXcoY29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQorICAg
IDogbV9wcml2YXRlKG5vZGUpCit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXcmIFdlYkxheWVyVHJl
ZVZpZXc6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUp
Cit7CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkxh
eWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg3YWY2ZjJmMzNkM2ViMjU5ZjNlMTQzMGNmOTY1NDQ4OGU4
YzUxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3SW1wbC5oIgorCisjaW5jbHVkZSAi
Q0NUaHJlYWRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3Lmgi
CisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldlYlNpemUu
aCIKKyNpbmNsdWRlICJXZWJUaHJlYWQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBX
ZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVu
dCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdz
JiBzZXR0aW5ncykKK3sKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+IGhvc3QgPSBh
ZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0ltcGwoY2xpZW50LCByb290LCBzZXR0aW5ncykp
OworICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gaG9zdDsKK30KKworV2ViTGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJ
bXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3Qs
IGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykgCisgICAgOiBDQ0xh
eWVyVHJlZUhvc3QodGhpcywgcm9vdCwgc2V0dGluZ3MpCisgICAgLCBtX2NsaWVudChjbGllbnQp
Cit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXdJbXBsOjp+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKQor
eworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0
YSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbERl
bHRhKFdlYlNpemUoZGVsdGEpKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQorewor
ICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIE93blB0cjxXZWJHcmFw
aGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFkb3B0UHRyKG1fY2xpZW50LT5jcmVhdGVDb250
ZXh0M0QoKSk7CisgICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSB3ZWJDb250
ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMu
YWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CisgICAg
YXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOworICAgIGF0dHJpYnV0
ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CisgICAgYXR0cmlidXRlcy5w
cmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAg
ICBhdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSB3ZWJBdHRyaWJ1dGVzLmNh
blJlY292ZXJGcm9tQ29udGV4dExvc3M7CisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB3
ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5zaW9uczsKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2Vz
ID0gd2ViQXR0cmlidXRlcy5zaGFyZVJlc291cmNlczsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZl
RHJhd2luZ0J1ZmZlciA9IGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0
eWxlIHN0eWxlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
OworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6VGhyZWFkVXNhZ2UgdXNhZ2UgPSBzZXR0
aW5ncygpLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkZvclVzZU9uQW5vdGhlclRocmVhZCA6IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNl
T25UaGlzVGhyZWFkOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRy
aWJ1dGVzLCAwLCBzdHlsZSwgdXNhZ2UpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBs
OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoc3Vj
Y2Vzcyk7Cit9CisKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBXZWJMYXll
clRyZWVWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQoreworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7Cit9CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJMYXllclRyZWVWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWYyYTllOGI0MzNmYTBjNjY5YzU0NjVk
MGFlM2QwMTJkMjQ0YjMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJMYXllclRyZWVWaWV3SW1wbF9oCisjZGVmaW5lIFdlYkxheWVyVHJlZVZpZXdJbXBs
X2gKKworI2luY2x1ZGUgIldlYkxheWVyVHJlZVZpZXcuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkxheWVyOworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKKwor
Y2xhc3MgV2ViTGF5ZXJUcmVlVmlld0ltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gY3JlYXRlKFdlYkxheWVy
VHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVl
Vmlldzo6U2V0dGluZ3MmKTsKKworcHJpdmF0ZToKKyAgICBXZWJMYXllclRyZWVWaWV3SW1wbChX
ZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxh
eWVyVHJlZVZpZXc6OlNldHRpbmdzJik7CisgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlVmlld0lt
cGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdp
blRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwor
I2VuZGlmCisKKyAgICBXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBtX2NsaWVudDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlVmlld0ltcGxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZDg1NTg4MDRjYzg5MzZlOTM3ZmFmYWI3NmZkMmNjNzg4
NWVlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAg
ICBzZXRNYXRyaXgodC5tMTEoKSwgdC5tMTIoKSwgdC5tMTMoKSwgdC5tMTQoKSwKKyAgICAgICAg
ICAgICAgdC5tMjEoKSwgdC5tMjIoKSwgdC5tMjMoKSwgdC5tMjQoKSwKKyAgICAgICAgICAgICAg
dC5tMzEoKSwgdC5tMzIoKSwgdC5tMzMoKSwgdC5tMzQoKSwKKyAgICAgICAgICAgICAgdC5tNDEo
KSwgdC5tNDIoKSwgdC5tNDMoKSwgdC5tNDQoKSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIHNldE1hdHJpeCh0Lm0xMSgpLCB0Lm0xMigp
LCB0Lm0xMygpLCB0Lm0xNCgpLAorICAgICAgICAgICAgICB0Lm0yMSgpLCB0Lm0yMigpLCB0Lm0y
MygpLCB0Lm0yNCgpLAorICAgICAgICAgICAgICB0Lm0zMSgpLCB0Lm0zMigpLCB0Lm0zMygpLCB0
Lm0zNCgpLAorICAgICAgICAgICAgICB0Lm00MSgpLCB0Lm00MigpLCB0Lm00MygpLCB0Lm00NCgp
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvciBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KG1fZGF0YVswXVswXSwgbV9kYXRhWzBdWzFd
LCBtX2RhdGFbMF1bMl0sIG1fZGF0YVswXVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9kYXRhWzFdWzBdLCBtX2RhdGFbMV1bMV0sIG1fZGF0YVsxXVsyXSwg
bV9kYXRhWzFdWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGFbMl1bMF0sIG1fZGF0YVsyXVsxXSwgbV9kYXRhWzJdWzJdLCBtX2RhdGFbMl1bM10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVszXVswXSwgbV9k
YXRhWzNdWzFdLCBtX2RhdGFbM11bMl0sIG1fZGF0YVszXVszXSk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmFzc2lnbihjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dCkKK3sKKyAgICBzZXRNYXRyaXgodC5tX2RhdGFbMF1bMF0sIHQubV9kYXRhWzBdWzFdLCB0Lm1f
ZGF0YVswXVsyXSwgdC5tX2RhdGFbMF1bM10sCisgICAgICAgICAgICAgIHQubV9kYXRhWzFdWzBd
LCB0Lm1fZGF0YVsxXVsxXSwgdC5tX2RhdGFbMV1bMl0sIHQubV9kYXRhWzFdWzNdLAorICAgICAg
ICAgICAgICB0Lm1fZGF0YVsyXVswXSwgdC5tX2RhdGFbMl1bMV0sIHQubV9kYXRhWzJdWzJdLCB0
Lm1fZGF0YVsyXVszXSwKKyAgICAgICAgICAgICAgdC5tX2RhdGFbM11bMF0sIHQubV9kYXRhWzNd
WzFdLCB0Lm1fZGF0YVszXVsyXSwgdC5tX2RhdGFbM11bM10pOworfQorCit2b2lkIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzZXRNYXRyaXgoZG91YmxlIG0xMSwgZG91YmxlIG0xMiwgZG91Ymxl
IG0xMywgZG91YmxlIG0xNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgbTIxLCBkb3VibGUgbTIyLCBkb3VibGUgbTIzLCBkb3VibGUgbTI0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtMzEsIGRvdWJsZSBtMzIs
IGRvdWJsZSBtMzMsIGRvdWJsZSBtMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIG00MSwgZG91YmxlIG00MiwgZG91YmxlIG00MywgZG91YmxlIG00NCkK
K3sKKyAgICBtX2RhdGFbMF1bMF0gPSBtMTE7CisgICAgbV9kYXRhWzBdWzFdID0gbTEyOworICAg
IG1fZGF0YVswXVsyXSA9IG0xMzsKKyAgICBtX2RhdGFbMF1bM10gPSBtMTQ7CisgICAgbV9kYXRh
WzFdWzBdID0gbTIxOworICAgIG1fZGF0YVsxXVsxXSA9IG0yMjsKKyAgICBtX2RhdGFbMV1bMl0g
PSBtMjM7CisgICAgbV9kYXRhWzFdWzNdID0gbTI0OworICAgIG1fZGF0YVsyXVswXSA9IG0zMTsK
KyAgICBtX2RhdGFbMl1bMV0gPSBtMzI7CisgICAgbV9kYXRhWzJdWzJdID0gbTMzOworICAgIG1f
ZGF0YVsyXVszXSA9IG0zNDsKKyAgICBtX2RhdGFbM11bMF0gPSBtNDE7CisgICAgbV9kYXRhWzNd
WzFdID0gbTQyOworICAgIG1fZGF0YVszXVsyXSA9IG00MzsKKyAgICBtX2RhdGFbM11bM10gPSBt
NDQ7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eChjb25zdCBTa01hdHJpeDQ0JiBtYXRyaXgpCit7CisgICAgc2V0TWF0cml4KG1hdHJpeCk7Cit9
CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3Bl
cmF0b3I9KGNvbnN0IFNrTWF0cml4NDQmIG1hdHJpeCkKK3sKKyAgICBzZXRNYXRyaXgobWF0cml4
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvciBTa01hdHJpeDQ0KCkgY29uc3QKK3sKKyAgICBTa01hdHJpeDQ0IG1hdHJpeDsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0
OyArK2opCisgICAgICAgICAgICBtYXRyaXguc2V0KGosIGksIFNrRG91YmxlVG9NU2NhbGFyKG1f
ZGF0YVtpXVtqXSkpOworICAgIHJldHVybiBtYXRyaXg7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnNldE1hdHJpeChjb25zdCBTa01hdHJpeDQ0JiBtKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsr
aikKKyAgICAgICAgICAgIG1fZGF0YVtpXVtqXSA9IFNrTVNjYWxhclRvRG91YmxlKG0uZ2V0KGos
IGkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110034</attachid>
            <date>2011-10-06 14:56:38 -0700</date>
            <delta_ts>2011-10-06 15:09:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111006145637.patch</filename>
            <type>text/plain</type>
            <size>61252</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY3ODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4OTVhMzMyNTAxYzEzYjc4
YzA5YTMzNDkyODBjMTk2MmE0NGZlNTYxLi45YTFmYjQ5Yzk5MzYzMGNjMTgxZDJlMGJkMjY3ZDFk
MzczMGRjYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTA1ICBEb21pbmljIENvb25leSAgPGRvbWluaWNjQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBJc1NoYWRvd1Jvb3RGbGFnIHNob3VsZCBub3QgZGVwZW5kIG9uIHdoZXRoZXIgYSBTaGFkb3dS
b290IGlzIGF0dGFjaGVkIHRvIGEgaG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CmluZGV4IGEyMWJjNjgwOGY4OGNmNDk3YTliN2JhMzY2ZTE3MWU5M2Y4OTZlNmQuLmI4MzRlNjc2
YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaApAQCAtNTEsOSArNTEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CiAKK3ByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRh
dGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBkYmY2YjMyYjY1YzU2OTY5YWMwMjczZjI0MTRmZmE4MDFjZDA2MzRmLi5jOTJjOWMwZWNlZTNl
YTNkNGZkNTQ1OTBiZGFkZTg4MGM3NzA3MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyMiBAQAorMjAxMS0xMC0wNSAgQW50b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2Via2l0IEFQSSBmb3IgY29tcG9zaXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6On5XZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllckNs
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyQ2xpZW50Ojp+
V2ViQ29udGVudExheWVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG9Db25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjp1bndyYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y29uc3RVbndy
YXApOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyQ2xpZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllckNsaWVudDo6fldlYkxheWVyQ2xpZW50KToKKyAgICAgICAg
KiBwdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVZpZXc6On5XZWJMYXllclRyZWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlldzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRy
ZWVWaWV3Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
Q2xpZW50Ojp+V2ViTGF5ZXJUcmVlVmlld0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkNvbnRl
bnRMYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6ZGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXll
cjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPik6CisgICAgICAgICog
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExh
eWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllckltcGw6On5XZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6fldlYkxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjplcXVhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpyZW1vdmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpz
ZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXI6OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjptYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6
OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAg
ICogc3JjL1dlYkxheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllckltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlldzo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6ZXF1YWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6Y29t
cG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRT
aXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVI
b3N0Pik6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlv
dXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxE
ZWx0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0lt
cGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5
ZXJUcmVlVmlld0ltcGwuaDogQWRkZWQuCisKIDIwMTEtMTAtMDUgIEFsZXhlaSBTdml0a2luZSAg
PGFzdml0a2luZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBkZXN0cnVjdG9yIG9mIFdl
YlVSTExvYWRlckNsaWVudCB2aXJ0dWFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4
IDUyNDQwMzM4OGIxNDRkZGViNTJjOTZiZDhhYWI4MTZhMDJjZjkzOTIuLjc4OTU0MDI2MmZmODAw
NmE5NTFkZGY5Y2MwYzFmMWZhNDE1MzkyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTg1LDYgKzg1LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljJywKICAgICAgICAgICAg
ICAgICAnc3JjJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9w
YXJ0eS9hbmdsZS9pbmNsdWRlJywKKyAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMnLAogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICdkZWZpbmVzJzogWwogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJ
T049MScsCkBAIC0xMzAsNiArMTMxLDggQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNv
bXBvc2l0b3JDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9y
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29uc29sZU1lc3NhZ2UuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJDb250ZXh0TWVudURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb29r
aWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb29raWVKYXIuaCcsCkBAIC0yMTYs
NiArMjE5LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJMYWJlbEVsZW1lbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJMYXllci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxheWVyQ2xpZW50LmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJMb2NhbGl6ZWRTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJNZWRpYUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXll
ci5oJywKQEAgLTQ0OSw2ICs0NTYsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tbW9u
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW1wbC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvckltcGwuaCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCkBAIC01MzMsNiArNTQzLDEyIEBA
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYktpdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGFi
ZWxFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllci5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJMYXllckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb250ZW50TGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDVjOWFlZGI2NmMyYmExZDE3ZDRlYWE0
NDFiM2IwMjA2ZmUwMDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQ29udGVudExheWVyX2gKKyNkZWZpbmUgV2ViQ29udGVudExheWVyX2gKKworI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OworY2xhc3MgV2ViQ29udGVudExheWVy
SW1wbDsKK2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYkxheWVyQ2xpZW50OworCitjbGFz
cyBXZWJDb250ZW50TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExheWVy
Q2xpZW50Kik7CisKKyAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KKyAgICBXZWJDb250ZW50TGF5
ZXIoY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikgOiBXZWJMYXllcihsYXllcikgeyB9Cisg
ICAgdmlydHVhbCB+V2ViQ29udGVudExheWVyKCkgeyB9CisgICAgV2ViQ29udGVudExheWVyJiBv
cGVyYXRvcj0oY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikKKyAgICB7CisgICAgICAgIFdl
YkxheWVyOjphc3NpZ24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBsYXllciBkcmF3cyBpdHMgY29udGVudCB3aGVuIGNvbXBv
c2l0aW5nLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworCisgICAgLy8gU2V0
cyBhIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUg
aXRzIGNvbnRlbnQuCisgICAgLy8gVGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlydHkgcmVjdCB3
aWxsIGJlIHBhc3NlZCB0byBvbmUgb3IgbW9yZSBjYWxscyB0bworICAgIC8vIFdlYkNvbnRlbnRM
YXllckNsaWVudDo6cGFpbnRDb250ZW50cyBiZWZvcmUgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgb2Nj
dXJzLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJGbG9h
dFJlY3QmKTsKKworICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBpbnZhbGlkLCBpLmUu
IG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0
IGlzIGN1cnJlbnRseSBpbnZhbGlkLgorICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRSZWN0IGlu
dmFsaWRSZWN0KCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJDb250ZW50
TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7CisgICAg
V2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRl
bnRMYXllckltcGw+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRM
YXllckltcGw+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI0YmUw
Y2E3N2ZjNmUzOWY3ODg0ODc2YjFiY2M2YzQzZThjNmI5YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllckNsaWVudF9oCisjZGVm
aW5lIFdlYkNvbnRlbnRMYXllckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJSZWN0OworCitjbGFzcyBXZWJDb250ZW50TGF5
ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFBhaW50cyB0aGUgY29udGVudCBhcmVhIGZvciB0
aGUgbGF5ZXIsIHR5cGljYWxseSBkaXJ0eSByZWN0cyBzdWJtaXR0ZWQKKyAgICAvLyB0aHJvdWdo
IFdlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5LCBzdWJtaXR0aW5nIGRyYXdpbmcgY29t
bWFuZHMKKyAgICAvLyB0aHJvdWdoIHRoZSBXZWJDYW52YXMuCisgICAgLy8gVGhlIGNhbnZhcyBp
cyBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIHxjbGlwfCByZWN0LgorICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzKFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIGNsaXApID0gMDsKKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckNsaWVudCgpIHsgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTMx
ZTA1N2NjNDZjMzI5YTExMWI2MDBiZGI1MjQ4YWU3ZThjMTYxMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCArMSwxMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAorCisjaW5j
bHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCitjbGFzcyBT
a01hdHJpeDQ0OworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBMYXllckNocm9taXVtOyB9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRmxvYXRQb2ludDsKK2NsYXNzIFdlYkxheWVy
Q2xpZW50OworY2xhc3MgV2ViU2l6ZTsKKworY2xhc3MgV2ViTGF5ZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBXZWJMYXllciBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKworICAgIFdlYkxheWVy
KCkgeyB9CisgICAgV2ViTGF5ZXIoY29uc3QgV2ViTGF5ZXImIGxheWVyKSB7IGFzc2lnbihsYXll
cik7IH0KKyAgICB2aXJ0dWFsIH5XZWJMYXllcigpOworICAgIFdlYkxheWVyJiBvcGVyYXRvcj0o
Y29uc3QgV2ViTGF5ZXImIGxheWVyKQorICAgIHsKKyAgICAgICAgYXNzaWduKGxheWVyKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQo
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkxheWVyJik7CisgICAg
V0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJMYXllciYpIGNvbnN0OworCisgICAg
V0VCS0lUX0VYUE9SVCBXZWJMYXllciByb290TGF5ZXIoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIFdlYkxheWVyIHBhcmVudCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGRD
aGlsZChjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnNlcnRDaGls
ZChjb25zdCBXZWJMYXllciYsIHNpemVfdCBpbmRleCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHJlcGxhY2VDaGlsZChjb25zdCBXZWJMYXllciYgcmVmZXJlbmNlLCBjb25zdCBXZWJMYXllciYg
bmV3TGF5ZXIpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViRmxvYXRQb2ludCYpOworICAgIFdF
QktJVF9FWFBPUlQgV2ViRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0OworCisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCk7CisgICAgV0VCS0lUX0VYUE9S
VCBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViU2l6ZSBib3Vu
ZHMoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJv
b2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3Q7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TWFza0xheWVyKGNvbnN0IFdlYkxheWVyJik7CisgICAg
V0VCS0lUX0VYUE9SVCBXZWJMYXllciBtYXNrTGF5ZXIoKSBjb25zdDsKKworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAgICBXRUJLSVRfRVhQT1JUIGZsb2F0IG9w
YWNpdHkoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRPcGFxdWUoYm9vbCk7
CisgICAgV0VCS0lUX0VYUE9SVCBib29sIG9wYXF1ZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkZsb2F0UG9pbnQmKTsKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7CisgICAgV0VC
S0lUX0VYUE9SVCBTa01hdHJpeDQ0IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4NDQmKTsKKyAgICBX
RUJLSVRfRVhQT1JUIFNrTWF0cml4NDQgdHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIHRvKCkKKyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMu
V2ViTGF5ZXI6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCB0b0NvbnN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViTGF5ZXI6OmFzc2lnbigqdGhpcyk7CisgICAg
ICAgIHJldHVybiByZXM7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
V2ViTGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+Jik7
CisgICAgV2ViTGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bT4oKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiB1bndy
YXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX3ByaXZhdGUuZ2V0
KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQqIGNvbnN0VW53
cmFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUKj4o
bV9wcml2YXRlLmdldCgpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdlYlBy
aXZhdGVQdHI8V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bT4gbV9wcml2YXRlOworfTsKKworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJMYXllciYgYSwgY29uc3QgV2ViTGF5ZXImIGIpCit7
CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFdlYkxheWVyJiBhLCBjb25zdCBXZWJMYXllciYgYikKK3sKKyAgICByZXR1cm4gIShhID09
IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlmMTQ4YmEyZWUxMzc4NDJiMTEyZGMzMjkyYzk4MDQ5ZTU1Y2U5NmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckNsaWVudC5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyQ2xpZW50X2gKKyNkZWZp
bmUgV2ViTGF5ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5
ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIE5vdGlmaWVzIHRoZSBjbGllbnQgdGhhdCB0aGUg
bGF5ZXIgaGFzIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBuZWVkcyBhCisgICAgLy8gY29tcG9zaXRp
bmcgcGFzcyB0byB2aXN1YWxseSB1cGRhdGUuIFRoZSBjbGllbnQgc2hvdWxkIGV2ZW50dWFsbHkg
Y2FsbAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZS4KKyAgICAvLyBOb3RlOiBz
b21lIGNvbXBsZXggb3BlcmF0aW9ucyAoZS5nIGxheWVyIHJlcGFyZW50aW5nKSBjYW4gY2F1c2Ug
dGhpcyB0bworICAgIC8vIGJlIGNhbGxlZCB3aGlsZSB0aGUgbGF5ZXIgdHJlZSBpcyBpbiBhbiBp
bmNvbnNpc3RlbnQgc3RhdGUsIHNvIHRvIGdldAorICAgIC8vIGNvcnJlY3QgcmVzdWx0cywgV2Vi
TGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisgICAg
Ly8gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCAoZS5nLiBieSBwb3N0aW5nIGEgdGFzaykuCisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+V2ViTGF5ZXJDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYzVjOGQ3NTNh
ZmJhMDlhYTI0OTYwMjUyM2UzYTc0ZTM1ODNkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZpZXdfaAorI2RlZmluZSBXZWJMYXllclRy
ZWVWaWV3X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQ
dHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xh
c3MgQ0NTZXR0aW5nczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllcjsK
K2NsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQ7CitjbGFzcyBXZWJTaXplOworCitjbGFzcyBX
ZWJMYXllclRyZWVWaWV3IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgU2V0dGluZ3MgeworICAgICAg
ICBTZXR0aW5ncygpCisgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKKyAg
ICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQorICAgICAgICAgICAgLCBlbmFi
bGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKSB7IH0KKworICAgICAgICBib29sIGFjY2VsZXJhdGVQ
YWludGluZzsKKyAgICAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgICAgIGJvb2wg
ZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICAg
ICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCisgICAgfTsK
KworICAgIHN0YXRpYyBXZWJMYXllclRyZWVWaWV3IGNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xp
ZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFNldHRpbmdzJik7CisKKyAgICBXZWJM
YXllclRyZWVWaWV3KCkgeyB9CisgICAgV2ViTGF5ZXJUcmVlVmlldyhjb25zdCBXZWJMYXllclRy
ZWVWaWV3JiBsYXllcikgeyBhc3NpZ24obGF5ZXIpOyB9CisgICAgfldlYkxheWVyVHJlZVZpZXco
KSB7IHJlc2V0KCk7IH0KKyAgICBXZWJMYXllclRyZWVWaWV3JiBvcGVyYXRvcj0oY29uc3QgV2Vi
TGF5ZXJUcmVlVmlldyYgbGF5ZXIpCisgICAgeworICAgICAgICBhc3NpZ24obGF5ZXIpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYp
OworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYp
IGNvbnN0OworCisgICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0aGUgY29t
cG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQKKyAgICAvLyAoZW5hYmxlQ29tcG9zaXRvclRocmVh
ZCA9PSBmYWxzZSksIHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKKyAgICAvLyBpbW1lZGlh
dGVseS4gSWYgaXQgaXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBoYXBwZW4g
YXQgYQorICAgIC8vIGxhdGVyIHRpbWUuIEJlZm9yZSB0aGUgY29tcG9zaXRpbmcgcGFzcyBoYXBw
ZW5zIChpLmUuIGJlZm9yZSBjb21wb3NpdGUoKQorICAgIC8vIHJldHVybnMgd2hlbiB0aGUgY29t
cG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQpLCBXZWJDb250ZW50TGF5ZXJzIHdpbGwgYmUKKyAg
ICAvLyBhc2tlZCB0byBwYWludCB0aGVpciBkaXJ0eSByZWdpb24sIHRocm91Z2gKKyAgICAvLyBX
ZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGNvbXBvc2l0ZSgpOworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0U2l6
ZShjb25zdCBXZWJTaXplJik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViTGF5ZXJUcmVl
Vmlldyhjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOwor
ICAgIFdlYkxheWVyVHJlZVZpZXcmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX3ByaXZhdGU7Cit9
OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGEsIGNv
bnN0IFdlYkxheWVyVHJlZVZpZXcmIGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGEsIGNvbnN0
IFdlYkxheWVyVHJlZVZpZXcmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllclRyZWVWaWV3X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGll
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNWI4ZjFiNDMyMDUwZjc4MGI0ZWVjMjdjMmZlZTUzMGY3ZWFiMTFj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXJUcmVlVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxh
eWVyVHJlZVZpZXdDbGllbnRfaAorI2RlZmluZSBXZWJMYXllclRyZWVWaWV3Q2xpZW50X2gKKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdl
YlNpemU7CitjbGFzcyBXZWJUaHJlYWQ7CisKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQg
eworcHVibGljOgorICAgIC8vIFVwZGF0ZXMgYW5pbWF0aW9uIGFuZCBsYXlvdXQuIFRoaXMgaXMg
Y2FsbGVkIGJlZm9yZSB0aGUgY29tcG9zaXRpbmcgcGFzcworICAgIC8vIHNvIHRoYXQgbGF5ZXJz
IGNhbiBiZSB1cGRhdGVkIGF0IHRoZSBnaXZlbiBmcmFtZSB0aW1lLgorICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworCisgICAgLy8g
QXBwbGllcyBhIHNjcm9sbCBkZWx0YSB0byB0aGUgcm9vdCBsYXllci4gVGhpcyBpcyB0cmlnZ2Vy
ZWQgYnkgZXZlbnRzCisgICAgLy8gc2VudCB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQgdGhyb3Vn
aCB0aGUgV2ViQ29tcG9zaXRvciBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Ny
b2xsRGVsdGEoY29uc3QgV2ViU2l6ZSYpID0gMDsKKworICAgIC8vIENyZWF0ZXMgYSAzRCBjb250
ZXh0IHN1aXRhYmxlIGZvciB0aGUgY29tcG9zaXRpbmcuIFRoaXMgbWF5IGJlIGNhbGxlZAorICAg
IC8vIG1vcmUgdGhhbiBvbmNlIGlmIHRoZSBjb250ZXh0IGdldHMgbG9zdC4KKyAgICB2aXJ0dWFs
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVDb250ZXh0M0QoKSA9IDA7CisKKyAgICAvLyBT
aWduYWxzIGEgc3VjY2Vzc2Z1bCByZWJpbmRpbmcgb2YgdGhlIDNEIGNvbnRleHQgKGUuZy4gYWZ0
ZXIgYSBsb3N0CisgICAgLy8gY29udGV4dCBldmVudCkuCisgICAgdmlydHVhbCB2b2lkIGRpZFJl
YmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKKworICAgIC8vIFNjaGVkdWxl
cyBhIGNvbXBvc2l0aW5nIHBhc3MsIG1lYW5pbmcgdGhlIGNsaWVudCBzaG91bGQgY2FsbAorICAg
IC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSBhdCBhIGxhdGVyIHRpbWUuIFRoaXMgaXMg
b25seSBjYWxsZWQgaWYgdGhlCisgICAgLy8gY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQ7
IHdoZW4gZW5hYmxlZCwgdGhlIGNvbXBvc2l0b3Igd2lsbAorICAgIC8vIGludGVybmFsbHkgc2No
ZWR1bGUgYSBjb21wb3NpdGluZyBwYXNzIHdoZW4gbmVlZGVkLgorICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkxh
eWVyVHJlZVZpZXdDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTAzN2Q3YmQ5YmVlMmM3
M2U0NjY0NWQ1ZDViNDE3ODU3YjBlYmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllci5oIgorCisj
aW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgorI2luY2x1ZGUgIldlYkZsb2F0UmVjdC5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29udGVudExheWVyIFdlYkNvbnRlbnRMYXll
cjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNsaWVudCog
Y29udGVudENsaWVudCkKK3sKKyAgICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNvbnRlbnRM
YXllckltcGw6OmNyZWF0ZShjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKK30KKwordm9pZCBXZWJD
b250ZW50TGF5ZXI6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICB1
bndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVu
dCk7Cit9CisKK2Jvb2wgV2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kcmF3c0NvbnRl
bnQoKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IFdl
YkZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBs
PigpLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5
ZXI6OmludmFsaWRhdGUoKQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKK30KKworV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXllcjo6aW52
YWxpZFJlY3QoKQoreworICAgIHJldHVybiBXZWJGbG9hdFJlY3QodW53cmFwPFdlYkNvbnRlbnRM
YXllckltcGw+KCktPmRpcnR5UmVjdCgpKTsKK30KKworV2ViQ29udGVudExheWVyOjpXZWJDb250
ZW50TGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYgbm9kZSkKKyAg
ICA6IFdlYkxheWVyKG5vZGUpCit7Cit9CisKK1dlYkNvbnRlbnRMYXllciYgV2ViQ29udGVudExh
eWVyOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYgbm9k
ZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBub2RlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
Q29udGVudExheWVyOjpvcGVyYXRvciBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29udGVudExheWVySW1wbCo+KG1f
cHJpdmF0ZS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNjQxZTZjYTA3Mjk0Yjk3OTU0NzdkNGUyMDIyZTg5OWVhYjFjMjdhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAK
QEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJDb250ZW50TGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJDb250ZW50TGF5ZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpZiBX
RUJLSVRfVVNJTkdfU0tJQQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bh
c3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gV2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRl
KFdlYkxheWVyQ2xpZW50KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENs
aWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRlbnRMYXllckltcGwoY2xp
ZW50LCBjb250ZW50Q2xpZW50KSk7Cit9CisKK1dlYkNvbnRlbnRMYXllckltcGw6OldlYkNvbnRl
bnRMYXllckltcGwoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50
KiBjb250ZW50Q2xpZW50KQorICAgIDogQ29udGVudExheWVyQ2hyb21pdW0odGhpcykKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29udGVudENsaWVudChjb250ZW50Q2xpZW50KQor
ICAgICwgbV9kcmF3c0NvbnRlbnQodHJ1ZSkKK3sKK30KKworV2ViQ29udGVudExheWVySW1wbDo6
fldlYkNvbnRlbnRMYXllckltcGwoKQoreworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6
OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICBtX2RyYXdzQ29udGVu
dCA9IGRyYXdzQ29udGVudDsKK30KKworYm9vbCBXZWJDb250ZW50TGF5ZXJJbXBsOjpkcmF3c0Nv
bnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RyYXdzQ29udGVudDsKK30KKwordm9pZCBX
ZWJDb250ZW50TGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgZ2MsIGNv
bnN0IEludFJlY3QmIGNsaXApCit7CisgICAgaWYgKCFtX2NvbnRlbnRDbGllbnQpCisgICAgICAg
IHJldHVybjsKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFdlYkNhbnZhcyogY2FudmFzID0g
Z2MucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworI2VsaWYgV0VCS0lUX1VTSU5HX0NHCisg
ICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAg
IG1fY29udGVudENsaWVudC0+cGFpbnRDb250ZW50cyhjYW52YXMsIFdlYlJlY3QoY2xpcCkpOwor
fQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCgpCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVlZHNDb21wb3NpdGUo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA4ZGY1ZTNhMjU0ZWQ5
NTY5NDU5ODZmZDY1NDFhODRhOTg4NjVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaApAQCAtMCwwICsxLDU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJDb250ZW50TGF5ZXJJbXBsX2gKKyNkZWZpbmUgV2ViQ29udGVudExh
eWVySW1wbF9oCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViTGF5ZXJD
bGllbnQ7CitjbGFzcyBXZWJDb250ZW50TGF5ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkNvbnRlbnRM
YXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW0sIHB1YmxpYyBX
ZWJDb3JlOjpDQ0xheWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkNvbnRlbnRMYXllckltcGw+IGNyZWF0ZShXZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRM
YXllckNsaWVudCogY29udGVudENsaWVudCk7CisKKyAgICB2b2lkIHNldERyYXdzQ29udGVudChi
b29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICBXZWJDb250ZW50TGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExh
eWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KTsKKyAgICB2aXJ0dWFsIH5XZWJDb250ZW50TGF5ZXJJ
bXBsKCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lk
IG5vdGlmeVN5bmNSZXF1aXJlZCgpOworCisgICAgV2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50Owor
ICAgIFdlYkNvbnRlbnRMYXllckNsaWVudCogbV9jb250ZW50Q2xpZW50OworICAgIGJvb2wgbV9k
cmF3c0NvbnRlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdl
YkNvbnRlbnRMYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdkNjYyYzgxZDZkMzMyNzViNDdkMzU2NDBjOGFkZjdmZGM1OGZiZDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAK
QEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViTGF5ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTa01h
dHJpeDQ0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJX
ZWJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
U2l6ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRyaXg0NChjb25z
dCBTa01hdHJpeDQ0JiBtYXRyaXgpCit7CisgICAgZG91YmxlIGRhdGFbMTZdOworICAgIG1hdHJp
eC5hc0NvbE1ham9yZChkYXRhKTsKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVs0XSwgZGF0YVs1XSwgZGF0YVs2XSwgZGF0YVs3XSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVs4XSwgZGF0YVs5XSwgZGF0YVsxMF0sIGRhdGFbMTFd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzEyXSwgZGF0YVsxM10sIGRh
dGFbMTRdLCBkYXRhWzE1XSk7Cit9CisKK1NrTWF0cml4NDQgc2tNYXRyaXg0NEZyb21UcmFuc2Zv
cm1hdGlvbk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQoreworICAg
IFNrTWF0cml4NDQgc2tNYXRyaXg7CisgICAgc2tNYXRyaXguc2V0KDAsIDAsIFNrRG91YmxlVG9N
U2NhbGFyKG1hdHJpeC5tMTEoKSkpOworICAgIHNrTWF0cml4LnNldCgxLCAwLCBTa0RvdWJsZVRv
TVNjYWxhcihtYXRyaXgubTEyKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMiwgMCwgU2tEb3VibGVU
b01TY2FsYXIobWF0cml4Lm0xMygpKSk7CisgICAgc2tNYXRyaXguc2V0KDMsIDAsIFNrRG91Ymxl
VG9NU2NhbGFyKG1hdHJpeC5tMTQoKSkpOworICAgIHNrTWF0cml4LnNldCgwLCAxLCBTa0RvdWJs
ZVRvTVNjYWxhcihtYXRyaXgubTIxKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMSwgMSwgU2tEb3Vi
bGVUb01TY2FsYXIobWF0cml4Lm0yMigpKSk7CisgICAgc2tNYXRyaXguc2V0KDIsIDEsIFNrRG91
YmxlVG9NU2NhbGFyKG1hdHJpeC5tMjMoKSkpOworICAgIHNrTWF0cml4LnNldCgzLCAxLCBTa0Rv
dWJsZVRvTVNjYWxhcihtYXRyaXgubTI0KCkpKTsKKyAgICBza01hdHJpeC5zZXQoMCwgMiwgU2tE
b3VibGVUb01TY2FsYXIobWF0cml4Lm0zMSgpKSk7CisgICAgc2tNYXRyaXguc2V0KDEsIDIsIFNr
RG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tMzIoKSkpOworICAgIHNrTWF0cml4LnNldCgyLCAyLCBT
a0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTMzKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMywgMiwg
U2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm0zNCgpKSk7CisgICAgc2tNYXRyaXguc2V0KDAsIDMs
IFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tNDEoKSkpOworICAgIHNrTWF0cml4LnNldCgxLCAz
LCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTQyKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMiwg
MywgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm00MygpKSk7CisgICAgc2tNYXRyaXguc2V0KDMs
IDMsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tNDQoKSkpOworICAgIHJldHVybiBza01hdHJp
eDsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJMYXllciBXZWJMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgcmV0dXJuIFdlYkxheWVyKFdlYkxheWVySW1wbDo6Y3JlYXRlKGNsaWVudCkpOworfQorCitX
ZWJMYXllcjo6fldlYkxheWVyKCkKK3sKKyAgICByZXNldCgpOworfQorCit2b2lkIFdlYkxheWVy
OjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6
OmFzc2lnbihjb25zdCBXZWJMYXllciYgb3RoZXIpCit7CisgICAgbV9wcml2YXRlID0gb3RoZXIu
bV9wcml2YXRlOworfQorCitib29sIFdlYkxheWVyOjplcXVhbHMoY29uc3QgV2ViTGF5ZXImIG4p
IGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3ByaXZhdGUuZ2V0KCkgPT0gbi5tX3ByaXZhdGUuZ2V0
KCkpOworfQorCitXZWJMYXllciBXZWJMYXllcjo6cm9vdExheWVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV2ViTGF5ZXIoY29uc3RfY2FzdDxMYXllckNocm9taXVtKj4obV9wcml2YXRlLT5yb290
TGF5ZXIoKSkpOworfQorCitXZWJMYXllciBXZWJMYXllcjo6cGFyZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV2ViTGF5ZXIoY29uc3RfY2FzdDxMYXllckNocm9taXVtKj4obV9wcml2YXRlLT5w
YXJlbnQoKSkpOworfQorCit2b2lkIFdlYkxheWVyOjphZGRDaGlsZChjb25zdCBXZWJMYXllciYg
Y2hpbGQpCit7CisgICAgbV9wcml2YXRlLT5hZGRDaGlsZChjaGlsZCk7Cit9CisKK3ZvaWQgV2Vi
TGF5ZXI6Omluc2VydENoaWxkKGNvbnN0IFdlYkxheWVyJiBjaGlsZCwgc2l6ZV90IGluZGV4KQor
eworICAgIG1fcHJpdmF0ZS0+aW5zZXJ0Q2hpbGQoY2hpbGQsIGluZGV4KTsKK30KKwordm9pZCBX
ZWJMYXllcjo6cmVwbGFjZUNoaWxkKGNvbnN0IFdlYkxheWVyJiByZWZlcmVuY2UsIGNvbnN0IFdl
YkxheWVyJiBuZXdMYXllcikKK3sKKyAgICBXZWJMYXllciByZWYgPSByZWZlcmVuY2U7CisgICAg
bV9wcml2YXRlLT5yZXBsYWNlQ2hpbGQocmVmLnVud3JhcDxMYXllckNocm9taXVtPigpLCBuZXdM
YXllcik7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIG1f
cHJpdmF0ZS0+cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCit2b2lkIFdlYkxheWVyOjpyZW1vdmVB
bGxDaGlsZHJlbigpCit7CisgICAgbV9wcml2YXRlLT5yZW1vdmVBbGxDaGlsZHJlbigpOworfQor
Cit2b2lkIFdlYkxheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBXZWJGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KTsK
K30KKworV2ViRmxvYXRQb2ludCBXZWJMYXllcjo6YW5jaG9yUG9pbnQoKSBjb25zdAoreworICAg
IHJldHVybiBXZWJGbG9hdFBvaW50KG1fcHJpdmF0ZS0+YW5jaG9yUG9pbnQoKSk7Cit9CisKK3Zv
aWQgV2ViTGF5ZXI6OnNldEFuY2hvclBvaW50WihmbG9hdCBhbmNob3JQb2ludFopCit7CisgICAg
bV9wcml2YXRlLT5zZXRBbmNob3JQb2ludFooYW5jaG9yUG9pbnRaKTsKK30KKworZmxvYXQgV2Vi
TGF5ZXI6OmFuY2hvclBvaW50WigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YW5j
aG9yUG9pbnRaKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBXZWJTaXpl
JiBzaXplKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm91bmRzKHNpemUpOworfQorCitXZWJTaXpl
IFdlYkxheWVyOjpib3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTaXplKG1fcHJpdmF0
ZS0+Ym91bmRzKCkpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
bWFza3NUb0JvdW5kcykKK3sKKyAgICBtX3ByaXZhdGUtPnNldE1hc2tzVG9Cb3VuZHMobWFza3NU
b0JvdW5kcyk7Cit9CisKK2Jvb2wgV2ViTGF5ZXI6Om1hc2tzVG9Cb3VuZHMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm1hc2tzVG9Cb3VuZHMoKTsKK30KKwordm9pZCBXZWJMYXll
cjo6c2V0TWFza0xheWVyKGNvbnN0IFdlYkxheWVyJiBtYXNrTGF5ZXIpCit7CisgICAgV2ViTGF5
ZXIgcmVmID0gbWFza0xheWVyOworICAgIHJldHVybiBtX3ByaXZhdGUtPnNldE1hc2tMYXllcihy
ZWYudW53cmFwPExheWVyQ2hyb21pdW0+KCkpOworfQorCitXZWJMYXllciBXZWJMYXllcjo6bWFz
a0xheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXIobV9wcml2YXRlLT5tYXNrTGF5
ZXIoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK2Zsb2F0IFdlYkxheWVy
OjpvcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5vcGFjaXR5KCk7Cit9
CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE9wYXF1ZShib29sIG9wYXF1ZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldE9wYXF1ZShvcGFxdWUpOworfQorCitib29sIFdlYkxheWVyOjpvcGFxdWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm9wYXF1ZSgpOworfQorCit2b2lkIFdlYkxheWVy
OjpzZXRQb3NpdGlvbihjb25zdCBXZWJGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBtX3By
aXZhdGUtPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKK30KKworV2ViRmxvYXRQb2ludCBXZWJMYXll
cjo6cG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBXZWJGbG9hdFBvaW50KG1fcHJpdmF0
ZS0+cG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNmb3Jt
KGNvbnN0IFNrTWF0cml4NDQmIG1hdHJpeCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN1YmxheWVy
VHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbVNrTWF0cml4NDQobWF0cml4KSk7Cit9
CisKK1NrTWF0cml4NDQgV2ViTGF5ZXI6OnN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnN1
YmxheWVyVHJhbnNmb3JtKCkpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRUcmFuc2Zvcm0oY29u
c3QgU2tNYXRyaXg0NCYgbWF0cml4KQoreworICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKHRy
YW5zZm9ybWF0aW9uTWF0cml4RnJvbVNrTWF0cml4NDQobWF0cml4KSk7Cit9CisKK1NrTWF0cml4
NDQgV2ViTGF5ZXI6OnRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNrTWF0cml4NDRG
cm9tVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcml2YXRlLT50cmFuc2Zvcm0oKSk7Cit9CisKK1dl
YkxheWVyOjpXZWJMYXllcihjb25zdCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+JiBub2RlKQor
ICAgIDogbV9wcml2YXRlKG5vZGUpCit7Cit9CisKK1dlYkxheWVyJiBXZWJMYXllcjo6b3BlcmF0
b3I9KGNvbnN0IFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4mIG5vZGUpCit7CisgICAgbV9wcml2
YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkxheWVyOjpvcGVyYXRvciBQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5ODEzMjFlZDIwZWRkODgyYWMw
NzIxMDZmMjNjM2E1M2U1ZTI4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJX
ZWJMYXllckNsaWVudC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBXZWJMYXllckltcGw6OmNyZWF0
ZShXZWJMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
TGF5ZXJJbXBsKGNsaWVudCkpOworfQorCitXZWJMYXllckltcGw6OldlYkxheWVySW1wbChXZWJM
YXllckNsaWVudCogY2xpZW50KSA6IExheWVyQ2hyb21pdW0odGhpcyksIG1fY2xpZW50KGNsaWVu
dCkKK3sKK30KKworV2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKCkKK3sKK30KKworYm9vbCBX
ZWJMYXllckltcGw6OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFdlYkxheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRSZWN0JiBjbGlwKQoreworfQorCit2b2lkIFdlYkxheWVySW1wbDo6bm90aWZ5U3lu
Y1JlcXVpcmVkKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlOZWVkc0NvbXBvc2l0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU4ZDQxYjVjZGUx
YTg0ODcwMmNhZDBmMzc1MTJjODkxMTU1MTExNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkxheWVySW1wbF9oCisjZGVmaW5lIFdlYkxheWVySW1wbF9oCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllckNsaWVudDsKKworY2xhc3MgV2ViTGF5ZXJJ
bXBsIDogcHVibGljIFdlYkNvcmU6OkxheWVyQ2hyb21pdW0sIHB1YmxpYyBXZWJDb3JlOjpDQ0xh
eWVyRGVsZWdhdGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkxheWVySW1w
bD4gY3JlYXRlKFdlYkxheWVyQ2xpZW50Kik7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJMYXllcklt
cGwoV2ViTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5XZWJMYXllckltcGwoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZCgpOworCisgICAg
V2ViTGF5ZXJDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJMYXllckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJMYXllclRyZWVWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2RiMWFlMGI4OTkyMDZiNGJiZDYz
NzI4MzNhZTViNjBiNjAwY2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlldy5oIgorCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCIKKyNpbmNsdWRlICJXZWJTaXplLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRv
ciBDQ1NldHRpbmdzKCkgY29uc3QKK3sKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIHNl
dHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGFjY2VsZXJhdGVQYWludGluZzsKKyAgICBzZXR0
aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBjb21wb3NpdGVPZmZzY3JlZW47CisKKyAgICAvLyBG
SVhNRTogY29tcG9zaXRvciB0aHJlYWQgaXNuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KKyAgICBz
ZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisKKyAgICAvLyBGSVhNRTog
c2hvd0ZQU0NvdW50ZXIgLyBzaG93UGxhdGZvcm1MYXllclRyZWUgYXJlbid0IHN1cHBvcnRlZCBj
dXJyZW50bHkuCisgICAgc2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBmYWxzZTsKKyAgICBzZXR0
aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBmYWxzZTsKKyAgICByZXR1cm4gc2V0dGluZ3M7
Cit9CisKK1dlYkxheWVyVHJlZVZpZXcgV2ViTGF5ZXJUcmVlVmlldzo6Y3JlYXRlKFdlYkxheWVy
VHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxh
eWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXJU
cmVlVmlldyhXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKGNsaWVudCwgcm9vdCwgc2V0dGlu
Z3MpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpyZXNldCgpCit7CisgICAgbV9wcml2
YXRlLnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6YXNzaWduKGNvbnN0IFdl
YkxheWVyVHJlZVZpZXcmIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJpdmF0
ZTsKK30KKworYm9vbCBXZWJMYXllclRyZWVWaWV3OjplcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVl
VmlldyYgbikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJp
dmF0ZS5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKCkKK3sK
KyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fcHJpdmF0ZS0+Y29tcG9zaXRl
KCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRWaWV3cG9ydFNpemUo
Y29uc3QgV2ViU2l6ZSYgdmlld3BvcnRTaXplKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Vmlld3Bv
cnQodmlld3BvcnRTaXplKTsKK30KKworV2ViU2l6ZSBXZWJMYXllclRyZWVWaWV3Ojp2aWV3cG9y
dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTaXplKG1fcHJpdmF0ZS0+dmlld3BvcnRT
aXplKCkpOworfQorCitXZWJMYXllclRyZWVWaWV3OjpXZWJMYXllclRyZWVWaWV3KGNvbnN0IFBh
c3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKKyAgICA6IG1fcHJpdmF0ZShub2RlKQor
eworfQorCitXZWJMYXllclRyZWVWaWV3JiBXZWJMYXllclRyZWVWaWV3OjpvcGVyYXRvcj0oY29u
c3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9
IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJMYXllclRyZWVWaWV3OjpvcGVyYXRv
ciBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQxNGI5YjBmMzYwYTEzY2FkZjRhZmY3NmQwYTdmYWM2ZmNhODNkMmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlVmlld0ltcGwuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkSW1wbC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIldlYkxh
eWVyLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlldy5oIgorI2luY2x1ZGUgIldlYkxheWVy
VHJlZVZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTaXplLmgiCisjaW5jbHVkZSAiV2ViVGhy
ZWFkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUGFzc1JlZlB0cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiBy
b290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAg
UmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBob3N0ID0gYWRvcHRSZWYobmV3IFdlYkxheWVy
VHJlZVZpZXdJbXBsKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpKTsKKyAgICBpZiAoIWhvc3QtPmlu
aXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGhvc3Q7Cit9CisKK1dl
YkxheWVyVHJlZVZpZXdJbXBsOjpXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRyZWVW
aWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpIAorICAgIDogQ0NMYXllclRyZWVIb3N0KHRoaXMsIHJv
b3QsIHNldHRpbmdzKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJMYXllclRy
ZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBsKCkKK3sKK30KKwordm9pZCBXZWJMYXll
clRyZWVWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChm
cmFtZUJlZ2luVGltZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFwcGx5U2Ny
b2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxEZWx0YShXZWJTaXplKGRlbHRhKSk7
Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYkxheWVyVHJlZVZpZXdJbXBs
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNv
bnRleHQgPSBhZG9wdFB0cihtX2NsaWVudC0+Y3JlYXRlQ29udGV4dDNEKCkpOworICAgIGlmICgh
d2ViQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzID0gd2ViQ29udGV4dC0+Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwor
ICAgIGF0dHJpYnV0ZXMuYWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLmFscGhhOworICAgIGF0dHJpYnV0
ZXMuZGVwdGggPSB3ZWJBdHRyaWJ1dGVzLmRlcHRoOworICAgIGF0dHJpYnV0ZXMuc3RlbmNpbCA9
IHdlYkF0dHJpYnV0ZXMuc3RlbmNpbDsKKyAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IHdlYkF0
dHJpYnV0ZXMuYW50aWFsaWFzOworICAgIGF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0g
d2ViQXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE7CisgICAgYXR0cmlidXRlcy5jYW5SZWNv
dmVyRnJvbUNvbnRleHRMb3NzID0gd2ViQXR0cmlidXRlcy5jYW5SZWNvdmVyRnJvbUNvbnRleHRM
b3NzOworICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gd2ViQXR0cmlidXRlcy5ub0V4dGVu
c2lvbnM7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHdlYkF0dHJpYnV0ZXMuc2hh
cmVSZXNvdXJjZXM7CisgICAgYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBmYWxz
ZTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBzdHlsZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdzsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OlRocmVhZFVzYWdlIHVzYWdlID0gc2V0dGluZ3MoKS5lbmFibGVDb21wb3Np
dG9yVGhyZWFkID8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPbkFub3RoZXJUaHJl
YWQgOiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZDsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9t
V2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cmlidXRlcywgMCwgc3R5bGUsIHVz
YWdlKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGlj
c0NvbnRleHQoYm9vbCBzdWNjZXNzKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKK30KKworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpzY2hlZHVs
ZUNvbXBvc2l0ZSgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2No
ZWR1bGVDb21wb3NpdGUoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ1ZjJhOWU4YjQzM2ZhMGM2NjljNTQ2NWQwYWUzZDAxMmQyNDRiMzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZpZXdJ
bXBsX2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlVmlld0ltcGxfaAorCisjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlVmlldy5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViTGF5ZXI7
CitjbGFzcyBXZWJMYXllclRyZWVWaWV3Q2xpZW50OworCitjbGFzcyBXZWJMYXllclRyZWVWaWV3
SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3QsIHB1YmxpYyBXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkxheWVyVHJlZVZpZXdJbXBsPiBjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0
IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYpOworCitw
cml2YXRlOgorICAgIFdlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQq
LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3Mm
KTsKKyAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVWaWV3SW1wbCgpOworICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKKworICAgIFdlYkxheWVy
VHJlZVZpZXdDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJMYXllclRyZWVWaWV3SW1wbF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110039</attachid>
            <date>2011-10-06 15:09:41 -0700</date>
            <delta_ts>2011-10-06 21:23:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111006150940.patch</filename>
            <type>text/plain</type>
            <size>61269</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY3ODMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4OTVhMzMyNTAxYzEzYjc4
YzA5YTMzNDkyODBjMTk2MmE0NGZlNTYxLi45YTFmYjQ5Yzk5MzYzMGNjMTgxZDJlMGJkMjY3ZDFk
MzczMGRjYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTA1ICBEb21pbmljIENvb25leSAgPGRvbWluaWNjQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBJc1NoYWRvd1Jvb3RGbGFnIHNob3VsZCBub3QgZGVwZW5kIG9uIHdoZXRoZXIgYSBTaGFkb3dS
b290IGlzIGF0dGFjaGVkIHRvIGEgaG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5o
CmluZGV4IGEyMWJjNjgwOGY4OGNmNDk3YTliN2JhMzY2ZTE3MWU5M2Y4OTZlNmQuLmI4MzRlNjc2
YmQ2MzQ0NWFhNDUzYjM2NWVlZTI4MDI0MGYzODA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uaApAQCAtNTEsOSArNTEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CiAKK3ByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wg
ZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRh
dGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBkYmY2YjMyYjY1YzU2OTY5YWMwMjczZjI0MTRmZmE4MDFjZDA2MzRmLi5jOTJjOWMwZWNlZTNl
YTNkNGZkNTQ1OTBiZGFkZTg4MGM3NzA3MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyMiBAQAorMjAxMS0xMC0wNSAgQW50b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2Via2l0IEFQSSBmb3IgY29tcG9zaXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6On5XZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllckNs
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyQ2xpZW50Ojp+
V2ViQ29udGVudExheWVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG8p
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG9Db25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjp1bndyYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y29uc3RVbndy
YXApOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYkxheWVyQ2xpZW50Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllckNsaWVudDo6fldlYkxheWVyQ2xpZW50KToKKyAgICAgICAg
KiBwdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVZpZXc6On5XZWJMYXllclRyZWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlldzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRy
ZWVWaWV3Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
Q2xpZW50Ojp+V2ViTGF5ZXJUcmVlVmlld0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkNvbnRl
bnRMYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6ZGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGVudExheWVyOjpXZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXll
cjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPik6CisgICAgICAgICog
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExh
eWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllckltcGw6On5XZWJDb250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6fldlYkxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjplcXVhbHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGls
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyOjpyZW1vdmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpz
ZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXI6OnNldEJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjptYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6
OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAg
ICogc3JjL1dlYkxheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJ
bXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllckltcGw6OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllckltcGw6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1w
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlldzo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6ZXF1YWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6Y29t
cG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRT
aXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVI
b3N0Pik6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlv
dXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxE
ZWx0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0lt
cGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5
ZXJUcmVlVmlld0ltcGwuaDogQWRkZWQuCisKIDIwMTEtMTAtMDUgIEFsZXhlaSBTdml0a2luZSAg
PGFzdml0a2luZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBkZXN0cnVjdG9yIG9mIFdl
YlVSTExvYWRlckNsaWVudCB2aXJ0dWFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4
IDUyNDQwMzM4OGIxNDRkZGViNTJjOTZiZDhhYWI4MTZhMDJjZjkzOTIuLjc4OTU0MDI2MmZmODAw
NmE5NTFkZGY5Y2MwYzFmMWZhNDE1MzkyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTg1LDYgKzg1LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljJywKICAgICAgICAgICAg
ICAgICAnc3JjJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9w
YXJ0eS9hbmdsZS9pbmNsdWRlJywKKyAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMnLAogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICdkZWZpbmVzJzogWwogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJ
T049MScsCkBAIC0xMzAsNiArMTMxLDggQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNv
bXBvc2l0b3JDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9y
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29uc29sZU1lc3NhZ2UuaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb250ZW50TGF5ZXIuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJDb250ZXh0TWVudURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb29r
aWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb29raWVKYXIuaCcsCkBAIC0yMTYs
NiArMjE5LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJMYWJlbEVsZW1lbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJMYXllci5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxheWVyQ2xpZW50LmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJMb2NhbGl6ZWRTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJNZWRpYUVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNZWRpYVBsYXll
ci5oJywKQEAgLTQ0OSw2ICs0NTYsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29tbW9u
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21wb3NpdG9ySW1wbC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQ29tcG9zaXRvckltcGwuaCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRl
bnRMYXllckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCkBAIC01MzMsNiArNTQzLDEyIEBA
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYktpdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGFi
ZWxFbGVtZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllci5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJMYXllckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJNZWRpYUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDb250ZW50TGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDdmMTAxNDEyMjhhMWYwMzhjMTc1YWRi
YjBjMWY3NjZiODZlNWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQ29udGVudExheWVyX2gKKyNkZWZpbmUgV2ViQ29udGVudExheWVyX2gKKworI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OworY2xhc3MgV2ViQ29udGVudExheWVy
SW1wbDsKK2NsYXNzIFdlYkZsb2F0UmVjdDsKK2NsYXNzIFdlYkxheWVyQ2xpZW50OworCitjbGFz
cyBXZWJDb250ZW50TGF5ZXIgOiBwdWJsaWMgV2ViTGF5ZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBXZWJDb250ZW50TGF5ZXIgY3JlYXRlKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExheWVy
Q2xpZW50Kik7CisKKyAgICBXZWJDb250ZW50TGF5ZXIoKSB7IH0KKyAgICBXZWJDb250ZW50TGF5
ZXIoY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikgOiBXZWJMYXllcihsYXllcikgeyB9Cisg
ICAgdmlydHVhbCB+V2ViQ29udGVudExheWVyKCkgeyB9CisgICAgV2ViQ29udGVudExheWVyJiBv
cGVyYXRvcj0oY29uc3QgV2ViQ29udGVudExheWVyJiBsYXllcikKKyAgICB7CisgICAgICAgIFdl
YkxheWVyOjphc3NpZ24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBsYXllciBkcmF3cyBpdHMgY29udGVudCB3aGVuIGNvbXBv
c2l0aW5nLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworCisgICAgLy8gU2V0
cyBhIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUg
aXRzIGNvbnRlbnQuCisgICAgLy8gVGhlIHZpc2libGUgYXJlYSBvZiB0aGUgZGlydHkgcmVjdCB3
aWxsIGJlIHBhc3NlZCB0byBvbmUgb3IgbW9yZSBjYWxscyB0bworICAgIC8vIFdlYkNvbnRlbnRM
YXllckNsaWVudDo6cGFpbnRDb250ZW50cyBiZWZvcmUgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgb2Nj
dXJzLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJGbG9h
dFJlY3QmKTsKKworICAgIC8vIFNldHMgdGhlIGVudGlyZSBsYXllciBhcyBpbnZhbGlkLCBpLmUu
IG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgLy8gUmV0dXJucyB0aGUgcmVnaW9uIG9mIHRoZSBsYXllciB0aGF0
IGlzIGN1cnJlbnRseSBpbnZhbGlkLgorICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRSZWN0IGlu
dmFsaWRSZWN0KCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJD
b250ZW50TGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+Jik7
CisgICAgV2ViQ29udGVudExheWVyJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvbnRlbnRMYXllckltcGw+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
bnRlbnRMYXllckltcGw+KCkgY29uc3Q7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWI0YmUwY2E3N2ZjNmUzOWY3ODg0ODc2YjFiY2M2YzQzZThjNmI5YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllckNsaWVudF9o
CisjZGVmaW5lIFdlYkNvbnRlbnRMYXllckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDYW52YXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJSZWN0OworCitjbGFzcyBXZWJDb250
ZW50TGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFBhaW50cyB0aGUgY29udGVudCBhcmVh
IGZvciB0aGUgbGF5ZXIsIHR5cGljYWxseSBkaXJ0eSByZWN0cyBzdWJtaXR0ZWQKKyAgICAvLyB0
aHJvdWdoIFdlYkNvbnRlbnRMYXllcjo6c2V0TmVlZHNEaXNwbGF5LCBzdWJtaXR0aW5nIGRyYXdp
bmcgY29tbWFuZHMKKyAgICAvLyB0aHJvdWdoIHRoZSBXZWJDYW52YXMuCisgICAgLy8gVGhlIGNh
bnZhcyBpcyBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIHxjbGlwfCByZWN0LgorICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIGNsaXApID0gMDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckNsaWVudCgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZW50TGF5ZXJD
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTMxZTA1N2NjNDZjMzI5YTExMWI2MDBiZGI1MjQ4YWU3ZThjMTYxMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAor
CisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCitj
bGFzcyBTa01hdHJpeDQ0OworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBMYXllckNocm9taXVt
OyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRmxvYXRQb2ludDsKK2NsYXNzIFdl
YkxheWVyQ2xpZW50OworY2xhc3MgV2ViU2l6ZTsKKworY2xhc3MgV2ViTGF5ZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBXZWJMYXllciBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKworICAgIFdl
YkxheWVyKCkgeyB9CisgICAgV2ViTGF5ZXIoY29uc3QgV2ViTGF5ZXImIGxheWVyKSB7IGFzc2ln
bihsYXllcik7IH0KKyAgICB2aXJ0dWFsIH5XZWJMYXllcigpOworICAgIFdlYkxheWVyJiBvcGVy
YXRvcj0oY29uc3QgV2ViTGF5ZXImIGxheWVyKQorICAgIHsKKyAgICAgICAgYXNzaWduKGxheWVy
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
cmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkxheWVyJik7
CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJMYXllciYpIGNvbnN0Owor
CisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciByb290TGF5ZXIoKSBjb25zdDsKKyAgICBXRUJL
SVRfRVhQT1JUIFdlYkxheWVyIHBhcmVudCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhZGRDaGlsZChjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnNl
cnRDaGlsZChjb25zdCBXZWJMYXllciYsIHNpemVfdCBpbmRleCk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHJlcGxhY2VDaGlsZChjb25zdCBXZWJMYXllciYgcmVmZXJlbmNlLCBjb25zdCBXZWJM
YXllciYgbmV3TGF5ZXIpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZW1vdmVGcm9tUGFyZW50
KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViRmxvYXRQb2ludCYpOwor
ICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0OworCisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCk7CisgICAgV0VCS0lU
X0VYUE9SVCBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBzZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViU2l6
ZSBib3VuZHMoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRNYXNrc1RvQm91
bmRzKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBtYXNrc1RvQm91bmRzKCkgY29uc3Q7
CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TWFza0xheWVyKGNvbnN0IFdlYkxheWVyJik7
CisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciBtYXNrTGF5ZXIoKSBjb25zdDsKKworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAgICBXRUJLSVRfRVhQT1JUIGZs
b2F0IG9wYWNpdHkoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRPcGFxdWUo
Ym9vbCk7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIG9wYXF1ZSgpIGNvbnN0OworCisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFdlYkZsb2F0UG9pbnQmKTsKKyAgICBX
RUJLSVRfRVhQT1JUIFdlYkZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdDsKKworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7Cisg
ICAgV0VCS0lUX0VYUE9SVCBTa01hdHJpeDQ0IHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3Q7CisK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4NDQmKTsK
KyAgICBXRUJLSVRfRVhQT1JUIFNrTWF0cml4NDQgdHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHRvKCkKKyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAg
ICByZXMuV2ViTGF5ZXI6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCB0b0NvbnN0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViTGF5ZXI6OmFzc2lnbigqdGhpcyk7
CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CisgICAgV2ViTGF5ZXIoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21p
dW0+Jik7CisgICAgV2ViTGF5ZXImIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bT4oKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
KiB1bndyYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX3ByaXZh
dGUuZ2V0KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQqIGNv
bnN0VW53cmFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBUKj4obV9wcml2YXRlLmdldCgpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAg
IFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bT4gbV9wcml2YXRlOworfTsKKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJMYXllciYgYSwgY29uc3QgV2ViTGF5ZXIm
IGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYkxheWVyJiBhLCBjb25zdCBXZWJMYXllciYgYikKK3sKKyAgICByZXR1cm4g
IShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxh
eWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVy
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckNsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlmMTQ4YmEyZWUxMzc4NDJiMTEyZGMzMjkyYzk4MDQ5ZTU1Y2U5NmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckNs
aWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyQ2xpZW50X2gK
KyNkZWZpbmUgV2ViTGF5ZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIE5vdGlmaWVzIHRoZSBjbGllbnQgdGhh
dCB0aGUgbGF5ZXIgaGFzIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBuZWVkcyBhCisgICAgLy8gY29t
cG9zaXRpbmcgcGFzcyB0byB2aXN1YWxseSB1cGRhdGUuIFRoZSBjbGllbnQgc2hvdWxkIGV2ZW50
dWFsbHkgY2FsbAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZS4KKyAgICAvLyBO
b3RlOiBzb21lIGNvbXBsZXggb3BlcmF0aW9ucyAoZS5nIGxheWVyIHJlcGFyZW50aW5nKSBjYW4g
Y2F1c2UgdGhpcyB0bworICAgIC8vIGJlIGNhbGxlZCB3aGlsZSB0aGUgbGF5ZXIgdHJlZSBpcyBp
biBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHRvIGdldAorICAgIC8vIGNvcnJlY3QgcmVzdWx0
cywgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhl
CisgICAgLy8gb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCAoZS5nLiBieSBwb3N0aW5nIGEgdGFzayku
CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRzQ29tcG9zaXRlKCkgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+V2ViTGF5ZXJDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYzVj
OGQ3NTNhZmJhMDlhYTI0OTYwMjUyM2UzYTc0ZTM1ODNkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKQEAgLTAsMCAr
MSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZpZXdfaAorI2RlZmluZSBXZWJM
YXllclRyZWVWaWV3X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlBy
aXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NMYXllclRyZWVIb3N0
OworY2xhc3MgQ0NTZXR0aW5nczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJM
YXllcjsKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQ7CitjbGFzcyBXZWJTaXplOworCitj
bGFzcyBXZWJMYXllclRyZWVWaWV3IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgU2V0dGluZ3Mgewor
ICAgICAgICBTZXR0aW5ncygpCisgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxz
ZSkKKyAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQorICAgICAgICAgICAg
LCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKSB7IH0KKworICAgICAgICBib29sIGFjY2Vs
ZXJhdGVQYWludGluZzsKKyAgICAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgICAg
IGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCisg
ICAgfTsKKworICAgIHN0YXRpYyBXZWJMYXllclRyZWVWaWV3IGNyZWF0ZShXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFNldHRpbmdzJik7CisKKyAg
ICBXZWJMYXllclRyZWVWaWV3KCkgeyB9CisgICAgV2ViTGF5ZXJUcmVlVmlldyhjb25zdCBXZWJM
YXllclRyZWVWaWV3JiBsYXllcikgeyBhc3NpZ24obGF5ZXIpOyB9CisgICAgfldlYkxheWVyVHJl
ZVZpZXcoKSB7IHJlc2V0KCk7IH0KKyAgICBXZWJMYXllclRyZWVWaWV3JiBvcGVyYXRvcj0oY29u
c3QgV2ViTGF5ZXJUcmVlVmlldyYgbGF5ZXIpCisgICAgeworICAgICAgICBhc3NpZ24obGF5ZXIp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBy
ZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVl
VmlldyYpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVl
VmlldyYpIGNvbnN0OworCisgICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0
aGUgY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQKKyAgICAvLyAoZW5hYmxlQ29tcG9zaXRv
clRocmVhZCA9PSBmYWxzZSksIHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKKyAgICAvLyBp
bW1lZGlhdGVseS4gSWYgaXQgaXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBo
YXBwZW4gYXQgYQorICAgIC8vIGxhdGVyIHRpbWUuIEJlZm9yZSB0aGUgY29tcG9zaXRpbmcgcGFz
cyBoYXBwZW5zIChpLmUuIGJlZm9yZSBjb21wb3NpdGUoKQorICAgIC8vIHJldHVybnMgd2hlbiB0
aGUgY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQpLCBXZWJDb250ZW50TGF5ZXJzIHdpbGwg
YmUKKyAgICAvLyBhc2tlZCB0byBwYWludCB0aGVpciBkaXJ0eSByZWdpb24sIHRocm91Z2gKKyAg
ICAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMuCisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGNvbXBvc2l0ZSgpOworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpZXdw
b3J0U2l6ZShjb25zdCBXZWJTaXplJik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTaXplIHZpZXdw
b3J0U2l6ZSgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViTGF5
ZXJUcmVlVmlldyhjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
PiYpOworICAgIFdlYkxheWVyVHJlZVZpZXcmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVj
dGVkOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX3ByaXZh
dGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcm
IGEsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIp
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGEs
IGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllclRyZWVWaWV3X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZp
ZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZp
ZXdDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWI4ZjFiNDMyMDUwZjc4MGI0ZWVjMjdjMmZlZTUzMGY3
ZWFiMTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkxheWVyVHJlZVZpZXdDbGllbnRfaAorI2RlZmluZSBXZWJMYXllclRyZWVWaWV3Q2xpZW50
X2gKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKK2Ns
YXNzIFdlYlNpemU7CitjbGFzcyBXZWJUaHJlYWQ7CisKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdD
bGllbnQgeworcHVibGljOgorICAgIC8vIFVwZGF0ZXMgYW5pbWF0aW9uIGFuZCBsYXlvdXQuIFRo
aXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29tcG9zaXRpbmcgcGFzcworICAgIC8vIHNvIHRoYXQg
bGF5ZXJzIGNhbiBiZSB1cGRhdGVkIGF0IHRoZSBnaXZlbiBmcmFtZSB0aW1lLgorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworCisg
ICAgLy8gQXBwbGllcyBhIHNjcm9sbCBkZWx0YSB0byB0aGUgcm9vdCBsYXllci4gVGhpcyBpcyB0
cmlnZ2VyZWQgYnkgZXZlbnRzCisgICAgLy8gc2VudCB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQg
dGhyb3VnaCB0aGUgV2ViQ29tcG9zaXRvciBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViU2l6ZSYpID0gMDsKKworICAgIC8vIENyZWF0ZXMgYSAz
RCBjb250ZXh0IHN1aXRhYmxlIGZvciB0aGUgY29tcG9zaXRpbmcuIFRoaXMgbWF5IGJlIGNhbGxl
ZAorICAgIC8vIG1vcmUgdGhhbiBvbmNlIGlmIHRoZSBjb250ZXh0IGdldHMgbG9zdC4KKyAgICB2
aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVDb250ZXh0M0QoKSA9IDA7CisKKyAg
ICAvLyBTaWduYWxzIGEgc3VjY2Vzc2Z1bCByZWJpbmRpbmcgb2YgdGhlIDNEIGNvbnRleHQgKGUu
Zy4gYWZ0ZXIgYSBsb3N0CisgICAgLy8gY29udGV4dCBldmVudCkuCisgICAgdmlydHVhbCB2b2lk
IGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKKworICAgIC8vIFNj
aGVkdWxlcyBhIGNvbXBvc2l0aW5nIHBhc3MsIG1lYW5pbmcgdGhlIGNsaWVudCBzaG91bGQgY2Fs
bAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSBhdCBhIGxhdGVyIHRpbWUuIFRo
aXMgaXMgb25seSBjYWxsZWQgaWYgdGhlCisgICAgLy8gY29tcG9zaXRvciB0aHJlYWQgaXMgZGlz
YWJsZWQ7IHdoZW4gZW5hYmxlZCwgdGhlIGNvbXBvc2l0b3Igd2lsbAorICAgIC8vIGludGVybmFs
bHkgc2NoZWR1bGUgYSBjb21wb3NpdGluZyBwYXNzIHdoZW4gbmVlZGVkLgorICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
fldlYkxheWVyVHJlZVZpZXdDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZThkOTk4YWU5
OGM0YzFjZGVkNTZiN2E0ODc4YzhmMzQ0ZTI4YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVyLmNwcApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllci5o
IgorCisjaW5jbHVkZSAiV2ViQ29udGVudExheWVySW1wbC5oIgorI2luY2x1ZGUgIldlYkZsb2F0
UmVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29udGVudExheWVyIFdlYkNvbnRl
bnRMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNs
aWVudCogY29udGVudENsaWVudCkKK3sKKyAgICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNv
bnRlbnRMYXllckltcGw6OmNyZWF0ZShjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKK30KKwordm9p
ZCBXZWJDb250ZW50TGF5ZXI6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sK
KyAgICB1bndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+c2V0RHJhd3NDb250ZW50KGRyYXdz
Q29udGVudCk7Cit9CisKK2Jvb2wgV2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kcmF3
c0NvbnRlbnQoKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGVSZWN0KGNv
bnN0IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5
ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsKK30KKwordm9pZCBXZWJDb250
ZW50TGF5ZXI6OmludmFsaWRhdGUoKQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBs
PigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXll
cjo6aW52YWxpZFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBXZWJGbG9hdFJlY3QoY29uc3RV
bndyYXA8V2ViQ29udGVudExheWVySW1wbD4oKS0+ZGlydHlSZWN0KCkpOworfQorCitXZWJDb250
ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXll
ckltcGw+JiBub2RlKQorICAgIDogV2ViTGF5ZXIobm9kZSkKK3sKK30KKworV2ViQ29udGVudExh
eWVyJiBXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRl
bnRMYXllckltcGw+JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9IG5vZGU7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCitXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29u
dGVudExheWVySW1wbD4oKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb250
ZW50TGF5ZXJJbXBsKj4obV9wcml2YXRlLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY2NDFlNmNhMDcyOTRiOTc5NTQ3N2Q0ZTIwMjJlODk5ZWFiMWMy
N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllckltcGwuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYkNvbnRl
bnRMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkxheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViUmVjdC5oIgorI2lmIFdFQktJVF9VU0lOR19TS0lBCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiBXZWJDb250ZW50
TGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVy
Q2xpZW50KiBjb250ZW50Q2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29u
dGVudExheWVySW1wbChjbGllbnQsIGNvbnRlbnRDbGllbnQpKTsKK30KKworV2ViQ29udGVudExh
eWVySW1wbDo6V2ViQ29udGVudExheWVySW1wbChXZWJMYXllckNsaWVudCogY2xpZW50LCBXZWJD
b250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpCisgICAgOiBDb250ZW50TGF5ZXJDaHJv
bWl1bSh0aGlzKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9jb250ZW50Q2xpZW50
KGNvbnRlbnRDbGllbnQpCisgICAgLCBtX2RyYXdzQ29udGVudCh0cnVlKQoreworfQorCitXZWJD
b250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVudExheWVySW1wbCgpCit7Cit9CisKK3ZvaWQgV2Vi
Q29udGVudExheWVySW1wbDo6c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQorewor
ICAgIG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50OworfQorCitib29sIFdlYkNvbnRlbnRM
YXllckltcGw6OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHJhd3NDb250
ZW50OworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBpZiAoIW1fY29udGVu
dENsaWVudCkKKyAgICAgICAgcmV0dXJuOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgV2Vi
Q2FudmFzKiBjYW52YXMgPSBnYy5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisjZWxpZiBX
RUJLSVRfVVNJTkdfQ0cKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4
dCgpOworI2VuZGlmCisgICAgbV9jb250ZW50Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywg
V2ViUmVjdChjbGlwKSk7Cit9CisKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6bm90aWZ5U3lu
Y1JlcXVpcmVkKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlOZWVkc0NvbXBvc2l0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMDhkZjVlM2EyNTRlZDk1Njk0NTk4NmZkNjU0MWE4NGE5ODg2NWZmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllckltcGxfaAorI2Rl
ZmluZSBXZWJDb250ZW50TGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJMYXllckNsaWVudDsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckNsaWVudDsKKwor
Y2xhc3MgV2ViQ29udGVudExheWVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4gY3JlYXRlKFdlYkxheWVyQ2xp
ZW50KiwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KTsKKworICAgIHZvaWQg
c2V0RHJhd3NDb250ZW50KGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIFdlYkNvbnRlbnRMYXllckltcGwoV2ViTGF5ZXJDbGll
bnQqLCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQpOworICAgIHZpcnR1YWwg
fldlYkNvbnRlbnRMYXllckltcGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCk7CisKKyAgICBXZWJMYXllckNs
aWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29udGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGll
bnQ7CisgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViQ29udGVudExheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q2NjJjODFkNmQzMzI3NWI0N2QzNTY0MGM4
YWRmN2ZkYzU4ZmJkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyLmNwcApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJMYXllci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgIldlYkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJXZWJMYXllckltcGwu
aCIKKyNpbmNsdWRlICJXZWJTaXplLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1hdGlvbk1hdHJpeEZy
b21Ta01hdHJpeDQ0KGNvbnN0IFNrTWF0cml4NDQmIG1hdHJpeCkKK3sKKyAgICBkb3VibGUgZGF0
YVsxNl07CisgICAgbWF0cml4LmFzQ29sTWFqb3JkKGRhdGEpOworICAgIHJldHVybiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdLCBkYXRhWzVdLCBkYXRhWzZdLCBkYXRh
WzddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzhdLCBkYXRhWzldLCBk
YXRhWzEwXSwgZGF0YVsxMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFb
MTJdLCBkYXRhWzEzXSwgZGF0YVsxNF0sIGRhdGFbMTVdKTsKK30KKworU2tNYXRyaXg0NCBza01h
dHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgpCit7CisgICAgU2tNYXRyaXg0NCBza01hdHJpeDsKKyAgICBza01hdHJpeC5zZXQo
MCwgMCwgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm0xMSgpKSk7CisgICAgc2tNYXRyaXguc2V0
KDEsIDAsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tMTIoKSkpOworICAgIHNrTWF0cml4LnNl
dCgyLCAwLCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTEzKCkpKTsKKyAgICBza01hdHJpeC5z
ZXQoMywgMCwgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm0xNCgpKSk7CisgICAgc2tNYXRyaXgu
c2V0KDAsIDEsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tMjEoKSkpOworICAgIHNrTWF0cml4
LnNldCgxLCAxLCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTIyKCkpKTsKKyAgICBza01hdHJp
eC5zZXQoMiwgMSwgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm0yMygpKSk7CisgICAgc2tNYXRy
aXguc2V0KDMsIDEsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tMjQoKSkpOworICAgIHNrTWF0
cml4LnNldCgwLCAyLCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTMxKCkpKTsKKyAgICBza01h
dHJpeC5zZXQoMSwgMiwgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm0zMigpKSk7CisgICAgc2tN
YXRyaXguc2V0KDIsIDIsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tMzMoKSkpOworICAgIHNr
TWF0cml4LnNldCgzLCAyLCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTM0KCkpKTsKKyAgICBz
a01hdHJpeC5zZXQoMCwgMywgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm00MSgpKSk7CisgICAg
c2tNYXRyaXguc2V0KDEsIDMsIFNrRG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tNDIoKSkpOworICAg
IHNrTWF0cml4LnNldCgyLCAzLCBTa0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTQzKCkpKTsKKyAg
ICBza01hdHJpeC5zZXQoMywgMywgU2tEb3VibGVUb01TY2FsYXIobWF0cml4Lm00NCgpKSk7Cisg
ICAgcmV0dXJuIHNrTWF0cml4OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYkxheWVyIFdlYkxheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGll
bnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGUo
Y2xpZW50KSk7Cit9CisKK1dlYkxheWVyOjp+V2ViTGF5ZXIoKQoreworICAgIHJlc2V0KCk7Cit9
CisKK3ZvaWQgV2ViTGF5ZXI6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30K
Kwordm9pZCBXZWJMYXllcjo6YXNzaWduKGNvbnN0IFdlYkxheWVyJiBvdGhlcikKK3sKKyAgICBt
X3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9CisKK2Jvb2wgV2ViTGF5ZXI6OmVxdWFscyhj
b25zdCBXZWJMYXllciYgbikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9
PSBuLm1fcHJpdmF0ZS5nZXQoKSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpyb290TGF5ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcihjb25zdF9jYXN0PExheWVyQ2hyb21pdW0q
PihtX3ByaXZhdGUtPnJvb3RMYXllcigpKSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpwYXJl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllcihjb25zdF9jYXN0PExheWVyQ2hyb21p
dW0qPihtX3ByaXZhdGUtPnBhcmVudCgpKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OmFkZENoaWxk
KGNvbnN0IFdlYkxheWVyJiBjaGlsZCkKK3sKKyAgICBtX3ByaXZhdGUtPmFkZENoaWxkKGNoaWxk
KTsKK30KKwordm9pZCBXZWJMYXllcjo6aW5zZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxk
LCBzaXplX3QgaW5kZXgpCit7CisgICAgbV9wcml2YXRlLT5pbnNlcnRDaGlsZChjaGlsZCwgaW5k
ZXgpOworfQorCit2b2lkIFdlYkxheWVyOjpyZXBsYWNlQ2hpbGQoY29uc3QgV2ViTGF5ZXImIHJl
ZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXImIG5ld0xheWVyKQoreworICAgIFdlYkxheWVyIHJlZiA9
IHJlZmVyZW5jZTsKKyAgICBtX3ByaXZhdGUtPnJlcGxhY2VDaGlsZChyZWYudW53cmFwPExheWVy
Q2hyb21pdW0+KCksIG5ld0xheWVyKTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVtb3ZlRnJvbVBh
cmVudCgpCit7CisgICAgbV9wcml2YXRlLT5yZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQg
V2ViTGF5ZXI6OnJlbW92ZUFsbENoaWxkcmVuKCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUFs
bENoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IFdl
YkZsb2F0UG9pbnQmIGFuY2hvclBvaW50KQoreworICAgIG1fcHJpdmF0ZS0+c2V0QW5jaG9yUG9p
bnQoYW5jaG9yUG9pbnQpOworfQorCitXZWJGbG9hdFBvaW50IFdlYkxheWVyOjphbmNob3JQb2lu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZsb2F0UG9pbnQobV9wcml2YXRlLT5hbmNob3JQ
b2ludCgpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hv
clBvaW50WikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEFuY2hvclBvaW50WihhbmNob3JQb2ludFop
OworfQorCitmbG9hdCBXZWJMYXllcjo6YW5jaG9yUG9pbnRaKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5hbmNob3JQb2ludFooKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0Qm91
bmRzKGNvbnN0IFdlYlNpemUmIHNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb3VuZHMoc2l6
ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5ZXI6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYlNpemUobV9wcml2YXRlLT5ib3VuZHMoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE1h
c2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91bmRzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TWFz
a3NUb0JvdW5kcyhtYXNrc1RvQm91bmRzKTsKK30KKworYm9vbCBXZWJMYXllcjo6bWFza3NUb0Jv
dW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFza3NUb0JvdW5kcygpOwor
fQorCit2b2lkIFdlYkxheWVyOjpzZXRNYXNrTGF5ZXIoY29uc3QgV2ViTGF5ZXImIG1hc2tMYXll
cikKK3sKKyAgICBXZWJMYXllciByZWYgPSBtYXNrTGF5ZXI7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+c2V0TWFza0xheWVyKHJlZi51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSk7Cit9CisKK1dlYkxh
eWVyIFdlYkxheWVyOjptYXNrTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBXZWJMYXllciht
X3ByaXZhdGUtPm1hc2tMYXllcigpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0T3BhY2l0eShm
bG9hdCBvcGFjaXR5KQoreworICAgIG1fcHJpdmF0ZS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKK30K
KworZmxvYXQgV2ViTGF5ZXI6Om9wYWNpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPm9wYWNpdHkoKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0T3BhcXVlKGJvb2wgb3BhcXVl
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0T3BhcXVlKG9wYXF1ZSk7Cit9CisKK2Jvb2wgV2ViTGF5
ZXI6Om9wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+b3BhcXVlKCk7Cit9
CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IFdlYkZsb2F0UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIG1fcHJpdmF0ZS0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworfQorCitXZWJG
bG9hdFBvaW50IFdlYkxheWVyOjpwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZs
b2F0UG9pbnQobV9wcml2YXRlLT5wb3NpdGlvbigpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0
U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgU2tNYXRyaXg0NCYgbWF0cml4KQoreworICAgIG1fcHJp
dmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0odHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRy
aXg0NChtYXRyaXgpKTsKK30KKworU2tNYXRyaXg0NCBXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zv
cm0oKSBjb25zdAoreworICAgIHJldHVybiBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0
cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6
OnNldFRyYW5zZm9ybShjb25zdCBTa01hdHJpeDQ0JiBtYXRyaXgpCit7CisgICAgbV9wcml2YXRl
LT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRyaXg0NChtYXRyaXgp
KTsKK30KKworU2tNYXRyaXg0NCBXZWJMYXllcjo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnRyYW5z
Zm9ybSgpKTsKK30KKworV2ViTGF5ZXI6OldlYkxheWVyKGNvbnN0IFBhc3NSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4mIG5vZGUpCisgICAgOiBtX3ByaXZhdGUobm9kZSkKK3sKK30KKworV2ViTGF5ZXIm
IFdlYkxheWVyOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9k
ZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBub2RlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2Vi
TGF5ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4oKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk4
MTMyMWVkMjBlZGQ4ODJhYzA3MjEwNmYyM2MzYTUzZTVlMjhiMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllckltcGwu
aCIKKworI2luY2x1ZGUgIldlYkxheWVyQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJMYXllckltcGw+IFdl
YkxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJMYXllckltcGwoY2xpZW50KSk7Cit9CisKK1dlYkxheWVySW1wbDo6
V2ViTGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiBjbGllbnQpIDogTGF5ZXJDaHJvbWl1bSh0aGlz
KSwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitXZWJMYXllckltcGw6On5XZWJMYXllckltcGwo
KQoreworfQorCitib29sIFdlYkxheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApCit7Cit9CisKK3ZvaWQgV2ViTGF5
ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NThkNDFiNWNkZTFhODQ4NzAyY2FkMGYzNzUxMmM4OTExNTUxMTE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJJbXBsX2gKKyNkZWZpbmUgV2ViTGF5
ZXJJbXBsX2gKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyQ2xpZW50Owor
CitjbGFzcyBXZWJMYXllckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwgcHVi
bGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqKTsKKworcHJvdGVjdGVk
OgorICAgIFdlYkxheWVySW1wbChXZWJMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYkxh
eWVySW1wbCgpOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKCk7CisKKyAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZGIx
YWUwYjg5OTIwNmI0YmJkNjM3MjgzM2FlNWI2MGI2MDBjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMCwwICsx
LDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRy
ZWVWaWV3LmgiCisKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3SW1wbC5oIgorI2luY2x1ZGUg
IldlYlNpemUuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViTGF5ZXJUcmVlVmlldzo6
U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAoreworICAgIENDU2V0dGluZ3Mg
c2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxlcmF0ZVBh
aW50aW5nOworICAgIHNldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0ZU9mZnNj
cmVlbjsKKworICAgIC8vIEZJWE1FOiBjb21wb3NpdG9yIHRocmVhZCBpc24ndCBzdXBwb3J0ZWQg
Y3VycmVudGx5LgorICAgIHNldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBmYWxzZTsK
KworICAgIC8vIEZJWE1FOiBzaG93RlBTQ291bnRlciAvIHNob3dQbGF0Zm9ybUxheWVyVHJlZSBh
cmVuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KKyAgICBzZXR0aW5ncy5zaG93RlBTQ291bnRlciA9
IGZhbHNlOworICAgIHNldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IGZhbHNlOworICAg
IHJldHVybiBzZXR0aW5nczsKK30KKworV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVWaWV3
OjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYg
cm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQoreworICAg
IHJldHVybiBXZWJMYXllclRyZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUoY2xp
ZW50LCByb290LCBzZXR0aW5ncykpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJlc2V0
KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3
Ojphc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgb3RoZXIpCit7CisgICAgbV9wcml2YXRl
ID0gb3RoZXIubV9wcml2YXRlOworfQorCitib29sIFdlYkxheWVyVHJlZVZpZXc6OmVxdWFscyhj
b25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBjb25zdAoreworICAgIHJldHVybiAobV9wcml2YXRl
LmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3
Ojpjb21wb3NpdGUoKQoreworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9w
cml2YXRlLT5jb21wb3NpdGUoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6
OnNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpCit7CisgICAgbV9w
cml2YXRlLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUpOworfQorCitXZWJTaXplIFdlYkxheWVy
VHJlZVZpZXc6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9w
cml2YXRlLT52aWV3cG9ydFNpemUoKSk7Cit9CisKK1dlYkxheWVyVHJlZVZpZXc6OldlYkxheWVy
VHJlZVZpZXcoY29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQorICAgIDog
bV9wcml2YXRlKG5vZGUpCit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXcmIFdlYkxheWVyVHJlZVZp
ZXc6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCit7
CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkxheWVy
VHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDE0YjliMGYzNjBhMTNjYWRmNGFmZjc2ZDBhN2ZhYzZmY2E4M2Qy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3SW1wbC5oIgorCisjaW5jbHVkZSAiQ0NU
aHJlYWRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3LmgiCisj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIK
KyNpbmNsdWRlICJXZWJUaHJlYWQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBXZWJM
YXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwg
Y29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBz
ZXR0aW5ncykKK3sKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+IGhvc3QgPSBhZG9w
dFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0ltcGwoY2xpZW50LCByb290LCBzZXR0aW5ncykpOwor
ICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gaG9zdDsKK30KKworV2ViTGF5ZXJUcmVlVmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBs
KFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNv
bnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykgCisgICAgOiBDQ0xheWVy
VHJlZUhvc3QodGhpcywgcm9vdCwgc2V0dGluZ3MpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7
Cit9CisKK1dlYkxheWVyVHJlZVZpZXdJbXBsOjp+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKQorewor
fQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5h
bmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVW
aWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbERlbHRh
KFdlYlNpemUoZGVsdGEpKTsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2Vi
TGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQoreworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIE93blB0cjxXZWJHcmFwaGlj
c0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFkb3B0UHRyKG1fY2xpZW50LT5jcmVhdGVDb250ZXh0
M0QoKSk7CisgICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSB3ZWJDb250ZXh0
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMuYWxw
aGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CisgICAgYXR0
cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOworICAgIGF0dHJpYnV0ZXMu
YW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CisgICAgYXR0cmlidXRlcy5wcmVt
dWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICBh
dHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSB3ZWJBdHRyaWJ1dGVzLmNhblJl
Y292ZXJGcm9tQ29udGV4dExvc3M7CisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB3ZWJB
dHRyaWJ1dGVzLm5vRXh0ZW5zaW9uczsKKyAgICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0g
d2ViQXR0cmlidXRlcy5zaGFyZVJlc291cmNlczsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZlRHJh
d2luZ0J1ZmZlciA9IGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxl
IHN0eWxlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93Owor
ICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6VGhyZWFkVXNhZ2UgdXNhZ2UgPSBzZXR0aW5n
cygpLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZv
clVzZU9uQW5vdGhlclRocmVhZCA6IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25U
aGlzVGhyZWFkOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRyaWJ1
dGVzLCAwLCBzdHlsZSwgdXNhZ2UpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpk
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3Mp
OworfQorCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworfQorI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVmMmE5ZThiNDMzZmEwYzY2OWM1NDY1ZDBhZTNk
MDEyZDI0NGIzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViTGF5ZXJUcmVlVmlld0ltcGxfaAorI2RlZmluZSBXZWJMYXllclRyZWVWaWV3SW1wbF9oCisK
KyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQ7CisKK2NsYXNz
IFdlYkxheWVyVHJlZVZpZXdJbXBsIDogcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdCwg
cHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+IGNyZWF0ZShXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6
OlNldHRpbmdzJik7CisKK3ByaXZhdGU6CisgICAgV2ViTGF5ZXJUcmVlVmlld0ltcGwoV2ViTGF5
ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRy
ZWVWaWV3OjpTZXR0aW5ncyYpOworICAgIHZpcnR1YWwgfldlYkxheWVyVHJlZVZpZXdJbXBsKCk7
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
PiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9D
T01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRp
ZgorCisgICAgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxheWVyVHJlZVZpZXdJbXBsX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110089</attachid>
            <date>2011-10-06 21:23:20 -0700</date>
            <delta_ts>2011-10-07 11:43:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111006212319.patch</filename>
            <type>text/plain</type>
            <size>61242</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZTRlMGExNzk0ZTI2MzVk
N2Q3ZWMyN2UzMDUzOTJhMTEwMzU1NGYwLi4yYWFmZDhiZjFiN2EzZDgzMTg4NGIwOTkwMGZhZjQ4
ZmM4OGQ4OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTA2ICBBbm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
ZGRpbmcgcGFyZW5zIGluIFdlYlZUVFBhcnNlci5jcHAgdG8gYXBwZWFzZSBjb21waWxlciBwcmVm
ZXJlbmNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGEyMWJjNjgwOGY4
OGNmNDk3YTliN2JhMzY2ZTE3MWU5M2Y4OTZlNmQuLmI4MzRlNjc2YmQ2MzQ0NWFhNDUzYjM2NWVl
ZTI4MDI0MGYzODA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTEs
OSArNTEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVy
Q2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJU
cmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYjg2ZGEyZGRiMTE2ZjQy
Y2Y5MmU3YzIwYmQ0ZDNjNGFkYzg3NGM0Li43NTAzZWQwMDkzYTg1OWRjMGVmOTcwZDU2MTQ4NTZi
OGJkNTNlMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAor
MjAxMS0xMC0wNSAgQW50b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgV2Via2l0IEFQSSBmb3IgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkNv
bnRlbnRMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpX
ZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6On5XZWJD
b250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9y
PSk6CisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyQ2xpZW50Ojp+V2ViQ29udGVudExheWVyQ2xp
ZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6dG9Db25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjp1bndyYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y29uc3RVbndyYXApOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYkxheWVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllckNsaWVudDo6fldlYkxheWVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXJU
cmVlVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6V2Vi
TGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6On5XZWJM
YXllclRyZWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Q2xpZW50Ojp+V2ViTGF5ZXJU
cmVlVmlld0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllcjo6ZGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpX
ZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPik6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVu
dExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6On5XZWJD
b250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6cGFp
bnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6Om5vdGlm
eVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6fldlYkxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjplcXVhbHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEJvdW5kcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNr
c1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE1hc2tMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFjaXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0UG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9zaXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0
b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkxheWVySW1w
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6
OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6Om5vdGlmeVN5
bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmll
dzo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6ZXF1YWxzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0Pik6CisgICAgICAgICog
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNj
aGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDog
QWRkZWQuCisKIDIwMTEtMTAtMDYgIEFubmEgQ2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFR1cm4gRU5BQkxFX1ZJREVPX1RSQUNLIG9uIGZvciBjaHJvbWl1bS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBkY2NlMWE3NDBjY2E0N2ZkN2VkZWZkZDhhMTFm
NDcwMDdmNmZhODVjLi43MmU5NTMzYTAxNjMwYzdlMDFjYTc0ZWFiNjc4MGE1MWE5YjA3ZTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04NSw2ICs4NSw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYycsCiAgICAgICAgICAgICAgICAgJ3NyYycsCiAgICAgICAgICAgICAgICAg
JzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCisgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0
aWxzJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKICAgICAgICAg
ICAgICAgICAnV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnLApAQCAtMTMwLDYgKzEzMSw4IEBACiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yQ2xpZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvci5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkNvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGVu
dExheWVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29va2llLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29va2llSmFyLmgnLApAQCAtMjE2LDYgKzIxOSwxMCBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViS2l0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0UGxhdGZv
cm1TdXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGFiZWxFbGVtZW50Lmgn
LAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXIuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJMYXllckNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxh
eWVyVHJlZVZpZXcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXllclRyZWVWaWV3
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTG9jYWxpemVkU3RyaW5nLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFFbGVtZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCkBAIC00NDksNiArNDU2LDkgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ29tcG9zaXRvckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0
b3JJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQ29udGVudExheWVyLmNwcCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ3Vyc29ySW5m
by5jcHAnLApAQCAtNTMzLDYgKzU0MywxMiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViSW5w
dXRFdmVudENvbnZlcnNpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJLaXQuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkxhYmVsRWxlbWVudC5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVySW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFFbGVtZW50LmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmQ3ZjEwMTQxMjI4YTFmMDM4YzE3NWFkYmIwYzFmNzY2Yjg2ZTVmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllcl9oCisjZGVmaW5l
IFdlYkNvbnRlbnRMYXllcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJX
ZWJMYXllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckNs
aWVudDsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckltcGw7CitjbGFzcyBXZWJGbG9hdFJlY3Q7Citj
bGFzcyBXZWJMYXllckNsaWVudDsKKworY2xhc3MgV2ViQ29udGVudExheWVyIDogcHVibGljIFdl
YkxheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViQ29udGVudExheWVyIGNyZWF0ZShXZWJM
YXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNsaWVudCopOworCisgICAgV2ViQ29udGVudExh
eWVyKCkgeyB9CisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdlYkNvbnRlbnRMYXllciYgbGF5
ZXIpIDogV2ViTGF5ZXIobGF5ZXIpIHsgfQorICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllcigp
IHsgfQorICAgIFdlYkNvbnRlbnRMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvbnRlbnRMYXll
ciYgbGF5ZXIpCisgICAgeworICAgICAgICBXZWJMYXllcjo6YXNzaWduKGxheWVyKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8vIFNldHMgd2hldGhlciB0aGUgbGF5ZXIg
ZHJhd3MgaXRzIGNvbnRlbnQgd2hlbiBjb21wb3NpdGluZy4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBkcmF3c0Nv
bnRlbnQoKSBjb25zdDsKKworICAgIC8vIFNldHMgYSByZWdpb24gb2YgdGhlIGxheWVyIGFzIGlu
dmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0cyBjb250ZW50LgorICAgIC8vIFRoZSB2aXNp
YmxlIGFyZWEgb2YgdGhlIGRpcnR5IHJlY3Qgd2lsbCBiZSBwYXNzZWQgdG8gb25lIG9yIG1vcmUg
Y2FsbHMgdG8KKyAgICAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMgYmVm
b3JlIHRoZSBjb21wb3NpdGluZyBwYXNzIG9jY3Vycy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViRmxvYXRSZWN0Jik7CisKKyAgICAvLyBTZXRzIHRoZSBl
bnRpcmUgbGF5ZXIgYXMgaW52YWxpZCwgaS5lLiBuZWVkcyB0byB1cGRhdGUgaXRzIGNvbnRlbnQu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIC8vIFJldHVybnMg
dGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgaW52YWxpZC4KKyAgICBX
RUJLSVRfRVhQT1JUIFdlYkZsb2F0UmVjdCBpbnZhbGlkUmVjdCgpIGNvbnN0OworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViQ29udGVudExheWVyKGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYpOworICAgIFdlYkNvbnRlbnRMYXllciYgb3BlcmF0
b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPiYpOworICAgIG9w
ZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPigpIGNvbnN0OworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkNvbnRlbnRM
YXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRl
bnRMYXllckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNGJlMGNhNzdmYzZlMzlmNzg4NDg3NmIxYmNj
NmM0M2U4YzZiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJDb250ZW50TGF5ZXJDbGllbnRfaAorI2RlZmluZSBXZWJDb250ZW50TGF5ZXJDbGll
bnRfaAorCisjaW5jbHVkZSAiV2ViQ2FudmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViUmVjdDsKKworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICAvLyBQYWludHMgdGhlIGNvbnRlbnQgYXJlYSBmb3IgdGhlIGxheWVyLCB0eXBpY2FsbHkgZGly
dHkgcmVjdHMgc3VibWl0dGVkCisgICAgLy8gdGhyb3VnaCBXZWJDb250ZW50TGF5ZXI6OnNldE5l
ZWRzRGlzcGxheSwgc3VibWl0dGluZyBkcmF3aW5nIGNvbW1hbmRzCisgICAgLy8gdGhyb3VnaCB0
aGUgV2ViQ2FudmFzLgorICAgIC8vIFRoZSBjYW52YXMgaXMgYWxyZWFkeSBjbGlwcGVkIHRvIHRo
ZSB8Y2xpcHwgcmVjdC4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDYW52YXMq
LCBjb25zdCBXZWJSZWN0JiBjbGlwKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5X
ZWJDb250ZW50TGF5ZXJDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViQ29udGVudExheWVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzMWUwNTdjYzQ2YzMyOWExMTFiNjAwYmRi
NTI0OGFlN2U4YzE2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJMYXllci5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJM
YXllcl9oCisjZGVmaW5lIFdlYkxheWVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworY2xhc3MgU2tNYXRyaXg0NDsKK25hbWVzcGFjZSBX
ZWJDb3JlIHsgY2xhc3MgTGF5ZXJDaHJvbWl1bTsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYkZsb2F0UG9pbnQ7CitjbGFzcyBXZWJMYXllckNsaWVudDsKK2NsYXNzIFdlYlNpemU7
CisKK2NsYXNzIFdlYkxheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViTGF5ZXIgY3JlYXRl
KFdlYkxheWVyQ2xpZW50Kik7CisKKyAgICBXZWJMYXllcigpIHsgfQorICAgIFdlYkxheWVyKGNv
bnN0IFdlYkxheWVyJiBsYXllcikgeyBhc3NpZ24obGF5ZXIpOyB9CisgICAgdmlydHVhbCB+V2Vi
TGF5ZXIoKTsKKyAgICBXZWJMYXllciYgb3BlcmF0b3I9KGNvbnN0IFdlYkxheWVyJiBsYXllcikK
KyAgICB7CisgICAgICAgIGFzc2lnbihsYXllcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFzc2lnbihjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVh
bHMoY29uc3QgV2ViTGF5ZXImKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIg
cm9vdExheWVyKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJMYXllciBwYXJlbnQoKSBj
b25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImKTsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5zZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImLCBzaXpl
X3QgaW5kZXgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXBsYWNlQ2hpbGQoY29uc3QgV2Vi
TGF5ZXImIHJlZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXImIG5ld0xheWVyKTsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBy
ZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFuY2hvclBv
aW50KGNvbnN0IFdlYkZsb2F0UG9pbnQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkZsb2F0UG9p
bnQgYW5jaG9yUG9pbnQoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbmNo
b3JQb2ludFooZmxvYXQpOworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgYW5jaG9yUG9pbnRaKCkg
Y29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Qm91bmRzKGNvbnN0IFdlYlNpemUm
KTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlNpemUgYm91bmRzKCkgY29uc3Q7CisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgbWFza3NUb0JvdW5kcygpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dE1hc2tMYXllcihjb25zdCBXZWJMYXllciYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIg
bWFza0xheWVyKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0T3BhY2l0eShm
bG9hdCk7CisgICAgV0VCS0lUX0VYUE9SVCBmbG9hdCBvcGFjaXR5KCkgY29uc3Q7CisKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0T3BhcXVlKGJvb2wpOworICAgIFdFQktJVF9FWFBPUlQgYm9v
bCBvcGFxdWUoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBXZWJGbG9hdFBvaW50Jik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9hdFBvaW50IHBv
c2l0aW9uKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3VibGF5ZXJUcmFu
c2Zvcm0oY29uc3QgU2tNYXRyaXg0NCYpOworICAgIFdFQktJVF9FWFBPUlQgU2tNYXRyaXg0NCBz
dWJsYXllclRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBTa01hdHJpeDQ0Jik7CisgICAgV0VCS0lUX0VYUE9SVCBTa01hdHJpeDQ0
IHRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCB0bygpCisg
ICAgeworICAgICAgICBUIHJlczsKKyAgICAgICAgcmVzLldlYkxheWVyOjphc3NpZ24oKnRoaXMp
OworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0IFQgdG9Db25zdCgpIGNvbnN0CisgICAgeworICAgICAgICBUIHJlczsKKyAgICAgICAg
cmVzLldlYkxheWVyOjphc3NpZ24oKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0K
KworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkxheWVyKGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiYpOworICAgIFdlYkxheWVyJiBvcGVyYXRv
cj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+Jik7CisgICAg
b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVyQ2hyb21pdW0+KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogdW53cmFwKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUKj4obV9wcml2YXRlLmdldCgpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUKiBjb25zdFVud3JhcCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
fQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkxheWVy
Q2hyb21pdW0+IG1fcHJpdmF0ZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
V2ViTGF5ZXImIGEsIGNvbnN0IFdlYkxheWVyJiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhi
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJMYXllciYgYSwgY29uc3Qg
V2ViTGF5ZXImIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViTGF5ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjE0OGJhMmVlMTM3ODQy
YjExMmRjMzI5MmM5ODA0OWU1NWNlOTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJDbGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJMYXllckNsaWVudF9oCisjZGVmaW5lIFdlYkxheWVyQ2xpZW50X2gKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICAvLyBOb3RpZmllcyB0aGUgY2xpZW50IHRoYXQgdGhlIGxheWVyIGhhcyBjaGFuZ2VkIGluIGEg
d2F5IHRoYXQgbmVlZHMgYQorICAgIC8vIGNvbXBvc2l0aW5nIHBhc3MgdG8gdmlzdWFsbHkgdXBk
YXRlLiBUaGUgY2xpZW50IHNob3VsZCBldmVudHVhbGx5IGNhbGwKKyAgICAvLyBXZWJMYXllclRy
ZWVWaWV3Ojpjb21wb3NpdGUuCisgICAgLy8gTm90ZTogc29tZSBjb21wbGV4IG9wZXJhdGlvbnMg
KGUuZyBsYXllciByZXBhcmVudGluZykgY2FuIGNhdXNlIHRoaXMgdG8KKyAgICAvLyBiZSBjYWxs
ZWQgd2hpbGUgdGhlIGxheWVyIHRyZWUgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB0
byBnZXQKKyAgICAvLyBjb3JyZWN0IHJlc3VsdHMsIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0
ZSBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZQorICAgIC8vIG9wZXJhdGlvbiBoYXMgZmluaXNo
ZWQgKGUuZy4gYnkgcG9zdGluZyBhIHRhc2spLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVk
c0NvbXBvc2l0ZSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkxheWVyQ2xp
ZW50KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkxh
eWVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkxheWVyVHJlZVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVy
VHJlZVZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Yjg2MjEzZTNiYmZiMTZmZmU1ZTQ4ZGJlODA3ZDNmYzg5
NWZiNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTGF5ZXJUcmVlVmlldy5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJM
YXllclRyZWVWaWV3X2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlVmlld19oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK3N0cnVjdCBDQ1NldHRpbmdzOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyOworY2xhc3MgV2ViTGF5ZXJUcmVlVmll
d0NsaWVudDsKK3N0cnVjdCBXZWJTaXplOworCitjbGFzcyBXZWJMYXllclRyZWVWaWV3IHsKK3B1
YmxpYzoKKyAgICBzdHJ1Y3QgU2V0dGluZ3MgeworICAgICAgICBTZXR0aW5ncygpCisgICAgICAg
ICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKKyAgICAgICAgICAgICwgY29tcG9zaXRl
T2Zmc2NyZWVuKGZhbHNlKQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZh
bHNlKSB7IH0KKworICAgICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKKyAgICAgICAgYm9v
bCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVh
ZDsKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6
Q0NTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCisgICAgfTsKKworICAgIHN0YXRpYyBXZWJMYXll
clRyZWVWaWV3IGNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXIm
IHJvb3QsIGNvbnN0IFNldHRpbmdzJik7CisKKyAgICBXZWJMYXllclRyZWVWaWV3KCkgeyB9Cisg
ICAgV2ViTGF5ZXJUcmVlVmlldyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBsYXllcikgeyBhc3Np
Z24obGF5ZXIpOyB9CisgICAgfldlYkxheWVyVHJlZVZpZXcoKSB7IHJlc2V0KCk7IH0KKyAgICBX
ZWJMYXllclRyZWVWaWV3JiBvcGVyYXRvcj0oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbGF5ZXIp
CisgICAgeworICAgICAgICBhc3NpZ24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpOworICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpIGNvbnN0OworCisgICAgLy8gVHJp
Z2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0aGUgY29tcG9zaXRvciB0aHJlYWQgaXMgZGlz
YWJsZWQKKyAgICAvLyAoZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9PSBmYWxzZSksIHRoZSBjb21w
b3NpdGluZyBwYXNzIGhhcHBlbnMKKyAgICAvLyBpbW1lZGlhdGVseS4gSWYgaXQgaXMgZW5hYmxl
ZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBoYXBwZW4gYXQgYQorICAgIC8vIGxhdGVyIHRp
bWUuIEJlZm9yZSB0aGUgY29tcG9zaXRpbmcgcGFzcyBoYXBwZW5zIChpLmUuIGJlZm9yZSBjb21w
b3NpdGUoKQorICAgIC8vIHJldHVybnMgd2hlbiB0aGUgY29tcG9zaXRvciB0aHJlYWQgaXMgZGlz
YWJsZWQpLCBXZWJDb250ZW50TGF5ZXJzIHdpbGwgYmUKKyAgICAvLyBhc2tlZCB0byBwYWludCB0
aGVpciBkaXJ0eSByZWdpb24sIHRocm91Z2gKKyAgICAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnQ6
OnBhaW50Q29udGVudHMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGNvbXBvc2l0ZSgpOworCisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJik7Cisg
ICAgV0VCS0lUX0VYUE9SVCBXZWJTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViTGF5ZXJUcmVlVmlldyhjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOworICAgIFdlYkxheWVyVHJlZVZpZXcm
IG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
PiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVQdHI8V2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGEsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXcm
IGIpCit7CisgICAgcmV0dXJuIGEuZXF1YWxzKGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGEsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGIp
Cit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBXZWJMYXllclRyZWVWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWI4
ZjFiNDMyMDUwZjc4MGI0ZWVjMjdjMmZlZTUzMGY3ZWFiMTFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVyVHJlZVZpZXdDbGllbnRfaAor
I2RlZmluZSBXZWJMYXllclRyZWVWaWV3Q2xpZW50X2gKKworbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFdlYlNpemU7CitjbGFzcyBXZWJUaHJl
YWQ7CisKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgeworcHVibGljOgorICAgIC8vIFVw
ZGF0ZXMgYW5pbWF0aW9uIGFuZCBsYXlvdXQuIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY29t
cG9zaXRpbmcgcGFzcworICAgIC8vIHNvIHRoYXQgbGF5ZXJzIGNhbiBiZSB1cGRhdGVkIGF0IHRo
ZSBnaXZlbiBmcmFtZSB0aW1lLgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworCisgICAgLy8gQXBwbGllcyBhIHNjcm9sbCBkZWx0
YSB0byB0aGUgcm9vdCBsYXllci4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzCisgICAgLy8g
c2VudCB0byB0aGUgY29tcG9zaXRvciB0aHJlYWQgdGhyb3VnaCB0aGUgV2ViQ29tcG9zaXRvciBp
bnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViU2l6
ZSYpID0gMDsKKworICAgIC8vIENyZWF0ZXMgYSAzRCBjb250ZXh0IHN1aXRhYmxlIGZvciB0aGUg
Y29tcG9zaXRpbmcuIFRoaXMgbWF5IGJlIGNhbGxlZAorICAgIC8vIG1vcmUgdGhhbiBvbmNlIGlm
IHRoZSBjb250ZXh0IGdldHMgbG9zdC4KKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNE
KiBjcmVhdGVDb250ZXh0M0QoKSA9IDA7CisKKyAgICAvLyBTaWduYWxzIGEgc3VjY2Vzc2Z1bCBy
ZWJpbmRpbmcgb2YgdGhlIDNEIGNvbnRleHQgKGUuZy4gYWZ0ZXIgYSBsb3N0CisgICAgLy8gY29u
dGV4dCBldmVudCkuCisgICAgdmlydHVhbCB2b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChi
b29sIHN1Y2Nlc3MpID0gMDsKKworICAgIC8vIFNjaGVkdWxlcyBhIGNvbXBvc2l0aW5nIHBhc3Ms
IG1lYW5pbmcgdGhlIGNsaWVudCBzaG91bGQgY2FsbAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXc6
OmNvbXBvc2l0ZSBhdCBhIGxhdGVyIHRpbWUuIFRoaXMgaXMgb25seSBjYWxsZWQgaWYgdGhlCisg
ICAgLy8gY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQ7IHdoZW4gZW5hYmxlZCwgdGhlIGNv
bXBvc2l0b3Igd2lsbAorICAgIC8vIGludGVybmFsbHkgc2NoZWR1bGUgYSBjb21wb3NpdGluZyBw
YXNzIHdoZW4gbmVlZGVkLgorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpID0g
MDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYkxheWVyVHJlZVZpZXdDbGllbnQoKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVl
Vmlld0NsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJD
b250ZW50TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExh
eWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZThkOTk4YWU5OGM0YzFjZGVkNTZiN2E0ODc4YzhmMzQ0ZTI4
YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29u
dGVudExheWVyLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllci5oIgorCisjaW5jbHVkZSAiV2ViQ29udGVudExh
eWVySW1wbC5oIgorI2luY2x1ZGUgIldlYkZsb2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViQ29udGVudExheWVyIFdlYkNvbnRlbnRMYXllcjo6Y3JlYXRlKFdlYkxheWVyQ2xp
ZW50KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29udGVudENsaWVudCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29udGVudExheWVyKFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShjbGll
bnQsIGNvbnRlbnRDbGllbnQpKTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXI6OnNldERyYXdz
Q29udGVudChib29sIGRyYXdzQ29udGVudCkKK3sKKyAgICB1bndyYXA8V2ViQ29udGVudExheWVy
SW1wbD4oKS0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVudCk7Cit9CisKK2Jvb2wgV2ViQ29u
dGVudExheWVyOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3Jh
cDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5kcmF3c0NvbnRlbnQoKTsKK30KKwordm9pZCBXZWJD
b250ZW50TGF5ZXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkZsb2F0UmVjdCYgZGlydHlSZWN0
KQoreworICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXko
ZGlydHlSZWN0KTsKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXI6OmludmFsaWRhdGUoKQorewor
ICAgIHVud3JhcDxXZWJDb250ZW50TGF5ZXJJbXBsPigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30K
KworV2ViRmxvYXRSZWN0IFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZFJlY3QoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJGbG9hdFJlY3QoY29uc3RVbndyYXA8V2ViQ29udGVudExheWVySW1wbD4o
KS0+ZGlydHlSZWN0KCkpOworfQorCitXZWJDb250ZW50TGF5ZXI6OldlYkNvbnRlbnRMYXllcihj
b25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQorICAgIDogV2ViTGF5
ZXIobm9kZSkKK3sKK30KKworV2ViQ29udGVudExheWVyJiBXZWJDb250ZW50TGF5ZXI6Om9wZXJh
dG9yPShjb25zdCBQYXNzUmVmUHRyPFdlYkNvbnRlbnRMYXllckltcGw+JiBub2RlKQoreworICAg
IG1fcHJpdmF0ZSA9IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb250ZW50TGF5
ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4oKSBjb25zdAorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb250ZW50TGF5ZXJJbXBsKj4obV9wcml2YXRlLmdl
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NDFlNmNh
MDcyOTRiOTc5NTQ3N2Q0ZTIwMjJlODk5ZWFiMWMyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcApAQCAtMCwwICsx
LDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRM
YXllckltcGwuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIldl
YkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRMYXllckNsaWVudC5oIgorI2luY2x1ZGUg
IldlYkxheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2lmIFdFQktJVF9VU0lO
R19TS0lBCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxX
ZWJDb250ZW50TGF5ZXJJbXBsPiBXZWJDb250ZW50TGF5ZXJJbXBsOjpjcmVhdGUoV2ViTGF5ZXJD
bGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGVudExheWVySW1wbChjbGllbnQsIGNvbnRl
bnRDbGllbnQpKTsKK30KKworV2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVudExheWVySW1w
bChXZWJMYXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRD
bGllbnQpCisgICAgOiBDb250ZW50TGF5ZXJDaHJvbWl1bSh0aGlzKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQorICAgICwgbV9jb250ZW50Q2xpZW50KGNvbnRlbnRDbGllbnQpCisgICAgLCBtX2Ry
YXdzQ29udGVudCh0cnVlKQoreworfQorCitXZWJDb250ZW50TGF5ZXJJbXBsOjp+V2ViQ29udGVu
dExheWVySW1wbCgpCit7Cit9CisKK3ZvaWQgV2ViQ29udGVudExheWVySW1wbDo6c2V0RHJhd3ND
b250ZW50KGJvb2wgZHJhd3NDb250ZW50KQoreworICAgIG1fZHJhd3NDb250ZW50ID0gZHJhd3ND
b250ZW50OworfQorCitib29sIFdlYkNvbnRlbnRMYXllckltcGw6OmRyYXdzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZHJhd3NDb250ZW50OworfQorCit2b2lkIFdlYkNvbnRlbnRM
YXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBnYywgY29uc3QgSW50UmVj
dCYgY2xpcCkKK3sKKyAgICBpZiAoIW1fY29udGVudENsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
I2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgV2ViQ2FudmFzKiBjYW52YXMgPSBnYy5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICBXZWJDYW52
YXMqIGNhbnZhcyA9IGdjLnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisgICAgbV9jb250ZW50
Q2xpZW50LT5wYWludENvbnRlbnRzKGNhbnZhcywgV2ViUmVjdChjbGlwKSk7Cit9CisKK3ZvaWQg
V2ViQ29udGVudExheWVySW1wbDo6bm90aWZ5U3luY1JlcXVpcmVkKCkKK3sKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlOZWVkc0NvbXBvc2l0ZSgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkNvbnRlbnRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkNvbnRlbnRMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDhkZjVlM2EyNTRlZDk1Njk0NTk4NmZk
NjU0MWE4NGE5ODg2NWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYkNvbnRlbnRMYXllckltcGxfaAorI2RlZmluZSBXZWJDb250ZW50TGF5ZXJJbXBsX2gK
KworI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllckNsaWVudDsKK2Ns
YXNzIFdlYkNvbnRlbnRMYXllckNsaWVudDsKKworY2xhc3MgV2ViQ29udGVudExheWVySW1wbCA6
IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkND
TGF5ZXJEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGVu
dExheWVySW1wbD4gY3JlYXRlKFdlYkxheWVyQ2xpZW50KiwgV2ViQ29udGVudExheWVyQ2xpZW50
KiBjb250ZW50Q2xpZW50KTsKKworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOworICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIFdl
YkNvbnRlbnRMYXllckltcGwoV2ViTGF5ZXJDbGllbnQqLCBXZWJDb250ZW50TGF5ZXJDbGllbnQq
IGNvbnRlbnRDbGllbnQpOworICAgIHZpcnR1YWwgfldlYkNvbnRlbnRMYXllckltcGwoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3lu
Y1JlcXVpcmVkKCk7CisKKyAgICBXZWJMYXllckNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29u
dGVudExheWVyQ2xpZW50KiBtX2NvbnRlbnRDbGllbnQ7CisgICAgYm9vbCBtX2RyYXdzQ29udGVu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQ29udGVudExh
eWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2Q2NjJjODFkNmQzMzI3NWI0N2QzNTY0MGM4YWRmN2ZkYzU4ZmJkNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcApAQCAtMCwwICsx
LDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllci5o
IgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIK
KyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIldlYkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKKyNpbmNsdWRlICJXZWJTaXplLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0KGNvbnN0IFNrTWF0cml4
NDQmIG1hdHJpeCkKK3sKKyAgICBkb3VibGUgZGF0YVsxNl07CisgICAgbWF0cml4LmFzQ29sTWFq
b3JkKGRhdGEpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhWzBdLCBkYXRh
WzFdLCBkYXRhWzJdLCBkYXRhWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhWzRdLCBkYXRhWzVdLCBkYXRhWzZdLCBkYXRhWzddLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhWzhdLCBkYXRhWzldLCBkYXRhWzEwXSwgZGF0YVsxMV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTJdLCBkYXRhWzEzXSwgZGF0YVsxNF0sIGRh
dGFbMTVdKTsKK30KKworU2tNYXRyaXg0NCBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0
cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgU2tNYXRyaXg0
NCBza01hdHJpeDsKKyAgICBza01hdHJpeC5zZXQoMCwgMCwgU2tEb3VibGVUb01TY2FsYXIobWF0
cml4Lm0xMSgpKSk7CisgICAgc2tNYXRyaXguc2V0KDEsIDAsIFNrRG91YmxlVG9NU2NhbGFyKG1h
dHJpeC5tMTIoKSkpOworICAgIHNrTWF0cml4LnNldCgyLCAwLCBTa0RvdWJsZVRvTVNjYWxhciht
YXRyaXgubTEzKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMywgMCwgU2tEb3VibGVUb01TY2FsYXIo
bWF0cml4Lm0xNCgpKSk7CisgICAgc2tNYXRyaXguc2V0KDAsIDEsIFNrRG91YmxlVG9NU2NhbGFy
KG1hdHJpeC5tMjEoKSkpOworICAgIHNrTWF0cml4LnNldCgxLCAxLCBTa0RvdWJsZVRvTVNjYWxh
cihtYXRyaXgubTIyKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMiwgMSwgU2tEb3VibGVUb01TY2Fs
YXIobWF0cml4Lm0yMygpKSk7CisgICAgc2tNYXRyaXguc2V0KDMsIDEsIFNrRG91YmxlVG9NU2Nh
bGFyKG1hdHJpeC5tMjQoKSkpOworICAgIHNrTWF0cml4LnNldCgwLCAyLCBTa0RvdWJsZVRvTVNj
YWxhcihtYXRyaXgubTMxKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMSwgMiwgU2tEb3VibGVUb01T
Y2FsYXIobWF0cml4Lm0zMigpKSk7CisgICAgc2tNYXRyaXguc2V0KDIsIDIsIFNrRG91YmxlVG9N
U2NhbGFyKG1hdHJpeC5tMzMoKSkpOworICAgIHNrTWF0cml4LnNldCgzLCAyLCBTa0RvdWJsZVRv
TVNjYWxhcihtYXRyaXgubTM0KCkpKTsKKyAgICBza01hdHJpeC5zZXQoMCwgMywgU2tEb3VibGVU
b01TY2FsYXIobWF0cml4Lm00MSgpKSk7CisgICAgc2tNYXRyaXguc2V0KDEsIDMsIFNrRG91Ymxl
VG9NU2NhbGFyKG1hdHJpeC5tNDIoKSkpOworICAgIHNrTWF0cml4LnNldCgyLCAzLCBTa0RvdWJs
ZVRvTVNjYWxhcihtYXRyaXgubTQzKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMywgMywgU2tEb3Vi
bGVUb01TY2FsYXIobWF0cml4Lm00NCgpKSk7CisgICAgcmV0dXJuIHNrTWF0cml4OworfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkxheWVy
IFdlYkxheWVyOjpjcmVhdGUoV2ViTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4g
V2ViTGF5ZXIoV2ViTGF5ZXJJbXBsOjpjcmVhdGUoY2xpZW50KSk7Cit9CisKK1dlYkxheWVyOjp+
V2ViTGF5ZXIoKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlc2V0KCkK
K3sKKyAgICBtX3ByaXZhdGUucmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6YXNzaWduKGNv
bnN0IFdlYkxheWVyJiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7
Cit9CisKK2Jvb2wgV2ViTGF5ZXI6OmVxdWFscyhjb25zdCBXZWJMYXllciYgbikgY29uc3QKK3sK
KyAgICByZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7Cit9CisK
K1dlYkxheWVyIFdlYkxheWVyOjpyb290TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBXZWJM
YXllcihjb25zdF9jYXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnJvb3RMYXllcigpKSk7
Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiBX
ZWJMYXllcihjb25zdF9jYXN0PExheWVyQ2hyb21pdW0qPihtX3ByaXZhdGUtPnBhcmVudCgpKSk7
Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OmFkZENoaWxkKGNvbnN0IFdlYkxheWVyJiBjaGlsZCkKK3sK
KyAgICBtX3ByaXZhdGUtPmFkZENoaWxkKGNoaWxkKTsKK30KKwordm9pZCBXZWJMYXllcjo6aW5z
ZXJ0Q2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxkLCBzaXplX3QgaW5kZXgpCit7CisgICAgbV9w
cml2YXRlLT5pbnNlcnRDaGlsZChjaGlsZCwgaW5kZXgpOworfQorCit2b2lkIFdlYkxheWVyOjpy
ZXBsYWNlQ2hpbGQoY29uc3QgV2ViTGF5ZXImIHJlZmVyZW5jZSwgY29uc3QgV2ViTGF5ZXImIG5l
d0xheWVyKQoreworICAgIFdlYkxheWVyIHJlZiA9IHJlZmVyZW5jZTsKKyAgICBtX3ByaXZhdGUt
PnJlcGxhY2VDaGlsZChyZWYudW53cmFwPExheWVyQ2hyb21pdW0+KCksIG5ld0xheWVyKTsKK30K
Kwordm9pZCBXZWJMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgbV9wcml2YXRlLT5y
ZW1vdmVGcm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnJlbW92ZUFsbENoaWxkcmVu
KCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUFsbENoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2Vi
TGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGFuY2hvclBvaW50KQor
eworICAgIG1fcHJpdmF0ZS0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQpOworfQorCitXZWJG
bG9hdFBvaW50IFdlYkxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdl
YkZsb2F0UG9pbnQobV9wcml2YXRlLT5hbmNob3JQb2ludCgpKTsKK30KKwordm9pZCBXZWJMYXll
cjo6c2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEFuY2hvclBvaW50WihhbmNob3JQb2ludFopOworfQorCitmbG9hdCBXZWJMYXllcjo6YW5j
aG9yUG9pbnRaKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hbmNob3JQb2ludFoo
KTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0Qm91bmRzKGNvbnN0IFdlYlNpemUmIHNpemUpCit7
CisgICAgbV9wcml2YXRlLT5zZXRCb3VuZHMoc2l6ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5ZXI6
OmJvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9wcml2YXRlLT5ib3VuZHMo
KSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBtYXNrc1RvQm91
bmRzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TWFza3NUb0JvdW5kcyhtYXNrc1RvQm91bmRzKTsK
K30KKworYm9vbCBXZWJMYXllcjo6bWFza3NUb0JvdW5kcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bWFza3NUb0JvdW5kcygpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRNYXNr
TGF5ZXIoY29uc3QgV2ViTGF5ZXImIG1hc2tMYXllcikKK3sKKyAgICBXZWJMYXllciByZWYgPSBt
YXNrTGF5ZXI7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c2V0TWFza0xheWVyKHJlZi51bndyYXA8
TGF5ZXJDaHJvbWl1bT4oKSk7Cit9CisKK1dlYkxheWVyIFdlYkxheWVyOjptYXNrTGF5ZXIoKSBj
b25zdAoreworICAgIHJldHVybiBXZWJMYXllcihtX3ByaXZhdGUtPm1hc2tMYXllcigpKTsKK30K
Kwordm9pZCBXZWJMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIG1fcHJp
dmF0ZS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKK30KKworZmxvYXQgV2ViTGF5ZXI6Om9wYWNpdHko
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm9wYWNpdHkoKTsKK30KKwordm9pZCBX
ZWJMYXllcjo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0T3Bh
cXVlKG9wYXF1ZSk7Cit9CisKK2Jvb2wgV2ViTGF5ZXI6Om9wYXF1ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+b3BhcXVlKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFBvc2l0
aW9uKGNvbnN0IFdlYkZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
UG9zaXRpb24ocG9zaXRpb24pOworfQorCitXZWJGbG9hdFBvaW50IFdlYkxheWVyOjpwb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkZsb2F0UG9pbnQobV9wcml2YXRlLT5wb3NpdGlv
bigpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgU2tN
YXRyaXg0NCYgbWF0cml4KQoreworICAgIG1fcHJpdmF0ZS0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
dHJhbnNmb3JtYXRpb25NYXRyaXhGcm9tU2tNYXRyaXg0NChtYXRyaXgpKTsKK30KKworU2tNYXRy
aXg0NCBXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBz
a01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5ZXJUcmFu
c2Zvcm0oKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBTa01hdHJp
eDQ0JiBtYXRyaXgpCit7CisgICAgbV9wcml2YXRlLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtYXRp
b25NYXRyaXhGcm9tU2tNYXRyaXg0NChtYXRyaXgpKTsKK30KKworU2tNYXRyaXg0NCBXZWJMYXll
cjo6dHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2tNYXRyaXg0NEZyb21UcmFuc2Zv
cm1hdGlvbk1hdHJpeChtX3ByaXZhdGUtPnRyYW5zZm9ybSgpKTsKK30KKworV2ViTGF5ZXI6Oldl
YkxheWVyKGNvbnN0IFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4mIG5vZGUpCisgICAgOiBtX3By
aXZhdGUobm9kZSkKK3sKK30KKworV2ViTGF5ZXImIFdlYkxheWVyOjpvcGVyYXRvcj0oY29uc3Qg
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBub2Rl
OworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTGF5ZXI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk4MTMyMWVkMjBlZGQ4ODJhYzA3MjEwNmYyM2Mz
YTUzZTVlMjhiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVySW1wbC5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKKworI2luY2x1ZGUgIldlYkxheWVyQ2xp
ZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUGFzc1JlZlB0cjxXZWJMYXllckltcGw+IFdlYkxheWVySW1wbDo6Y3JlYXRlKFdlYkxheWVy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJMYXllckltcGwo
Y2xpZW50KSk7Cit9CisKK1dlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKFdlYkxheWVyQ2xpZW50
KiBjbGllbnQpIDogTGF5ZXJDaHJvbWl1bSh0aGlzKSwgbV9jbGllbnQoY2xpZW50KQoreworfQor
CitXZWJMYXllckltcGw6On5XZWJMYXllckltcGwoKQoreworfQorCitib29sIFdlYkxheWVySW1w
bDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
V2ViTGF5ZXJJbXBsOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApCit7Cit9CisKK3ZvaWQgV2ViTGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQo
KQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29t
cG9zaXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NThkNDFiNWNkZTFhODQ4NzAyY2Fk
MGYzNzUxMmM4OTExNTUxMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViTGF5ZXJJbXBsX2gKKyNkZWZpbmUgV2ViTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkxheWVyQ2xpZW50OworCitjbGFzcyBXZWJMYXllckltcGwgOiBwdWJs
aWMgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJEZWxlZ2F0
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTGF5ZXJJbXBsPiBjcmVhdGUo
V2ViTGF5ZXJDbGllbnQqKTsKKworcHJvdGVjdGVkOgorICAgIFdlYkxheWVySW1wbChXZWJMYXll
ckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYkxheWVySW1wbCgpOworICAgIHZpcnR1YWwgYm9v
bCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKCk7CisKKyAgICBXZWJMYXllckNs
aWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYkxheWVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZGIxYWUwYjg5OTIwNmI0YmJkNjM3MjgzM2FlNWI2
MGI2MDBjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3LmgiCisKKyNpbmNsdWRlICJXZWJM
YXllclRyZWVWaWV3SW1wbC5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGlu
Z3MoKSBjb25zdAoreworICAgIENDU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWNj
ZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxlcmF0ZVBhaW50aW5nOworICAgIHNldHRpbmdzLmNvbXBv
c2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0ZU9mZnNjcmVlbjsKKworICAgIC8vIEZJWE1FOiBjb21w
b3NpdG9yIHRocmVhZCBpc24ndCBzdXBwb3J0ZWQgY3VycmVudGx5LgorICAgIHNldHRpbmdzLmVu
YWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBzaG93RlBTQ291
bnRlciAvIHNob3dQbGF0Zm9ybUxheWVyVHJlZSBhcmVuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4K
KyAgICBzZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IGZhbHNlOworICAgIHNldHRpbmdzLnNob3dQ
bGF0Zm9ybUxheWVyVHJlZSA9IGZhbHNlOworICAgIHJldHVybiBzZXR0aW5nczsKK30KKworV2Vi
TGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0Ns
aWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmll
dzo6U2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIHJldHVybiBXZWJMYXllclRyZWVWaWV3KFdl
YkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUoY2xpZW50LCByb290LCBzZXR0aW5ncykpOworfQor
Cit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJlc2V0KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQo
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3Ojphc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVl
VmlldyYgb3RoZXIpCit7CisgICAgbV9wcml2YXRlID0gb3RoZXIubV9wcml2YXRlOworfQorCiti
b29sIFdlYkxheWVyVHJlZVZpZXc6OmVxdWFscyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBj
b25zdAoreworICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgp
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUoKQoreworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9wcml2YXRlLT5jb21wb3NpdGUoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJT
aXplJiB2aWV3cG9ydFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRWaWV3cG9ydCh2aWV3cG9y
dFNpemUpOworfQorCitXZWJTaXplIFdlYkxheWVyVHJlZVZpZXc6OnZpZXdwb3J0U2l6ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUobV9wcml2YXRlLT52aWV3cG9ydFNpemUoKSk7Cit9
CisKK1dlYkxheWVyVHJlZVZpZXc6OldlYkxheWVyVHJlZVZpZXcoY29uc3QgUGFzc1JlZlB0cjxD
Q0xheWVyVHJlZUhvc3Q+JiBub2RlKQorICAgIDogbV9wcml2YXRlKG5vZGUpCit7Cit9CisKK1dl
YkxheWVyVHJlZVZpZXcmIFdlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVm
UHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCit7CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE0YjliMGYz
NjBhMTNjYWRmNGFmZjc2ZDBhN2ZhYzZmY2E4M2QyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcApAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRy
ZWVWaWV3SW1wbC5oIgorCisjaW5jbHVkZSAiQ0NUaHJlYWRJbXBsLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViTGF5ZXIuaCIKKyNp
bmNsdWRlICJXZWJMYXllclRyZWVWaWV3LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlVmlld0Ns
aWVudC5oIgorI2luY2x1ZGUgIldlYlNpemUuaCIKKyNpbmNsdWRlICJXZWJUaHJlYWQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVm
UHRyPFdlYkxheWVyVHJlZVZpZXdJbXBsPiBXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKFdl
YkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0
IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICBSZWZQdHI8V2Vi
TGF5ZXJUcmVlVmlld0ltcGw+IGhvc3QgPSBhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlVmlld0lt
cGwoY2xpZW50LCByb290LCBzZXR0aW5ncykpOworICAgIGlmICghaG9zdC0+aW5pdGlhbGl6ZSgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaG9zdDsKK30KKworV2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OldlYkxheWVyVHJlZVZpZXdJbXBsKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNs
aWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRp
bmdzJiBzZXR0aW5ncykgCisgICAgOiBDQ0xheWVyVHJlZUhvc3QodGhpcywgcm9vdCwgc2V0dGlu
Z3MpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYkxheWVyVHJlZVZpZXdJbXBs
Ojp+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKQoreworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJ
bXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5U
aW1lKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbERlbHRhKFdlYlNpemUoZGVsdGEpKTsKK30KKworUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZUxh
eWVyVHJlZUhvc3RDb250ZXh0M0QoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJl
dHVybiAwOworICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFk
b3B0UHRyKG1fY2xpZW50LT5jcmVhdGVDb250ZXh0M0QoKSk7CisgICAgaWYgKCF3ZWJDb250ZXh0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIHdlYkF0dHJpYnV0ZXMgPSB3ZWJDb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmli
dXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9
IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CisgICAgYXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmli
dXRlcy5zdGVuY2lsOworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5h
bnRpYWxpYXM7CisgICAgYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1
dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29u
dGV4dExvc3MgPSB3ZWJBdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3M7CisgICAg
YXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB3ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5zaW9uczsKKyAg
ICBhdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gd2ViQXR0cmlidXRlcy5zaGFyZVJlc291cmNl
czsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlOworCisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHN0eWxlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6VGhyZWFkVXNhZ2UgdXNhZ2UgPSBzZXR0aW5ncygpLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQg
PyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uQW5vdGhlclRocmVhZCA6IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkOworICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRyaWJ1dGVzLCAwLCBzdHlsZSwgdXNhZ2UpOworfQor
Cit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChi
b29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlk
UmViaW5kR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOworfQorCisjaWYgIVVTRShUSFJFQURFRF9D
T01QT1NJVElORykKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRl
KCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDVmMmE5ZThiNDMzZmEwYzY2OWM1NDY1ZDBhZTNkMDEyZDI0NGIzMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmgKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlVmlld0ltcGxfaAorI2Rl
ZmluZSBXZWJMYXllclRyZWVWaWV3SW1wbF9oCisKKyNpbmNsdWRlICJXZWJMYXllclRyZWVWaWV3
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdl
YkxheWVyVHJlZVZpZXdDbGllbnQ7CisKK2NsYXNzIFdlYkxheWVyVHJlZVZpZXdJbXBsIDogcHVi
bGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdCwgcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVl
Vmlld0ltcGw+IGNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXIm
IHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJik7CisKK3ByaXZhdGU6Cisg
ICAgV2ViTGF5ZXJUcmVlVmlld0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdl
YkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYpOworICAgIHZp
cnR1YWwgfldlYkxheWVyVHJlZVZpZXdJbXBsKCk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVB
bmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
Y3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wg
c3VjY2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgorCisgICAgV2ViTGF5ZXJUcmVlVmlld0Ns
aWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFdlYkxheWVyVHJlZVZpZXdJbXBsX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110185</attachid>
            <date>2011-10-07 11:43:52 -0700</date>
            <delta_ts>2011-10-07 16:37:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69107-20111007114351.patch</filename>
            <type>text/plain</type>
            <size>61247</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZTRlMGExNzk0ZTI2MzVk
N2Q3ZWMyN2UzMDUzOTJhMTEwMzU1NGYwLi4yYWFmZDhiZjFiN2EzZDgzMTg4NGIwOTkwMGZhZjQ4
ZmM4OGQ4OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFudG9p
bmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYmtpdCBBUEkgZm9y
IGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6IAorCiAyMDEx
LTEwLTA2ICBBbm5hIENhdmVuZGVyICA8YW5uYWNjQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
ZGRpbmcgcGFyZW5zIGluIFdlYlZUVFBhcnNlci5jcHAgdG8gYXBwZWFzZSBjb21waWxlciBwcmVm
ZXJlbmNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGEyMWJjNjgwOGY4
OGNmNDk3YTliN2JhMzY2ZTE3MWU5M2Y4OTZlNmQuLmI4MzRlNjc2YmQ2MzQ0NWFhNDUzYjM2NWVl
ZTI4MDI0MGYzODA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtNTEs
OSArNTEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRp
cnR5KCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVy
Q2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJU
cmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYjg2ZGEyZGRiMTE2ZjQy
Y2Y5MmU3YzIwYmQ0ZDNjNGFkYzg3NGM0Li43NTAzZWQwMDkzYTg1OWRjMGVmOTcwZDU2MTQ4NTZi
OGJkNTNlMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAor
MjAxMS0xMC0wNSAgQW50b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgV2Via2l0IEFQSSBmb3IgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkNv
bnRlbnRMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpX
ZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6On5XZWJD
b250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJhdG9y
PSk6CisgICAgICAgICogcHVibGljL1dlYkNvbnRlbnRMYXllckNsaWVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyQ2xpZW50Ojp+V2ViQ29udGVudExheWVyQ2xp
ZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6dG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6dG9Db25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjp1bndyYXAp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6Y29uc3RVbndyYXApOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYkxheWVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllckNsaWVudDo6fldlYkxheWVyQ2xpZW50KToKKyAgICAgICAgKiBwdWJsaWMvV2ViTGF5ZXJU
cmVlVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6V2Vi
TGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6On5XZWJM
YXllclRyZWVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHB1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Q2xpZW50Ojp+V2ViTGF5ZXJU
cmVlVmlld0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGVudExheWVyOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZW50TGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
bnRMYXllcjo6ZGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVyOjpX
ZWJDb250ZW50TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZW50TGF5ZXI6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllcjo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPik6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXll
ckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6V2ViQ29udGVu
dExheWVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6On5XZWJD
b250ZW50TGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6
ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGVudExheWVySW1wbDo6cGFp
bnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRlbnRMYXllckltcGw6Om5vdGlm
eVN5bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkNvbnRlbnRMYXllckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL1dlYkxheWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6fldlYkxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjplcXVhbHMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXI6OnBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjppbnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpyZW1vdmVBbGxD
aGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpzZXRBbmNob3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjphbmNob3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpzZXRBbmNob3JQb2ludFopOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6
YW5jaG9yUG9pbnRaKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldEJvdW5kcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpib3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNr
c1RvQm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE1hc2tMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjptYXNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpvcGFjaXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkxheWVyOjpvcGFxdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6c2V0UG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6cG9zaXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllcjo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
cjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXI6OnRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyOjpXZWJMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllcjo6b3BlcmF0
b3IgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik6CisgICAgICAgICogc3JjL1dlYkxheWVySW1w
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVySW1wbDo6V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJJbXBsOjp+V2ViTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6
OnBhaW50Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllckltcGw6Om5vdGlmeVN5
bmNSZXF1aXJlZCk6CisgICAgICAgICogc3JjL1dlYkxheWVySW1wbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmll
dzo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6ZXF1YWxzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6
V2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0Pik6CisgICAgICAgICog
c3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVWaWV3SW1wbDo6fldlYkxheWVyVHJlZVZpZXdJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNj
aGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaDog
QWRkZWQuCisKIDIwMTEtMTAtMDYgIEFubmEgQ2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFR1cm4gRU5BQkxFX1ZJREVPX1RSQUNLIG9uIGZvciBjaHJvbWl1bS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBkY2NlMWE3NDBjY2E0N2ZkN2VkZWZkZDhhMTFm
NDcwMDdmNmZhODVjLi43MmU5NTMzYTAxNjMwYzdlMDFjYTc0ZWFiNjc4MGE1MWE5YjA3ZTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04NSw2ICs4NSw3IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYycsCiAgICAgICAgICAgICAgICAgJ3NyYycsCiAgICAgICAgICAgICAgICAg
JzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCisgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0
aWxzJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKICAgICAgICAg
ICAgICAgICAnV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnLApAQCAtMTMwLDYgKzEzMSw4IEBACiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21wb3NpdG9yQ2xpZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViQ29tcG9zaXRvci5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkNvbnNvbGVNZXNzYWdlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGVu
dExheWVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50
LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29udGV4dE1lbnVEYXRhLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29va2llLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29va2llSmFyLmgnLApAQCAtMjE2LDYgKzIxOSwxMCBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViS2l0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViS2l0UGxhdGZv
cm1TdXBwb3J0LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGFiZWxFbGVtZW50Lmgn
LAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTGF5ZXIuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJMYXllckNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkxh
eWVyVHJlZVZpZXcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJMYXllclRyZWVWaWV3
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTG9jYWxpemVkU3RyaW5nLmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTWVkaWFFbGVtZW50LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvV2ViTWVkaWFQbGF5ZXIuaCcsCkBAIC00NDksNiArNDU2LDkgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ29tcG9zaXRvckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbXBvc2l0
b3JJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQ29udGVudExheWVyLmNwcCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ3Vyc29ySW5m
by5jcHAnLApAQCAtNTMzLDYgKzU0MywxMiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViSW5w
dXRFdmVudENvbnZlcnNpb24uaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJLaXQuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkxhYmVsRWxlbWVudC5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVySW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTWVkaWFFbGVtZW50LmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmM1OTI2MTk1ZGU3NjEyMDg1NWQ1YjcxZGE0NTJhNzM4ZDMyZjk2YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbnRlbnRMYXllci5oCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRlbnRMYXllcl9oCisjZGVmaW5l
IFdlYkNvbnRlbnRMYXllcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJX
ZWJMYXllci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckNs
aWVudDsKK2NsYXNzIFdlYkNvbnRlbnRMYXllckltcGw7CitzdHJ1Y3QgV2ViRmxvYXRSZWN0Owor
Y2xhc3MgV2ViTGF5ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkNvbnRlbnRMYXllciA6IHB1YmxpYyBX
ZWJMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYkNvbnRlbnRMYXllciBjcmVhdGUoV2Vi
TGF5ZXJDbGllbnQqLCBXZWJDb250ZW50TGF5ZXJDbGllbnQqKTsKKworICAgIFdlYkNvbnRlbnRM
YXllcigpIHsgfQorICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXZWJDb250ZW50TGF5ZXImIGxh
eWVyKSA6IFdlYkxheWVyKGxheWVyKSB7IH0KKyAgICB2aXJ0dWFsIH5XZWJDb250ZW50TGF5ZXIo
KSB7IH0KKyAgICBXZWJDb250ZW50TGF5ZXImIG9wZXJhdG9yPShjb25zdCBXZWJDb250ZW50TGF5
ZXImIGxheWVyKQorICAgIHsKKyAgICAgICAgV2ViTGF5ZXI6OmFzc2lnbihsYXllcik7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvLyBTZXRzIHdoZXRoZXIgdGhlIGxheWVy
IGRyYXdzIGl0cyBjb250ZW50IHdoZW4gY29tcG9zaXRpbmcuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZHJhd3ND
b250ZW50KCkgY29uc3Q7CisKKyAgICAvLyBTZXRzIGEgcmVnaW9uIG9mIHRoZSBsYXllciBhcyBp
bnZhbGlkLCBpLmUuIG5lZWRzIHRvIHVwZGF0ZSBpdHMgY29udGVudC4KKyAgICAvLyBUaGUgdmlz
aWJsZSBhcmVhIG9mIHRoZSBkaXJ0eSByZWN0IHdpbGwgYmUgcGFzc2VkIHRvIG9uZSBvciBtb3Jl
IGNhbGxzIHRvCisgICAgLy8gV2ViQ29udGVudExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzIGJl
Zm9yZSB0aGUgY29tcG9zaXRpbmcgcGFzcyBvY2N1cnMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkZsb2F0UmVjdCYpOworCisgICAgLy8gU2V0cyB0aGUg
ZW50aXJlIGxheWVyIGFzIGludmFsaWQsIGkuZS4gbmVlZHMgdG8gdXBkYXRlIGl0cyBjb250ZW50
LgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSByZWdpb24gb2YgdGhlIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IGludmFsaWQuCisgICAg
V0VCS0lUX0VYUE9SVCBXZWJGbG9hdFJlY3QgaW52YWxpZFJlY3QoKSBjb25zdDsKKworI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkNvbnRlbnRMYXllcihjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKKyAgICBXZWJDb250ZW50TGF5ZXImIG9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mKTsKKyAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4oKSBjb25zdDsKKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250ZW50
TGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29u
dGVudExheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250
ZW50TGF5ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWIzNmUwNzdkMTkwMzNiNjRhMmM5ZThlZDQw
MWMwM2FmYmNhNjYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ29udGVudExheWVyQ2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViQ29udGVudExheWVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViQ29udGVudExheWVyQ2xp
ZW50X2gKKworI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3N0
cnVjdCBXZWJSZWN0OworCitjbGFzcyBXZWJDb250ZW50TGF5ZXJDbGllbnQgeworcHVibGljOgor
ICAgIC8vIFBhaW50cyB0aGUgY29udGVudCBhcmVhIGZvciB0aGUgbGF5ZXIsIHR5cGljYWxseSBk
aXJ0eSByZWN0cyBzdWJtaXR0ZWQKKyAgICAvLyB0aHJvdWdoIFdlYkNvbnRlbnRMYXllcjo6c2V0
TmVlZHNEaXNwbGF5LCBzdWJtaXR0aW5nIGRyYXdpbmcgY29tbWFuZHMKKyAgICAvLyB0aHJvdWdo
IHRoZSBXZWJDYW52YXMuCisgICAgLy8gVGhlIGNhbnZhcyBpcyBhbHJlYWR5IGNsaXBwZWQgdG8g
dGhlIHxjbGlwfCByZWN0LgorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNhbnZh
cyosIGNvbnN0IFdlYlJlY3QmIGNsaXApID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
fldlYkNvbnRlbnRMYXllckNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNmOGVmZmJiZmI1MDU2YWE4NTU5OTFm
OGZlOWViOGE4Y2Q5NzI5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkxheWVyX2gKKyNkZWZpbmUgV2ViTGF5ZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisj
aW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCitjbGFzcyBTa01hdHJpeDQ0OworbmFtZXNwYWNl
IFdlYkNvcmUgeyBjbGFzcyBMYXllckNocm9taXVtOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
c3RydWN0IFdlYkZsb2F0UG9pbnQ7CitjbGFzcyBXZWJMYXllckNsaWVudDsKK3N0cnVjdCBXZWJT
aXplOworCitjbGFzcyBXZWJMYXllciB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYkxheWVyIGNy
ZWF0ZShXZWJMYXllckNsaWVudCopOworCisgICAgV2ViTGF5ZXIoKSB7IH0KKyAgICBXZWJMYXll
cihjb25zdCBXZWJMYXllciYgbGF5ZXIpIHsgYXNzaWduKGxheWVyKTsgfQorICAgIHZpcnR1YWwg
fldlYkxheWVyKCk7CisgICAgV2ViTGF5ZXImIG9wZXJhdG9yPShjb25zdCBXZWJMYXllciYgbGF5
ZXIpCisgICAgeworICAgICAgICBhc3NpZ24obGF5ZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXImKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wg
ZXF1YWxzKGNvbnN0IFdlYkxheWVyJikgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkxh
eWVyIHJvb3RMYXllcigpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgV2ViTGF5ZXIgcGFyZW50
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZENoaWxkKGNvbnN0IFdlYkxheWVy
Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluc2VydENoaWxkKGNvbnN0IFdlYkxheWVyJiwg
c2l6ZV90IGluZGV4KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVwbGFjZUNoaWxkKGNvbnN0
IFdlYkxheWVyJiByZWZlcmVuY2UsIGNvbnN0IFdlYkxheWVyJiBuZXdMYXllcik7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbmNo
b3JQb2ludChjb25zdCBXZWJGbG9hdFBvaW50Jik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJGbG9h
dFBvaW50IGFuY2hvclBvaW50KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
QW5jaG9yUG9pbnRaKGZsb2F0KTsKKyAgICBXRUJLSVRfRVhQT1JUIGZsb2F0IGFuY2hvclBvaW50
WigpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEJvdW5kcyhjb25zdCBXZWJT
aXplJik7CisgICAgV0VCS0lUX0VYUE9SVCBXZWJTaXplIGJvdW5kcygpIGNvbnN0OworCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CisgICAgV0VCS0lUX0VY
UE9SVCBib29sIG1hc2tzVG9Cb3VuZHMoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRNYXNrTGF5ZXIoY29uc3QgV2ViTGF5ZXImKTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYkxh
eWVyIG1hc2tMYXllcigpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE9wYWNp
dHkoZmxvYXQpOworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQgb3BhY2l0eSgpIGNvbnN0OworCisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE9wYXF1ZShib29sKTsKKyAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgb3BhcXVlKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgV2ViRmxvYXRQb2ludCYpOworICAgIFdFQktJVF9FWFBPUlQgV2ViRmxvYXRQb2lu
dCBwb3NpdGlvbigpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFN1YmxheWVy
VHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4NDQmKTsKKyAgICBXRUJLSVRfRVhQT1JUIFNrTWF0cml4
NDQgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRUcmFuc2Zvcm0oY29uc3QgU2tNYXRyaXg0NCYpOworICAgIFdFQktJVF9FWFBPUlQgU2tNYXRy
aXg0NCB0cmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgdG8o
KQorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAg
ICAgIHJlcy5XZWJMYXllcjo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAg
ICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJMYXllcihjb25zdCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bT4mKTsKKyAgICBXZWJMYXllciYgb3Bl
cmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiYpOwor
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPigpIGNv
bnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIHVud3JhcCgpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCogY29uc3RVbndyYXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFQqPihtX3ByaXZhdGUuZ2V0KCkpOwor
ICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpM
YXllckNocm9taXVtPiBtX3ByaXZhdGU7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFdlYkxheWVyJiBhLCBjb25zdCBXZWJMYXllciYgYikKK3sKKyAgICByZXR1cm4gYS5lcXVh
bHMoYik7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViTGF5ZXImIGEsIGNv
bnN0IFdlYkxheWVyJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkxheWVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYxNDhiYTJlZTEz
Nzg0MmIxMTJkYzMyOTJjOTgwNDllNTVjZTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyQ2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViTGF5ZXJDbGllbnRfaAorI2RlZmluZSBXZWJMYXllckNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJMYXllckNsaWVudCB7CitwdWJsaWM6
CisgICAgLy8gTm90aWZpZXMgdGhlIGNsaWVudCB0aGF0IHRoZSBsYXllciBoYXMgY2hhbmdlZCBp
biBhIHdheSB0aGF0IG5lZWRzIGEKKyAgICAvLyBjb21wb3NpdGluZyBwYXNzIHRvIHZpc3VhbGx5
IHVwZGF0ZS4gVGhlIGNsaWVudCBzaG91bGQgZXZlbnR1YWxseSBjYWxsCisgICAgLy8gV2ViTGF5
ZXJUcmVlVmlldzo6Y29tcG9zaXRlLgorICAgIC8vIE5vdGU6IHNvbWUgY29tcGxleCBvcGVyYXRp
b25zIChlLmcgbGF5ZXIgcmVwYXJlbnRpbmcpIGNhbiBjYXVzZSB0aGlzIHRvCisgICAgLy8gYmUg
Y2FsbGVkIHdoaWxlIHRoZSBsYXllciB0cmVlIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwg
c28gdG8gZ2V0CisgICAgLy8gY29ycmVjdCByZXN1bHRzLCBXZWJMYXllclRyZWVWaWV3Ojpjb21w
b3NpdGUgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUKKyAgICAvLyBvcGVyYXRpb24gaGFzIGZp
bmlzaGVkIChlLmcuIGJ5IHBvc3RpbmcgYSB0YXNrKS4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
TmVlZHNDb21wb3NpdGUoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5XZWJMYXll
ckNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBX
ZWJMYXllckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4NjIxM2UzYmJmYjE2ZmZlNWU0OGRiZTgwN2Qz
ZmM4OTVmYjY5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkxheWVyVHJlZVZpZXcuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViTGF5ZXJUcmVlVmlld19oCisjZGVmaW5lIFdlYkxheWVyVHJlZVZpZXdfaAorCisjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitzdHJ1Y3QgQ0NTZXR0aW5nczsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJMYXllcjsKK2NsYXNzIFdlYkxheWVyVHJl
ZVZpZXdDbGllbnQ7CitzdHJ1Y3QgV2ViU2l6ZTsKKworY2xhc3MgV2ViTGF5ZXJUcmVlVmlldyB7
CitwdWJsaWM6CisgICAgc3RydWN0IFNldHRpbmdzIHsKKyAgICAgICAgU2V0dGluZ3MoKQorICAg
ICAgICAgICAgOiBhY2NlbGVyYXRlUGFpbnRpbmcoZmFsc2UpCisgICAgICAgICAgICAsIGNvbXBv
c2l0ZU9mZnNjcmVlbihmYWxzZSkKKyAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVh
ZChmYWxzZSkgeyB9CisKKyAgICAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CisgICAgICAg
IGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOworICAgICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JU
aHJlYWQ7CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkNDU2V0dGluZ3MoKSBjb25zdDsKKyNlbmRpZgorICAgIH07CisKKyAgICBzdGF0aWMgV2Vi
TGF5ZXJUcmVlVmlldyBjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxh
eWVyJiByb290LCBjb25zdCBTZXR0aW5ncyYpOworCisgICAgV2ViTGF5ZXJUcmVlVmlldygpIHsg
fQorICAgIFdlYkxheWVyVHJlZVZpZXcoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbGF5ZXIpIHsg
YXNzaWduKGxheWVyKTsgfQorICAgIH5XZWJMYXllclRyZWVWaWV3KCkgeyByZXNldCgpOyB9Cisg
ICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGxh
eWVyKQorICAgIHsKKyAgICAgICAgYXNzaWduKGxheWVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKSBjb25zdDsKKworICAgIC8v
IFRyaWdnZXJzIGEgY29tcG9zaXRpbmcgcGFzcy4gSWYgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGlz
IGRpc2FibGVkCisgICAgLy8gKGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPT0gZmFsc2UpLCB0aGUg
Y29tcG9zaXRpbmcgcGFzcyBoYXBwZW5zCisgICAgLy8gaW1tZWRpYXRlbHkuIElmIGl0IGlzIGVu
YWJsZWQsIHRoZSBjb21wb3NpdGluZyBwYXNzIHdpbGwgaGFwcGVuIGF0IGEKKyAgICAvLyBsYXRl
ciB0aW1lLiBCZWZvcmUgdGhlIGNvbXBvc2l0aW5nIHBhc3MgaGFwcGVucyAoaS5lLiBiZWZvcmUg
Y29tcG9zaXRlKCkKKyAgICAvLyByZXR1cm5zIHdoZW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkIGlz
IGRpc2FibGVkKSwgV2ViQ29udGVudExheWVycyB3aWxsIGJlCisgICAgLy8gYXNrZWQgdG8gcGFp
bnQgdGhlaXIgZGlydHkgcmVnaW9uLCB0aHJvdWdoCisgICAgLy8gV2ViQ29udGVudExheWVyQ2xp
ZW50OjpwYWludENvbnRlbnRzLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBjb21wb3NpdGUoKTsK
KworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgV2ViU2l6ZSYp
OworICAgIFdFQktJVF9FWFBPUlQgV2ViU2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkxheWVyVHJlZVZpZXcoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4mKTsKKyAgICBXZWJMYXllclRyZWVW
aWV3JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdD4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0PigpIGNvbnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlUHRy
PFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4gbV9wcml2YXRlOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBXZWJMYXllclRyZWVWaWV3JiBhLCBjb25zdCBXZWJMYXllclRyZWVW
aWV3JiBiKQoreworICAgIHJldHVybiBhLmVxdWFscyhiKTsKK30KKworaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJMYXllclRyZWVWaWV3JiBhLCBjb25zdCBXZWJMYXllclRyZWVWaWV3
JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDkxMjY5YzdhYjU0OTA4ZmJmMjg1ODMzYjVlMTg2MGNhM2QyYjMzZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQu
aApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJMYXllclRyZWVWaWV3Q2xpZW50
X2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlVmlld0NsaWVudF9oCisKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CitzdHJ1Y3QgV2ViU2l6ZTsKK2NsYXNzIFdl
YlRocmVhZDsKKworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCB7CitwdWJsaWM6CisgICAg
Ly8gVXBkYXRlcyBhbmltYXRpb24gYW5kIGxheW91dC4gVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRo
ZSBjb21wb3NpdGluZyBwYXNzCisgICAgLy8gc28gdGhhdCBsYXllcnMgY2FuIGJlIHVwZGF0ZWQg
YXQgdGhlIGdpdmVuIGZyYW1lIHRpbWUuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisKKyAgICAvLyBBcHBsaWVzIGEgc2Nyb2xs
IGRlbHRhIHRvIHRoZSByb290IGxheWVyLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBldmVudHMKKyAg
ICAvLyBzZW50IHRvIHRoZSBjb21wb3NpdG9yIHRocmVhZCB0aHJvdWdoIHRoZSBXZWJDb21wb3Np
dG9yIGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxEZWx0YShjb25zdCBX
ZWJTaXplJikgPSAwOworCisgICAgLy8gQ3JlYXRlcyBhIDNEIGNvbnRleHQgc3VpdGFibGUgZm9y
IHRoZSBjb21wb3NpdGluZy4gVGhpcyBtYXkgYmUgY2FsbGVkCisgICAgLy8gbW9yZSB0aGFuIG9u
Y2UgaWYgdGhlIGNvbnRleHQgZ2V0cyBsb3N0LgorICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250
ZXh0M0QqIGNyZWF0ZUNvbnRleHQzRCgpID0gMDsKKworICAgIC8vIFNpZ25hbHMgYSBzdWNjZXNz
ZnVsIHJlYmluZGluZyBvZiB0aGUgM0QgY29udGV4dCAoZS5nLiBhZnRlciBhIGxvc3QKKyAgICAv
LyBjb250ZXh0IGV2ZW50KS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmViaW5kR3JhcGhpY3NDb250
ZXh0KGJvb2wgc3VjY2VzcykgPSAwOworCisgICAgLy8gU2NoZWR1bGVzIGEgY29tcG9zaXRpbmcg
cGFzcywgbWVhbmluZyB0aGUgY2xpZW50IHNob3VsZCBjYWxsCisgICAgLy8gV2ViTGF5ZXJUcmVl
Vmlldzo6Y29tcG9zaXRlIGF0IGEgbGF0ZXIgdGltZS4gVGhpcyBpcyBvbmx5IGNhbGxlZCBpZiB0
aGUKKyAgICAvLyBjb21wb3NpdG9yIHRocmVhZCBpcyBkaXNhYmxlZDsgd2hlbiBlbmFibGVkLCB0
aGUgY29tcG9zaXRvciB3aWxsCisgICAgLy8gaW50ZXJuYWxseSBzY2hlZHVsZSBhIGNvbXBvc2l0
aW5nIHBhc3Mgd2hlbiBuZWVkZWQuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRl
KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlVmlld0NsaWVu
dCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJMYXll
clRyZWVWaWV3Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkNvbnRlbnRMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb250
ZW50TGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlOGQ5OThhZTk4YzRjMWNkZWQ1NmI3YTQ4NzhjOGYz
NDRlMjhhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJDb250ZW50TGF5ZXIuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGVudExheWVyLmgiCisKKyNpbmNsdWRlICJXZWJDb250
ZW50TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRSZWN0LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJDb250ZW50TGF5ZXIgV2ViQ29udGVudExheWVyOjpjcmVhdGUoV2ViTGF5
ZXJDbGllbnQqIGNsaWVudCwgV2ViQ29udGVudExheWVyQ2xpZW50KiBjb250ZW50Q2xpZW50KQor
eworICAgIHJldHVybiBXZWJDb250ZW50TGF5ZXIoV2ViQ29udGVudExheWVySW1wbDo6Y3JlYXRl
KGNsaWVudCwgY29udGVudENsaWVudCkpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6c2V0
RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KQoreworICAgIHVud3JhcDxXZWJDb250ZW50
TGF5ZXJJbXBsPigpLT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KTsKK30KKworYm9vbCBX
ZWJDb250ZW50TGF5ZXI6OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
VW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPmRyYXdzQ29udGVudCgpOworfQorCit2b2lk
IFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViRmxvYXRSZWN0JiBkaXJ0
eVJlY3QpCit7CisgICAgdW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPnNldE5lZWRzRGlz
cGxheShkaXJ0eVJlY3QpOworfQorCit2b2lkIFdlYkNvbnRlbnRMYXllcjo6aW52YWxpZGF0ZSgp
Cit7CisgICAgdW53cmFwPFdlYkNvbnRlbnRMYXllckltcGw+KCktPnNldE5lZWRzRGlzcGxheSgp
OworfQorCitXZWJGbG9hdFJlY3QgV2ViQ29udGVudExheWVyOjppbnZhbGlkUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdlYkZsb2F0UmVjdChjb25zdFVud3JhcDxXZWJDb250ZW50TGF5ZXJJ
bXBsPigpLT5kaXJ0eVJlY3QoKSk7Cit9CisKK1dlYkNvbnRlbnRMYXllcjo6V2ViQ29udGVudExh
eWVyKGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mIG5vZGUpCisgICAgOiBX
ZWJMYXllcihub2RlKQoreworfQorCitXZWJDb250ZW50TGF5ZXImIFdlYkNvbnRlbnRMYXllcjo6
b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29udGVudExheWVySW1wbD4mIG5vZGUpCit7
CisgICAgbV9wcml2YXRlID0gbm9kZTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkNvbnRl
bnRMYXllcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJDb250ZW50TGF5ZXJJbXBsPigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvbnRlbnRMYXllckltcGwqPihtX3ByaXZh
dGUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY0
MWU2Y2EwNzI5NGI5Nzk1NDc3ZDRlMjAyMmU4OTllYWIxYzI3YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbnRlbnRMYXllckltcGwuY3BwCkBAIC0w
LDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29u
dGVudExheWVySW1wbC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViQ29udGVudExheWVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisjaWYgV0VCS0lU
X1VTSU5HX1NLSUEKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVm
UHRyPFdlYkNvbnRlbnRMYXllckltcGw+IFdlYkNvbnRlbnRMYXllckltcGw6OmNyZWF0ZShXZWJM
YXllckNsaWVudCogY2xpZW50LCBXZWJDb250ZW50TGF5ZXJDbGllbnQqIGNvbnRlbnRDbGllbnQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZW50TGF5ZXJJbXBsKGNsaWVudCwg
Y29udGVudENsaWVudCkpOworfQorCitXZWJDb250ZW50TGF5ZXJJbXBsOjpXZWJDb250ZW50TGF5
ZXJJbXBsKFdlYkxheWVyQ2xpZW50KiBjbGllbnQsIFdlYkNvbnRlbnRMYXllckNsaWVudCogY29u
dGVudENsaWVudCkKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVtKHRoaXMpCisgICAgLCBtX2Ns
aWVudChjbGllbnQpCisgICAgLCBtX2NvbnRlbnRDbGllbnQoY29udGVudENsaWVudCkKKyAgICAs
IG1fZHJhd3NDb250ZW50KHRydWUpCit7Cit9CisKK1dlYkNvbnRlbnRMYXllckltcGw6On5XZWJD
b250ZW50TGF5ZXJJbXBsKCkKK3sKK30KKwordm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpzZXRE
cmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgbV9kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQ7Cit9CisKK2Jvb2wgV2ViQ29udGVudExheWVySW1wbDo6ZHJhd3NDb250ZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3c0NvbnRlbnQ7Cit9CisKK3ZvaWQgV2ViQ29u
dGVudExheWVySW1wbDo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGdjLCBjb25zdCBJ
bnRSZWN0JiBjbGlwKQoreworICAgIGlmICghbV9jb250ZW50Q2xpZW50KQorICAgICAgICByZXR1
cm47CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICBXZWJDYW52YXMqIGNhbnZhcyA9IGdjLnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyNlbGlmIFdFQktJVF9VU0lOR19DRworICAgIFdl
YkNhbnZhcyogY2FudmFzID0gZ2MucGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBtX2Nv
bnRlbnRDbGllbnQtPnBhaW50Q29udGVudHMoY2FudmFzLCBXZWJSZWN0KGNsaXApKTsKK30KKwor
dm9pZCBXZWJDb250ZW50TGF5ZXJJbXBsOjpub3RpZnlTeW5jUmVxdWlyZWQoKQoreworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeU5lZWRzQ29tcG9zaXRlKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQ29udGVudExheWVySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQ29udGVudExheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwOGRmNWUzYTI1NGVkOTU2OTQ1
OTg2ZmQ2NTQxYTg0YTk4ODY1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJDb250ZW50TGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViQ29udGVudExheWVySW1wbF9oCisjZGVmaW5lIFdlYkNvbnRlbnRMYXllcklt
cGxfaAorCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyQ2xpZW50
OworY2xhc3MgV2ViQ29udGVudExheWVyQ2xpZW50OworCitjbGFzcyBXZWJDb250ZW50TGF5ZXJJ
bXBsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtLCBwdWJsaWMgV2ViQ29y
ZTo6Q0NMYXllckRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJD
b250ZW50TGF5ZXJJbXBsPiBjcmVhdGUoV2ViTGF5ZXJDbGllbnQqLCBXZWJDb250ZW50TGF5ZXJD
bGllbnQqIGNvbnRlbnRDbGllbnQpOworCisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7
CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgV2ViQ29udGVudExheWVySW1wbChXZWJMYXllckNsaWVudCosIFdlYkNvbnRlbnRMYXllckNs
aWVudCogY29udGVudENsaWVudCk7CisgICAgdmlydHVhbCB+V2ViQ29udGVudExheWVySW1wbCgp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKKworICAgIFdlYkxheWVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBX
ZWJDb250ZW50TGF5ZXJDbGllbnQqIG1fY29udGVudENsaWVudDsKKyAgICBib29sIG1fZHJhd3ND
b250ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJDb250
ZW50TGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZDY2MmM4MWQ2ZDMzMjc1YjQ3ZDM1NjQwYzhhZGY3ZmRjNThmYmQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXIuY3BwCkBAIC0w
LDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxh
eWVyLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiU2tNYXRyaXg0
NC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiV2ViRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgorI2luY2x1ZGUgIldlYlNpemUu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK1RyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbVNrTWF0cml4NDQoY29uc3QgU2tN
YXRyaXg0NCYgbWF0cml4KQoreworICAgIGRvdWJsZSBkYXRhWzE2XTsKKyAgICBtYXRyaXguYXND
b2xNYWpvcmQoZGF0YSk7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGFbMF0s
IGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbNF0sIGRhdGFbNV0sIGRhdGFbNl0sIGRhdGFbN10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMl0sIGRhdGFbMTNdLCBkYXRhWzE0
XSwgZGF0YVsxNV0pOworfQorCitTa01hdHJpeDQ0IHNrTWF0cml4NDRGcm9tVHJhbnNmb3JtYXRp
b25NYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBTa01h
dHJpeDQ0IHNrTWF0cml4OworICAgIHNrTWF0cml4LnNldCgwLCAwLCBTa0RvdWJsZVRvTVNjYWxh
cihtYXRyaXgubTExKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMSwgMCwgU2tEb3VibGVUb01TY2Fs
YXIobWF0cml4Lm0xMigpKSk7CisgICAgc2tNYXRyaXguc2V0KDIsIDAsIFNrRG91YmxlVG9NU2Nh
bGFyKG1hdHJpeC5tMTMoKSkpOworICAgIHNrTWF0cml4LnNldCgzLCAwLCBTa0RvdWJsZVRvTVNj
YWxhcihtYXRyaXgubTE0KCkpKTsKKyAgICBza01hdHJpeC5zZXQoMCwgMSwgU2tEb3VibGVUb01T
Y2FsYXIobWF0cml4Lm0yMSgpKSk7CisgICAgc2tNYXRyaXguc2V0KDEsIDEsIFNrRG91YmxlVG9N
U2NhbGFyKG1hdHJpeC5tMjIoKSkpOworICAgIHNrTWF0cml4LnNldCgyLCAxLCBTa0RvdWJsZVRv
TVNjYWxhcihtYXRyaXgubTIzKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMywgMSwgU2tEb3VibGVU
b01TY2FsYXIobWF0cml4Lm0yNCgpKSk7CisgICAgc2tNYXRyaXguc2V0KDAsIDIsIFNrRG91Ymxl
VG9NU2NhbGFyKG1hdHJpeC5tMzEoKSkpOworICAgIHNrTWF0cml4LnNldCgxLCAyLCBTa0RvdWJs
ZVRvTVNjYWxhcihtYXRyaXgubTMyKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMiwgMiwgU2tEb3Vi
bGVUb01TY2FsYXIobWF0cml4Lm0zMygpKSk7CisgICAgc2tNYXRyaXguc2V0KDMsIDIsIFNrRG91
YmxlVG9NU2NhbGFyKG1hdHJpeC5tMzQoKSkpOworICAgIHNrTWF0cml4LnNldCgwLCAzLCBTa0Rv
dWJsZVRvTVNjYWxhcihtYXRyaXgubTQxKCkpKTsKKyAgICBza01hdHJpeC5zZXQoMSwgMywgU2tE
b3VibGVUb01TY2FsYXIobWF0cml4Lm00MigpKSk7CisgICAgc2tNYXRyaXguc2V0KDIsIDMsIFNr
RG91YmxlVG9NU2NhbGFyKG1hdHJpeC5tNDMoKSkpOworICAgIHNrTWF0cml4LnNldCgzLCAzLCBT
a0RvdWJsZVRvTVNjYWxhcihtYXRyaXgubTQ0KCkpKTsKKyAgICByZXR1cm4gc2tNYXRyaXg7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
TGF5ZXIgV2ViTGF5ZXI6OmNyZWF0ZShXZWJMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJl
dHVybiBXZWJMYXllcihXZWJMYXllckltcGw6OmNyZWF0ZShjbGllbnQpKTsKK30KKworV2ViTGF5
ZXI6On5XZWJMYXllcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVz
ZXQoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCit2b2lkIFdlYkxheWVyOjphc3Np
Z24oY29uc3QgV2ViTGF5ZXImIG90aGVyKQoreworICAgIG1fcHJpdmF0ZSA9IG90aGVyLm1fcHJp
dmF0ZTsKK30KKworYm9vbCBXZWJMYXllcjo6ZXF1YWxzKGNvbnN0IFdlYkxheWVyJiBuKSBjb25z
dAoreworICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsK
K30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6OnJvb3RMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdlYkxheWVyKGNvbnN0X2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cm9vdExheWVy
KCkpKTsKK30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkxheWVyKGNvbnN0X2Nhc3Q8TGF5ZXJDaHJvbWl1bSo+KG1fcHJpdmF0ZS0+cGFyZW50
KCkpKTsKK30KKwordm9pZCBXZWJMYXllcjo6YWRkQ2hpbGQoY29uc3QgV2ViTGF5ZXImIGNoaWxk
KQoreworICAgIG1fcHJpdmF0ZS0+YWRkQ2hpbGQoY2hpbGQpOworfQorCit2b2lkIFdlYkxheWVy
OjppbnNlcnRDaGlsZChjb25zdCBXZWJMYXllciYgY2hpbGQsIHNpemVfdCBpbmRleCkKK3sKKyAg
ICBtX3ByaXZhdGUtPmluc2VydENoaWxkKGNoaWxkLCBpbmRleCk7Cit9CisKK3ZvaWQgV2ViTGF5
ZXI6OnJlcGxhY2VDaGlsZChjb25zdCBXZWJMYXllciYgcmVmZXJlbmNlLCBjb25zdCBXZWJMYXll
ciYgbmV3TGF5ZXIpCit7CisgICAgV2ViTGF5ZXIgcmVmID0gcmVmZXJlbmNlOworICAgIG1fcHJp
dmF0ZS0+cmVwbGFjZUNoaWxkKHJlZi51bndyYXA8TGF5ZXJDaHJvbWl1bT4oKSwgbmV3TGF5ZXIp
OworfQorCit2b2lkIFdlYkxheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBtX3ByaXZh
dGUtPnJlbW92ZUZyb21QYXJlbnQoKTsKK30KKwordm9pZCBXZWJMYXllcjo6cmVtb3ZlQWxsQ2hp
bGRyZW4oKQoreworICAgIG1fcHJpdmF0ZS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKK30KKwordm9p
ZCBXZWJMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgV2ViRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpCit7CisgICAgbV9wcml2YXRlLT5zZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7Cit9CisK
K1dlYkZsb2F0UG9pbnQgV2ViTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV2ViRmxvYXRQb2ludChtX3ByaXZhdGUtPmFuY2hvclBvaW50KCkpOworfQorCit2b2lkIFdl
YkxheWVyOjpzZXRBbmNob3JQb2ludFooZmxvYXQgYW5jaG9yUG9pbnRaKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0QW5jaG9yUG9pbnRaKGFuY2hvclBvaW50Wik7Cit9CisKK2Zsb2F0IFdlYkxheWVy
OjphbmNob3JQb2ludFooKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFuY2hvclBv
aW50WigpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRCb3VuZHMoY29uc3QgV2ViU2l6ZSYgc2l6
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvdW5kcyhzaXplKTsKK30KKworV2ViU2l6ZSBXZWJM
YXllcjo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPmJv
dW5kcygpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIG1hc2tz
VG9Cb3VuZHMpCit7CisgICAgbV9wcml2YXRlLT5zZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9Cb3Vu
ZHMpOworfQorCitib29sIFdlYkxheWVyOjptYXNrc1RvQm91bmRzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tYXNrc1RvQm91bmRzKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXI6OnNl
dE1hc2tMYXllcihjb25zdCBXZWJMYXllciYgbWFza0xheWVyKQoreworICAgIFdlYkxheWVyIHJl
ZiA9IG1hc2tMYXllcjsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zZXRNYXNrTGF5ZXIocmVmLnVu
d3JhcDxMYXllckNocm9taXVtPigpKTsKK30KKworV2ViTGF5ZXIgV2ViTGF5ZXI6Om1hc2tMYXll
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkxheWVyKG1fcHJpdmF0ZS0+bWFza0xheWVyKCkp
OworfQorCit2b2lkIFdlYkxheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAg
bV9wcml2YXRlLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCitmbG9hdCBXZWJMYXllcjo6b3Bh
Y2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+b3BhY2l0eSgpOworfQorCit2
b2lkIFdlYkxheWVyOjpzZXRPcGFxdWUoYm9vbCBvcGFxdWUpCit7CisgICAgbV9wcml2YXRlLT5z
ZXRPcGFxdWUob3BhcXVlKTsKK30KKworYm9vbCBXZWJMYXllcjo6b3BhcXVlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5vcGFxdWUoKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0
UG9zaXRpb24oY29uc3QgV2ViRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wcml2YXRl
LT5zZXRQb3NpdGlvbihwb3NpdGlvbik7Cit9CisKK1dlYkZsb2F0UG9pbnQgV2ViTGF5ZXI6OnBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViRmxvYXRQb2ludChtX3ByaXZhdGUtPnBv
c2l0aW9uKCkpOworfQorCit2b2lkIFdlYkxheWVyOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25z
dCBTa01hdHJpeDQ0JiBtYXRyaXgpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdWJsYXllclRyYW5z
Zm9ybSh0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0KG1hdHJpeCkpOworfQorCitT
a01hdHJpeDQ0IFdlYkxheWVyOjpzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHNrTWF0cml4NDRGcm9tVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wcml2YXRlLT5zdWJsYXll
clRyYW5zZm9ybSgpKTsKK30KKwordm9pZCBXZWJMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFNr
TWF0cml4NDQmIG1hdHJpeCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFRyYW5zZm9ybSh0cmFuc2Zv
cm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0KG1hdHJpeCkpOworfQorCitTa01hdHJpeDQ0IFdl
YkxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBza01hdHJpeDQ0RnJvbVRy
YW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+dHJhbnNmb3JtKCkpOworfQorCitXZWJMYXll
cjo6V2ViTGF5ZXIoY29uc3QgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiYgbm9kZSkKKyAgICA6
IG1fcHJpdmF0ZShub2RlKQoreworfQorCitXZWJMYXllciYgV2ViTGF5ZXI6Om9wZXJhdG9yPShj
b25zdCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+JiBub2RlKQoreworICAgIG1fcHJpdmF0ZSA9
IG5vZGU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJMYXllcjo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxMYXllckNocm9taXVtPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTgxMzIxZWQyMGVkZDg4MmFjMDcyMTA2
ZjIzYzNhNTNlNWUyOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViTGF5
ZXJDbGllbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitQYXNzUmVmUHRyPFdlYkxheWVySW1wbD4gV2ViTGF5ZXJJbXBsOjpjcmVhdGUoV2Vi
TGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkxheWVy
SW1wbChjbGllbnQpKTsKK30KKworV2ViTGF5ZXJJbXBsOjpXZWJMYXllckltcGwoV2ViTGF5ZXJD
bGllbnQqIGNsaWVudCkgOiBMYXllckNocm9taXVtKHRoaXMpLCBtX2NsaWVudChjbGllbnQpCit7
Cit9CisKK1dlYkxheWVySW1wbDo6fldlYkxheWVySW1wbCgpCit7Cit9CisKK2Jvb2wgV2ViTGF5
ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBXZWJMYXllckltcGw6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYgY2xpcCkKK3sKK30KKwordm9pZCBXZWJMYXllckltcGw6Om5vdGlmeVN5bmNSZXF1
aXJlZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5TmVl
ZHNDb21wb3NpdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1OGQ0MWI1Y2RlMWE4NDg3
MDJjYWQwZjM3NTEyYzg5MTE1NTExMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllckltcGwuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJMYXllckltcGxfaAorI2RlZmluZSBXZWJMYXllckltcGxfaAorCisjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgV2ViTGF5ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkxheWVySW1wbCA6
IHB1YmxpYyBXZWJDb3JlOjpMYXllckNocm9taXVtLCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllckRl
bGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXllckltcGw+IGNy
ZWF0ZShXZWJMYXllckNsaWVudCopOworCitwcm90ZWN0ZWQ6CisgICAgV2ViTGF5ZXJJbXBsKFdl
YkxheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+V2ViTGF5ZXJJbXBsKCk7CisgICAgdmlydHVh
bCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRl
bnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXApOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoKTsKKworICAgIFdlYkxh
eWVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViTGF5ZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdkYjFhZTBiODk5MjA2YjRiYmQ2MzcyODMz
YWU1YjYwYjYwMGNhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZVZpZXcuaCIKKworI2luY2x1ZGUg
IldlYkxheWVyVHJlZVZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CitXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NT
ZXR0aW5ncygpIGNvbnN0Cit7CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBzZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBhY2NlbGVyYXRlUGFpbnRpbmc7CisgICAgc2V0dGluZ3Mu
Y29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9zaXRlT2Zmc2NyZWVuOworCisgICAgLy8gRklYTUU6
IGNvbXBvc2l0b3IgdGhyZWFkIGlzbid0IHN1cHBvcnRlZCBjdXJyZW50bHkuCisgICAgc2V0dGlu
Z3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IGZhbHNlOworCisgICAgLy8gRklYTUU6IHNob3dG
UFNDb3VudGVyIC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIGFyZW4ndCBzdXBwb3J0ZWQgY3VycmVu
dGx5LgorICAgIHNldHRpbmdzLnNob3dGUFNDb3VudGVyID0gZmFsc2U7CisgICAgc2V0dGluZ3Mu
c2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gZmFsc2U7CisgICAgcmV0dXJuIHNldHRpbmdzOworfQor
CitXZWJMYXllclRyZWVWaWV3IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZShXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJMYXllclRy
ZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgcmV0dXJuIFdlYkxheWVyVHJlZVZp
ZXcoV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZShjbGllbnQsIHJvb3QsIHNldHRpbmdzKSk7
Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6cmVzZXQoKQoreworICAgIG1fcHJpdmF0ZS5y
ZXNldCgpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OmFzc2lnbihjb25zdCBXZWJMYXll
clRyZWVWaWV3JiBvdGhlcikKK3sKKyAgICBtX3ByaXZhdGUgPSBvdGhlci5tX3ByaXZhdGU7Cit9
CisKK2Jvb2wgV2ViTGF5ZXJUcmVlVmlldzo6ZXF1YWxzKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcm
IG4pIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3ByaXZhdGUuZ2V0KCkgPT0gbi5tX3ByaXZhdGUu
Z2V0KCkpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSgpCit7CisjaWYg
IVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX3ByaXZhdGUtPmNvbXBvc2l0ZSgpOwor
I2VuZGlmCit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRTaXplKGNvbnN0
IFdlYlNpemUmIHZpZXdwb3J0U2l6ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFZpZXdwb3J0KHZp
ZXdwb3J0U2l6ZSk7Cit9CisKK1dlYlNpemUgV2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPnZpZXdwb3J0U2l6ZSgp
KTsKK30KKworV2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyhjb25zdCBQYXNzUmVm
UHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCisgICAgOiBtX3ByaXZhdGUobm9kZSkKK3sKK30K
KworV2ViTGF5ZXJUcmVlVmlldyYgV2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0b3I9KGNvbnN0IFBh
c3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKK3sKKyAgICBtX3ByaXZhdGUgPSBub2Rl
OworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0b3IgUGFz
c1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTRi
OWIwZjM2MGExM2NhZGY0YWZmNzZkMGE3ZmFjNmZjYTgzZDJiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkxh
eWVyVHJlZVZpZXdJbXBsLmgiCisKKyNpbmNsdWRlICJDQ1RocmVhZEltcGwuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJMYXllci5o
IgorI2luY2x1ZGUgIldlYkxheWVyVHJlZVZpZXcuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVW
aWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgIldlYlRocmVhZC5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bh
c3NSZWZQdHI8V2ViTGF5ZXJUcmVlVmlld0ltcGw+IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVh
dGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwg
Y29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIFJlZlB0
cjxXZWJMYXllclRyZWVWaWV3SW1wbD4gaG9zdCA9IGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVW
aWV3SW1wbChjbGllbnQsIHJvb3QsIHNldHRpbmdzKSk7CisgICAgaWYgKCFob3N0LT5pbml0aWFs
aXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBob3N0OworfQorCitXZWJMYXll
clRyZWVWaWV3SW1wbDo6V2ViTGF5ZXJUcmVlVmlld0ltcGwoV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6
U2V0dGluZ3MmIHNldHRpbmdzKSAKKyAgICA6IENDTGF5ZXJUcmVlSG9zdCh0aGlzLCByb290LCBz
ZXR0aW5ncykKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2ViTGF5ZXJUcmVlVmll
d0ltcGw6On5XZWJMYXllclRyZWVWaWV3SW1wbCgpCit7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVl
Vmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjphcHBseVNjcm9sbERl
bHRhKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPmFwcGx5U2Nyb2xsRGVsdGEoV2ViU2l6ZShkZWx0YSkpOworfQor
CitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0
ID0gYWRvcHRQdHIobV9jbGllbnQtPmNyZWF0ZUNvbnRleHQzRCgpKTsKKyAgICBpZiAoIXdlYkNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgd2ViQXR0cmlidXRlcyA9IHdlYkNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVz
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBh
dHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsKKyAgICBhdHRyaWJ1dGVzLmRl
cHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKKyAgICBhdHRyaWJ1dGVzLnN0ZW5jaWwgPSB3ZWJB
dHRyaWJ1dGVzLnN0ZW5jaWw7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSB3ZWJBdHRyaWJ1
dGVzLmFudGlhbGlhczsKKyAgICBhdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHdlYkF0
dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOworICAgIGF0dHJpYnV0ZXMuY2FuUmVjb3ZlckZy
b21Db250ZXh0TG9zcyA9IHdlYkF0dHJpYnV0ZXMuY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zczsK
KyAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHdlYkF0dHJpYnV0ZXMubm9FeHRlbnNpb25z
OworICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSB3ZWJBdHRyaWJ1dGVzLnNoYXJlUmVz
b3VyY2VzOworICAgIGF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gZmFsc2U7CisK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgc3R5bGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3c7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpUaHJlYWRVc2FnZSB1c2FnZSA9IHNldHRpbmdzKCkuZW5hYmxlQ29tcG9zaXRvclRo
cmVhZCA/IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25Bbm90aGVyVGhyZWFkIDog
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQ7CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIGF0dHJpYnV0ZXMsIDAsIHN0eWxlLCB1c2FnZSk7
Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KGJvb2wgc3VjY2VzcykKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5kaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7Cit9CisKKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6c2NoZWR1bGVDb21w
b3NpdGUoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxl
Q29tcG9zaXRlKCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kNWYyYTllOGI0MzNmYTBjNjY5YzU0NjVkMGFlM2QwMTJkMjQ0YjMwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwu
aApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJMYXllclRyZWVWaWV3SW1wbF9o
CisjZGVmaW5lIFdlYkxheWVyVHJlZVZpZXdJbXBsX2gKKworI2luY2x1ZGUgIldlYkxheWVyVHJl
ZVZpZXcuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkxheWVyOworY2xh
c3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKKworY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0ltcGwg
OiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0LCBwdWJsaWMgV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJMYXll
clRyZWVWaWV3SW1wbD4gY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJM
YXllciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmKTsKKworcHJpdmF0
ZToKKyAgICBXZWJMYXllclRyZWVWaWV3SW1wbChXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29u
c3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJik7Cisg
ICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlVmlld0ltcGwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBh
cHBseVNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
Ym9vbCBzdWNjZXNzKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCisKKyAgICBXZWJMYXllclRyZWVW
aWV3Q2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViTGF5ZXJUcmVlVmlld0ltcGxfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>