<?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>82478</bug_id>
          
          <creation_ts>2012-03-28 10:23:06 -0700</creation_ts>
          <short_desc>Add Prerenderer and PrerenderHandle for signaling on &lt;link rel=prerender ..&gt; elements.</short_desc>
          <delta_ts>2013-10-29 10:29:53 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Peters">gavinp</reporter>
          <assigned_to name="Gavin Peters">gavinp</assigned_to>
          <cc>7raivis</cc>
    
    <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>cbentzel</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>kpiascik</cc>
    
    <cc>michaeln</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590095</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-03-28 10:23:06 -0700</bug_when>
    <thetext>The prerender case isn&apos;t quite a resource load, and using resource loading to retrieve them has constrained the API.

The new Prerenderer and PrerenderHandle let &lt;link rel=prerender&gt; elements signal removal and unload to their loading platform.  Coming soon, I&apos;d like to add events back from the prerendered page to the element, such as load, abort and error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590224</commentid>
    <comment_count>1</comment_count>
      <attachid>134359</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-03-28 12:00:26 -0700</bug_when>
    <thetext>Created attachment 134359
First upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590238</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-03-28 12:09:36 -0700</bug_when>
    <thetext>Adam,

Here&apos;s my first upload.  This is a significant enough change that I probably should announce to WebKit dev; I&apos;d like to do that after you give it a first pass over to eliminate the crazy.

To land this, I believe I&apos;ll have to stage it in at least two commits; the first to move WebReferrerPolicy.h to platform/ (and create a file in public that includes it), and the second will be something like this patch.

For the chromium side of this, and more discussion of staging, see http://codereview.chromium.org/9875026/

Adam: WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590248</commentid>
    <comment_count>3</comment_count>
      <attachid>134359</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-03-28 12:13:41 -0700</bug_when>
    <thetext>Comment on attachment 134359
First upload

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

&gt; Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h:419
&gt; +    // Link Prerender

Two things about these functions.  First: I think I&apos;ll need to make a WebPrerenderer object fairly soon, to handle events arriving from the platform up to the prerender link elements.  Second: I really don&apos;t like passing a WebView* here; it&apos;s required given the way that WebStorageNamespace works right now; as soon as I can, I&apos;ll try and pass it that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590360</commentid>
    <comment_count>4</comment_count>
      <attachid>134359</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 13:38:42 -0700</bug_when>
    <thetext>Comment on attachment 134359
First upload

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

&gt; Source/WebCore/loader/LinkLoader.cpp:148
&gt; +void LinkLoader::removedFromDocument()

I would have picked a different name here.  The LinkLoader isn&apos;t being removed from any document.  Perhaps LinkLoader::cancelPrerender()?  I guess there&apos;s a subtly in that we might not have any prerenders to cancel...  Maybe didRemoveLinkElementFromDocument ?

&gt; Source/WebCore/loader/LinkLoader.cpp:152
&gt; +        m_prerenderHandle-&gt;removedFromDocument();

At this point, though, we shouldn&apos;t be talking about documents anymore.  Perhaps cancel() or abort() ?  I&apos;m not sure which is idiomatic.

&gt; Source/WebCore/loader/LinkLoader.h:73
&gt; +#endif // ENABLE(LINK_PRERENDER)

You can skip the comment on the closing comment for these short #ifdefs.

&gt; Source/WebCore/loader/Prerenderer.h:50
&gt; +    Prerenderer(Document*);

Please add the explicit keyword.

&gt; Source/WebCore/loader/Prerenderer.h:59
&gt; +    const Document* m_document;

Why do you need a pointer fo the document?  ActiveDOMObject has a scriptExecutionContext() member already.

&gt; Source/WebCore/platform/PrerenderHandle.h:45
&gt; +    PrerenderHandle(int id);

Please add the explicit keyword.

&gt; Source/WebCore/platform/PrerenderHandle.h:49
&gt; +    void removedFromDocument();
&gt; +    void unloaded();

We should phrase these more as instructions to the platform layer.  removedFromDocument and unloaded are higher-level concepts.

&gt;&gt; Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h:419
&gt;&gt; +    // Link Prerender
&gt; 
&gt; Two things about these functions.  First: I think I&apos;ll need to make a WebPrerenderer object fairly soon, to handle events arriving from the platform up to the prerender link elements.  Second: I really don&apos;t like passing a WebView* here; it&apos;s required given the way that WebStorageNamespace works right now; as soon as I can, I&apos;ll try and pass it that way.

Yeah, you can&apos;t pass a WebView* here.  That&apos;s not right.  I don&apos;t understand the connection with WebStorageNamespace.

Generally, we make the embedder to the work with IDs and instead phrase the WebKit API in in terms of objects.  For example, the first of these methods so be createPrerenderer, analogous to createURLLoader.  At this point, the word &quot;link&quot; shouldn&apos;t appear.  Nothing here has anything to do with links any more.  We&apos;re just talking about prerendering URLs and canceling them.

&gt; Source/WebKit/chromium/src/Prerenderer.cpp:60
&gt; +Prerenderer::Prerenderer(Document* document)

This object should be in WebCore.  The &quot;Handle&quot; object is the only one that needs to be in the WebKit layer.  Note: I&apos;m working separately to refactor things so that we don&apos;t need to have any of this code in the WebKit layer, but that&apos;s still a bit off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590510</commentid>
    <comment_count>5</comment_count>
      <attachid>134359</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-03-28 15:23:27 -0700</bug_when>
    <thetext>Comment on attachment 134359
First upload

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

&gt;&gt;&gt; Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h:419
&gt;&gt;&gt; +    // Link Prerender
&gt;&gt; 
&gt;&gt; Two things about these functions.  First: I think I&apos;ll need to make a WebPrerenderer object fairly soon, to handle events arriving from the platform up to the prerender link elements.  Second: I really don&apos;t like passing a WebView* here; it&apos;s required given the way that WebStorageNamespace works right now; as soon as I can, I&apos;ll try and pass it that way.
&gt; 
&gt; Yeah, you can&apos;t pass a WebView* here.  That&apos;s not right.  I don&apos;t understand the connection with WebStorageNamespace.
&gt; 
&gt; Generally, we make the embedder to the work with IDs and instead phrase the WebKit API in in terms of objects.  For example, the first of these methods so be createPrerenderer, analogous to createURLLoader.  At this point, the word &quot;link&quot; shouldn&apos;t appear.  Nothing here has anything to do with links any more.  We&apos;re just talking about prerendering URLs and canceling them.

You may want to consider moving these three methods into WebView/WebViewClient interfaces instead of having them here since they&apos;re dependent on the context containing the &lt;link&gt;. The impls of WebViewClient in chromium should have an easier time of dealing with the statefulness you have to deal with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591427</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-03-29 12:18:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 134359 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134359&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h:419
&gt; &gt;&gt;&gt; +    // Link Prerender
&gt; &gt;&gt; 
&gt; &gt;&gt; Two things about these functions.  First: I think I&apos;ll need to make a WebPrerenderer object fairly soon, to handle events arriving from the platform up to the prerender link elements.  Second: I really don&apos;t like passing a WebView* here; it&apos;s required given the way that WebStorageNamespace works right now; as soon as I can, I&apos;ll try and pass it that way.
&gt; &gt; 
&gt; &gt; Yeah, you can&apos;t pass a WebView* here.  That&apos;s not right.  I don&apos;t understand the connection with WebStorageNamespace.
&gt; &gt; 
&gt; &gt; Generally, we make the embedder to the work with IDs and instead phrase the WebKit API in in terms of objects.  For example, the first of these methods so be createPrerenderer, analogous to createURLLoader.  At this point, the word &quot;link&quot; shouldn&apos;t appear.  Nothing here has anything to do with links any more.  We&apos;re just talking about prerendering URLs and canceling them.
&gt; 
&gt; You may want to consider moving these three methods into WebView/WebViewClient interfaces instead of having them here since they&apos;re dependent on the context containing the &lt;link&gt;. The impls of WebViewClient in chromium should have an easier time of dealing with the statefulness you have to deal with.

I&apos;m looking at this now.  I also might just add a WebPrerender class; it will be minimal now, but important later when we start sending events to the prerender link elements.  Thanks for the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591570</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 14:31:30 -0700</bug_when>
    <thetext>By the way, you should be able to call directly from WebCore/platform into interfaces defined on http://trac.webkit.org/browser/trunk/Source/Platform/chromium/public/Platform.h

I&apos;m about to move ResourceHandle from the WebKit layer into WebCore/platform/network:

https://bugs.webkit.org/show_bug.cgi?id=82657

It&apos;s very new pattern, but hopefully should remove some of the boilerplate &quot;plumbing&quot; in your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596596</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-04-05 08:36:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 134359 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134359&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/LinkLoader.cpp:148
&gt; &gt; +void LinkLoader::removedFromDocument()
&gt; 
&gt; I would have picked a different name here.  The LinkLoader isn&apos;t being removed from any document.  Perhaps LinkLoader::cancelPrerender()?  I guess there&apos;s a subtly in that we might not have any prerenders to cancel...  Maybe didRemoveLinkElementFromDocument ?

I went with something simpler, but possibly too general: released(); that then may become a call to PrerenderHandle::cancel(), as appropriate.  I&apos;m on the fence and I could easily be talked into didRemoveLinkElementFromDocument().  I had release(), but that was too confusing compared to a RefPtr: but then maybe it&apos;s not?  It is something very similar.

&gt; 
&gt; &gt; Source/WebCore/loader/LinkLoader.cpp:152
&gt; &gt; +        m_prerenderHandle-&gt;removedFromDocument();
&gt; 
&gt; At this point, though, we shouldn&apos;t be talking about documents anymore.  Perhaps cancel() or abort() ?  I&apos;m not sure which is idiomatic.

add/cancel/abandon is what I went with.  add and not start, since it&apos;s up to the platform&apos;s prerender manager to decide which prerenders even are allowed to start.

&gt; 
&gt; &gt; Source/WebCore/loader/LinkLoader.h:73
&gt; &gt; +#endif // ENABLE(LINK_PRERENDER)
&gt; 
&gt; You can skip the comment on the closing comment for these short #ifdefs.
&gt; 

Done.

&gt; &gt; Source/WebCore/loader/Prerenderer.h:50
&gt; &gt; +    Prerenderer(Document*);
&gt; 
&gt; Please add the explicit keyword.
&gt; 

Done.

&gt; &gt; Source/WebCore/loader/Prerenderer.h:59
&gt; &gt; +    const Document* m_document;
&gt; 
&gt; Why do you need a pointer fo the document?  ActiveDOMObject has a scriptExecutionContext() member already.
&gt; 

I do not.  Removed: it was bad practice, I concur.

&gt; &gt; Source/WebCore/platform/PrerenderHandle.h:45
&gt; &gt; +    PrerenderHandle(int id);
&gt; 
&gt; Please add the explicit keyword.
&gt; 

Mooted.

&gt; &gt; Source/WebCore/platform/PrerenderHandle.h:49
&gt; &gt; +    void removedFromDocument();
&gt; &gt; +    void unloaded();
&gt; 
&gt; We should phrase these more as instructions to the platform layer.  removedFromDocument and unloaded are higher-level concepts.
&gt; 
&gt; &gt;&gt; Source/WebKit/chromium/public/platform/WebKitPlatformSupport.h:419
&gt; &gt;&gt; +    // Link Prerender
&gt; &gt; 
&gt; &gt; Two things about these functions.  First: I think I&apos;ll need to make a WebPrerenderer object fairly soon, to handle events arriving from the platform up to the prerender link elements.  Second: I really don&apos;t like passing a WebView* here; it&apos;s required given the way that WebStorageNamespace works right now; as soon as I can, I&apos;ll try and pass it that way.
&gt; 
&gt; Yeah, you can&apos;t pass a WebView* here.  That&apos;s not right.  I don&apos;t understand the connection with WebStorageNamespace.
&gt; 
&gt; Generally, we make the embedder to the work with IDs and instead phrase the WebKit API in in terms of objects.  For example, the first of these methods so be createPrerenderer, analogous to createURLLoader.  At this point, the word &quot;link&quot; shouldn&apos;t appear.  Nothing here has anything to do with links any more.  We&apos;re just talking about prerendering URLs and canceling them.
&gt; 

So, I went and added a lot of plumbing in response to this, and I&apos;m really on the fence about it.  I created a PrerenderClient, and a corresponding WebPrerendererClient, which gets a WebPrerender, and adds some platform-renderer specific information to the prerender; the requestor ID and the size.  However, the only thing the requestor is used for is to, in the prerender manager to find the session storage namespace associated with the requestor (since the prerender needs to use the same session storage namespace).

Can we simplify this some?  I keep leaning towards not needing a requestor ID; I&apos;d then need to pass a WebStorageNamespace* with the prerender commands, and then move that to an ID, and then from that ID back at the prerender_manager, find the correct session storage namespace object.  None of that&apos;s awful, and maybe preferable to the plumbing I created for WebPrerenderClient?

(Also: would WebViewClient be a better place for willAddPrerender()???)

michaeln: I especially welcome your suggestions here?

The next thing I need to think about is events coming down to the HTMLLinkElement from the prerender manager in the platform.  I have given this some, but not enough consideration: I&apos;m going to spend some time hacking up a patch in that vein, so that I can be sure I haven&apos;t painted myself into any corners here.

&gt; &gt; Source/WebKit/chromium/src/Prerenderer.cpp:60
&gt; &gt; +Prerenderer::Prerenderer(Document* document)
&gt; 
&gt; This object should be in WebCore.  The &quot;Handle&quot; object is the only one that needs to be in the WebKit layer.  Note: I&apos;m working separately to refactor things so that we don&apos;t need to have any of this code in the WebKit layer, but that&apos;s still a bit off.

I have integrated with your patches, which have since landed.  I think they did simplify my coding quite a bit.  Let me know if I continue to not quite get the layers...

Also, the existing chrome CL will get an upload soon that includes the changes here.  I&apos;ll notify on bug when that happens, for anyone who wants a 360 view of this.


I have made an upload of changes that meet this remediation in https://github.com/gavinp/git.webkit.org/pull/1 ; a pull request on my clone of git.webkit.org: would you like to go over there and continue to look at it, or have me upload here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597467</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-06 10:38:17 -0700</bug_when>
    <thetext>&gt; I have made an upload of changes that meet this remediation in https://github.com/gavinp/git.webkit.org/pull/1 ; a pull request on my clone of git.webkit.org: would you like to go over there and continue to look at it, or have me upload here?

I&apos;ve left you a bunch of comments on the pull request.  IMHO, the first thing we should do is break the change down into smaller pieces.  For example, splitting the ReferrerPolicy and the ENABLE macro changes into separate patches (and probably landing them).

As for how to associate the request with the session storage identifier, that&apos;s less clear.  It&apos;s a somewhat common problem in the WebKit API that we don&apos;t have a good solution for yet.  For now, I&apos;d use the willPrerenderURL client callback since that mirrors what we do in the rest of the loader with willSendRequest.

It&apos;s important to remove the prerender IDs from WebKit through.  The WebKit API is object-based, even though the embedder often uses IDs to refer to objects because the embedder uses multiple processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598076</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-04-08 17:12:22 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; I have made an upload of changes that meet this remediation in https://github.com/gavinp/git.webkit.org/pull/1 ; a pull request on my clone of git.webkit.org: would you like to go over there and continue to look at it, or have me upload here?
&gt; 
&gt; I&apos;ve left you a bunch of comments on the pull request.  IMHO, the first thing we should do is break the change down into smaller pieces.  For example, splitting the ReferrerPolicy and the ENABLE macro changes into separate patches (and probably landing them).

Thanks a TON for those comments!  I&apos;m working hard on a better upload; I&apos;ve already started a new pull request, https://github.com/gavinp/git.webkit.org/pull/2 in which I&apos;ve created four distinct commits, doing this in parts like you suggested.  However, your more substantive architectural suggestions are still pending: I&apos;ll ping this bug when I think that pull request is worthy of a review.

&gt; 
&gt; As for how to associate the request with the session storage identifier, that&apos;s less clear.  It&apos;s a somewhat common problem in the WebKit API that we don&apos;t have a good solution for yet.  For now, I&apos;d use the willPrerenderURL client callback since that mirrors what we do in the rest of the loader with willSendRequest.

That&apos;s an interesting answer...  And I think it causes me to think: let&apos;s just leave the requestor ID as part of what&apos;s set (along with the size) in the willPrerender... callback.  That&apos;s sufficient, and works for what we&apos;re doing, so I&apos;m going to count my musings above as satisfied by that answer.

&gt; It&apos;s important to remove the prerender IDs from WebKit through.  The WebKit API is object-based, even though the embedder often uses IDs to refer to objects because the embedder uses multiple processes.

My next upload will reflect this.  Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598740</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-04-09 16:36:18 -0700</bug_when>
    <thetext>Hi Gavin,

Not sure this is the sort of feedback you were looking for, but here goes...

An obvious high level question that&apos;s really easy to escape being asked given all the energy put into api layer traveral... what happens if we&apos;re given the same url to be prerendered twice?
  &lt;link type=prerender url=foo&gt;
  &lt;link type=prerender url=foo&gt;

About the code itelf... I&apos;ve made a list of the classes involved with short notes about each below to try to get a better understanding of things.

---- sketchy notes ----

// webkit::Platform
// ultimately the handful of outputs your interested in getting from the
// bowls of webcore when &lt;link type=prerender&gt; come and go so you know
// when to start/stop prerendering pages.
void addPrerender(...)
void cancelPrerender(...)
void abortPrerender(...)

// webkit
WebPrerender
  - odd struct that doesn&apos;t reflect the url of the resource to be prerendered
WebPrerendererClient
  - has a willAddPrerender method
  - WebView has one of these guys presumably implemented in chromium svn code
    (+1 that client)

// loader
Prerenderer
  - a per-document active dom object thing that produces a PrerenderHandle,
  a refcounted wrapper around a Prerender, and tells the PrerenderClient about
  them
PrerenderClient 
  - a platform specific impl that in chromium bridges out thru WebPrerenderClient
  - seems like in practical terms, the &apos;client&apos; is the actual prerenderer since
    the Prerender class really doesn&apos;t do much besides call it

// platform (chromium specific impls in webcore)
Prerender
PrerenderHandle (LinkLoader uses the handle)
  - a refcounted wrapper around a Prerender
  - LinkLoader uses the handle
  Q: Should document-&gt;prerenderer() be involved with LinkLoader
  calls to cancel, the &apos;handle&apos; will still be in it&apos;s collection of handles
  otherwise?
  Q: What&apos;s the benefit of the wrapper? I&apos;m wondering if this could be flattened out.

----

So that&apos;s ~7 classes (if you allow me to count the additions to webkit::Platform as a class).

I understand you&apos;ll want to add support for events that originate in the backend and are raised on pages containing prerender &lt;links&gt;, so you&apos;ll need to support calling back into webcore in addition to calling out from webcore. That will undoubetly bump up the number of classes and interfaces (perhaps double it).

I cant help but wonder if we can flatten the api layer traversal out and simplify things. I like fewer moving parts. With that in mind...

* Given the WebPrerenderClient that has knowlege of its containing WebView (including its size and session storage namespace id), it seems like the methods on webkit::Platform could be replace with methods on that client that don&apos;t have to accept size and id params.

* The way i understand this, you basically have two classes, the Prerenderer and PrerenderItems, where the Prerenderer is used as a factory of Items by the &lt;link&gt; handling world. (fwiw, in reading the code it was easy to not notice the distcintion between prerender and prerender&apos;er&apos;).

* Can the WebCore Prerenderer and PrerenderClient classes be collapsed into a single class? WebCore::Prerenderer.

* Can the WebCore Prerender and PrerenderHandle classes be collapsed into a single class? WebCore::PrerenderItem.

// Interface impelemented by the embedder.
// Chromium&apos;s impl of WebCore::Prerender calls out via this interface.
class WebPrerenderClient {
  // The caller should delete to cancel/abort prerendering.
  // It&apos;s assumed that the impl of this interface has knowlege
  // of the containing document&apos;s size referrer, session storage ids etc.
  WebPrerenderItem* createPrerenderItem(url);
};

// Also implemented by the embedder.
// Chromium&apos;s impl of WebCore::PrerenderItem is basically a wrapper over
// this.
class WebPrerenderItem {
  // Deletion causes the prerendering to be stopped.
  ~WebPrerenderItem ();
};


I&apos;m pretty confident the wekit keepers will not like the direction those question suggest (layering violation, right), but i gotta question the value of obscure layers of indirection imposed on bridging in and out between webcore and chromium. Consider... it&apos;s easy to see how support for events might be added in the simplified system design (make a WebPrerenderItemClient interface whose methods get called when an event should be raised, have WebCore::PrerenderItem get called thru that interface). Not so easty to say the same about the more complicated set of classes and interfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598811</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-04-09 17:51:48 -0700</bug_when>
    <thetext>You might want to call it plain WebPrerenderer since that&apos;s what it does.

&gt; // Interface impelemented by the embedder.
&gt; // Chromium&apos;s impl of WebCore::Prerender calls out via this interface.
&gt; class WebPrerenderClient {
&gt;   // The caller should delete to cancel/abort prerendering.
&gt;   // It&apos;s assumed that the impl of this interface has knowlege
&gt;   // of the containing document&apos;s size referrer, session storage ids etc.
&gt;   WebPrerenderItem* createPrerenderItem(url);
&gt; };
&gt; 
&gt; // Also implemented by the embedder.
&gt; // Chromium&apos;s impl of WebCore::PrerenderItem is basically a wrapper over
&gt; // this.
&gt; class WebPrerenderItem {
&gt;   // Deletion causes the prerendering to be stopped.
&gt;   ~WebPrerenderItem ();
&gt; };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601470</commentid>
    <comment_count>13</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-04-12 13:13:49 -0700</bug_when>
    <thetext>I have just finished another upload on this patch; it&apos;s on github at https://github.com/gavinp/git.webkit.org/pull/2

This patch improves on the previous upload in a few ways.

* It&apos;s broken down into 7 commits, particularly moving a lot of boilerplate, and the removal of the old phantom-load facility out into distinct commits.  The last commit in the chain is still large, though, but at least it&apos;s topical.
* I used an ExtraData pattern to allow the WebPrerendererClient to save platform data in the prerender.  Now the WebCore prerender object is only aware of WebCore data from the LinkLoader.
* The clients are now passed properly from WebKit down into WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601549</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-12 14:32:55 -0700</bug_when>
    <thetext>I left Gavin some comments on the pull request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601566</commentid>
    <comment_count>15</comment_count>
      <attachid>134359</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-04-12 14:56:09 -0700</bug_when>
    <thetext>Comment on attachment 134359
First upload

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

&gt; Source/WebKit/mac/Configurations/FeatureDefines.xcconfig:93
&gt;  ENABLE_MATHML = ENABLE_MATHML;

If you&apos;re updating one FeatureDefines.xcconfig you must update them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610991</commentid>
    <comment_count>16</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-04-26 14:35:31 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=85005 for the meat of this issue, post the review on GitHub.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134359</attachid>
            <date>2012-03-28 12:00:26 -0700</date>
            <delta_ts>2012-04-12 14:56:09 -0700</delta_ts>
            <desc>First upload</desc>
            <filename>bug-82478-20120328150024.patch</filename>
            <type>text/plain</type>
            <size>56234</size>
            <attacher name="Gavin Peters">gavinp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JhZTU3YmFjMzVmYzM3
NmUxYjRkZDMxZjcwMjg4NmIwNGQyNjY2OC4uYjI5YzE2MmJmMDZiYWZmYTJhNjA4MzNiYzE1ODM3
NTIxY2IwOGRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTI4ICBHYXZp
biBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBQcmVyZW5kZXJl
ciBhbmQgUHJlcmVuZGVySGFuZGxlIGZvciBzaWduYWxpbmcgb24gPGxpbmsgcmVsPXByZXJlbmRl
ciAuLj4gZWxlbWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBwcmVyZW5kZXIgY2FzZSBpc24ndCBxdWl0ZSBhIHJlc291cmNlIGxvYWQsIGFu
ZCB1c2luZyByZXNvdXJjZQorICAgICAgICBsb2FkaW5nIHRvIHJldHJpZXZlIHRoZW0gaGFzIGNv
bnN0cmFpbmVkIHRoZSBBUEkuCisKKyAgICAgICAgVGhlIG5ldyBQcmVyZW5kZXJlciBhbmQgUHJl
cmVuZGVySGFuZGxlIGxldCA8bGluayByZWw9cHJlcmVuZGVyPgorICAgICAgICBlbGVtZW50cyBz
aWduYWwgcmVtb3ZhbCBhbmQgdW5sb2FkIHRvIHRoZWlyIGxvYWRpbmcgcGxhdGZvcm0uCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQp
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcmVuZGVyZXIpOgor
ICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgICogaHRtbC9MaW5r
UmVsQXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtSZWxBdHRyaWJ1dGU6Okxp
bmtSZWxBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvTGlua1JlbEF0dHJpYnV0ZS5oOgorICAg
ICAgICAoTGlua1JlbEF0dHJpYnV0ZSk6CisgICAgICAgICogbG9hZGVyL0xpbmtMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGlua0xvYWRlcjo6TGlua0xvYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5rTG9hZGVyOjpsb2FkTGluayk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rTG9h
ZGVyOjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IGxvYWRlci9MaW5rTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExpbmtM
b2FkZXIpOgorICAgICAgICAqIGxvYWRlci9QcmVyZW5kZXJlci5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xpbmtSZWxBdHRyaWJ1dGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoUHJlcmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1ByZXJlbmRlckhhbmRs
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL0xpbmtSZWxBdHRyaWJ1dGUuaC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJlcmVuZGVySGFuZGxlKToKKwogMjAxMi0w
My0xOSAgTWljaGFsIE1vY255ICA8bW1vY255QGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVcGRhdGluZyBXZWJHcmFwaGljc0NvbnRleHQzRCBNZW1vcnlBbGxvY2F0aW9uIGNhbGxi
YWNrIHRvIGFjY2VwdCBhIHN0cnVjdCB3aXRoIGhhdmUgYmFja2J1ZmZlciBzdWdnZXN0aW9uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5ODViMzViOGJjODgzNmY5NWI5NzJmZjJlNzA2
ZDc3NDIwODdlYjI5Li5hZjQzMWU2ZDBmMGJiZmIzNmMxZTU5ZjY2M2ZhNmFjYjVhNmY1Zjg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTI4ICBH
YXZpbiBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBQcmVyZW5k
ZXJlciBhbmQgUHJlcmVuZGVySGFuZGxlIGZvciBzaWduYWxpbmcgb24gPGxpbmsgcmVsPXByZXJl
bmRlciAuLj4gZWxlbWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBwcmVyZW5kZXIgY2FzZSBpc24ndCBxdWl0ZSBhIHJlc291cmNlIGxvYWQs
IGFuZCB1c2luZyByZXNvdXJjZQorICAgICAgICBsb2FkaW5nIHRvIHJldHJpZXZlIHRoZW0gaGFz
IGNvbnN0cmFpbmVkIHRoZSBBUEkuCisKKyAgICAgICAgVGhlIG5ldyBQcmVyZW5kZXJlciBhbmQg
UHJlcmVuZGVySGFuZGxlIGxldCA8bGluayByZWw9cHJlcmVuZGVyPgorICAgICAgICBlbGVtZW50
cyBzaWduYWwgcmVtb3ZhbCBhbmQgdW5sb2FkIHRvIHRoZWlyIGxvYWRpbmcgcGxhdGZvcm0uCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAg
ICogcHVibGljL1dlYkNvbnRleHRNZW51RGF0YS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJGcmFt
ZS5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oOgorICAgICAgICAqIHB1
YmxpYy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJL
aXRQbGF0Zm9ybVN1cHBvcnQ6Om5ld0xpbmtQcmVyZW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQ6OnJlbW92ZWRMaW5rUHJlcmVuZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViS2l0UGxhdGZvcm1TdXBwb3J0Ojp1bmxvYWRlZExpbmtQcmVyZW5kZXIpOgorICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUmVmZXJyZXJQb2xpY3kuaC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgorICAg
ICAgICAqIHNyYy9QcmVyZW5kZXJIYW5kbGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0xpbmtSZWxBdHRyaWJ1dGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UHJlcmVuZGVySGFuZGxlOjpQcmVyZW5kZXJIYW5kbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJlcmVuZGVySGFuZGxlOjp+UHJlcmVuZGVySGFuZGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlByZXJlbmRlckhhbmRsZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQcmVyZW5kZXJIYW5kbGU6OnVubG9hZGVkKToKKyAgICAgICAgKiBzcmMvUHJlcmVuZGVy
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
TmV4dFByZXJlbmRlcklkKToKKyAgICAgICAgKFdlYkNvcmU6OlByZXJlbmRlcmVyOjpQcmVyZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpQcmVyZW5kZXJlcjo6flByZXJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlByZXJlbmRlcmVyOjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UHJlcmVuZGVyZXI6OnN0b3ApOgorCiAyMDEyLTAzLTE5ICBNaWNoYWwgTW9jbnkgIDxtbW9jbnlA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFVwZGF0aW5nIFdlYkdyYXBoaWNzQ29u
dGV4dDNEIE1lbW9yeUFsbG9jYXRpb24gY2FsbGJhY2sgdG8gYWNjZXB0IGEgc3RydWN0IHdpdGgg
aGF2ZSBiYWNrYnVmZmVyIHN1Z2dlc3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMTIwYmQ0N2Mz
MDg0NTg3YjY0MDUyZTZkOWNiNmVhNmQ5ZjFiZjc1Yi4uY2I5Yzk1MTM3MDZiNThmN2ExYzY4MTgz
MTY5NGFlYThiYjczMWZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEy
LTAzLTI4ICBHYXZpbiBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFk
ZCBQcmVyZW5kZXJlciBhbmQgUHJlcmVuZGVySGFuZGxlIGZvciBzaWduYWxpbmcgb24gPGxpbmsg
cmVsPXByZXJlbmRlciAuLj4gZWxlbWVudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBwcmVyZW5kZXIgY2FzZSBpc24ndCBxdWl0ZSBhIHJlc291
cmNlIGxvYWQsIGFuZCB1c2luZyByZXNvdXJjZQorICAgICAgICBsb2FkaW5nIHRvIHJldHJpZXZl
IHRoZW0gaGFzIGNvbnN0cmFpbmVkIHRoZSBBUEkuCisKKyAgICAgICAgVGhlIG5ldyBQcmVyZW5k
ZXJlciBhbmQgUHJlcmVuZGVySGFuZGxlIGxldCA8bGluayByZWw9cHJlcmVuZGVyPgorICAgICAg
ICBlbGVtZW50cyBzaWduYWwgcmVtb3ZhbCBhbmQgdW5sb2FkIHRvIHRoZWlyIGxvYWRpbmcgcGxh
dGZvcm0uCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZp
ZzoKKwogMjAxMi0wMy0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExMDI3OTk3PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgxNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDk5ZTIzMDY5ZDk5
YjFjYmZjMGQxZjllNmJjNWU2ZDY2YjEyZjIxNS4uMDIxODgzMTVjMzlhNWQzYjdjMWY4ZTNiYmNk
Y2IwYmU2Y2Q3NWM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjcxOSw2ICsyNzE5LDcgQEAKICAg
ICAgICAgICAgICdsb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5oJywKICAgICAgICAgICAgICds
b2FkZXIvUG9saWN5Q2FsbGJhY2suY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvUG9saWN5Q2hl
Y2tlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9QcmVyZW5kZXJlci5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvUHJvZ3Jlc3NUcmFja2VyLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Jl
c291cmNlTG9hZE5vdGlmaWVyLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAnLApAQCAtMjk5MSw2ICsyOTkyLDcgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0
Zm9ybVRvdWNoRXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBv
aW50LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1ByZXJlbmRlckhhbmRsZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vUnVuTG9vcFRpbWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggODFkYjYzNjkwM2Q0
OWZkMjU4NzdjNjcxYjFjNTE4MGZmZjkyMTE0My4uYWVkZjNhZDhmNGFjYzc2NjVjOWNjNDY0MDg1
N2FhMmExYjJhYWIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yMDcsNiArMjA3LDEw
IEBACiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShMSU5L
X1BSRVJFTkRFUikKKyNpbmNsdWRlICJQcmVyZW5kZXJlci5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNwYWNlIFVuaWNv
ZGU7CkBAIC00NjQsNyArNDY4LDEwIEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUs
IGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICAgICBtX21hcmtl
cnMgPSBhZG9wdFB0cihuZXcgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKTsKIAogICAgIG1fY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBhZG9wdFB0cihuZXcgQ2FjaGVkUmVzb3VyY2VMb2FkZXIodGhp
cykpOwotCisjaWYgRU5BQkxFKExJTktfUFJFUkVOREVSKQorICAgIG1fcHJlcmVuZGVyZXIgPSBh
ZG9wdFB0cihuZXcgUHJlcmVuZGVyZXIodGhpcykpOworICAgIG1fcHJlcmVuZGVyZXItPnN1c3Bl
bmRJZk5lZWRlZCgpOworI2VuZGlmIC8vIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKICAgICBtX3Zp
c3VhbGx5T3JkZXJlZCA9IGZhbHNlOwogICAgIG1fYlBhcnNpbmcgPSBmYWxzZTsKICAgICBtX3dl
bGxGb3JtZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggY2M4MWIzMmYwNDhlZjJk
MTYxMzY2YmVlZGE2YjZhODEwOTA2YzEzYS4uN2U5NjVjYzQzMWI1ZWNjNDA2MDRiYjg4MWE3N2Rh
NGY4ZmFkMjk3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTE2Niw2ICsxNjYsMTAgQEAgY2xh
c3MgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgTWljcm9EYXRhSXRlbUxpc3Q7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKK2NsYXNzIFByZXJlbmRlcmVy
OworI2VuZGlmIC8vIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKKwogdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAogY2xhc3MgRm9ybUVsZW1lbnRLZXkgewpAQCAtMTEzMSw2ICsxMTM1LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIHN1c3BlbmRTY2hlZHVsZWRUYXNrcygpOwogICAgIHZvaWQgcmVz
dW1lU2NoZWR1bGVkVGFza3MoKTsKIAorI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKKyAgICBQ
cmVyZW5kZXJlciogcHJlcmVuZGVyZXIoKSB7IHJldHVybiBtX3ByZXJlbmRlcmVyLmdldCgpOyB9
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgS1VSTCYs
IGJvb2wgaXNYSFRNTCwgYm9vbCBpc0hUTUwpOwogCkBAIC0xNDY4LDcgKzE0NzYsMTEgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgVGltZXI8RG9jdW1lbnQ+IG1fcGVuZGluZ1Rhc2tzVGltZXI7
Ci0gICAgVmVjdG9yPE93blB0cjxUYXNrPiA+IG1fcGVuZGluZ1Rhc2tzOyAgICAKKyAgICBWZWN0
b3I8T3duUHRyPFRhc2s+ID4gbV9wZW5kaW5nVGFza3M7CisKKyNpZiBFTkFCTEUoTElOS19QUkVS
RU5ERVIpCisgICAgT3duUHRyPFByZXJlbmRlcmVyPiBtX3ByZXJlbmRlcmVyOworI2VuZGlmIC8v
IEVOQUJMRShMSU5LX1BSRVJFTkRFUikKIH07CiAKIC8vIFB1dCB0aGVzZSBtZXRob2RzIGhlcmUs
IGJlY2F1c2UgdGhleSByZXF1aXJlIHRoZSBEb2N1bWVudCBkZWZpbml0aW9uLCBidXQgd2UgcmVh
bGx5IHdhbnQgdG8gaW5saW5lIHRoZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHAKaW5kZXggNjkwYmU3ZTE3NmNmZjAzZjAxNGYxODFjNjVkNTliMjE1YzFjMzg2ZC4uY2Jl
NDQ2Y2I4ZDAyNjQ5ZjM2ZDNiYzQ2ZDQ2MjhhMzg4YmUyZTJmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcApAQCAtMjUyLDYgKzI1Miw3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAKIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKKyAgICBtX2xpbmtMb2FkZXIucmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKICAgICBp
ZiAobV9pc0luU2hhZG93VHJlZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9M
aW5rUmVsQXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua1JlbEF0dHJpYnV0
ZS5jcHAKaW5kZXggNTI2MWRmMmQwOGZmMjZhMDNhNWQ4MWUyNDMxZmE2M2Y0YzY1NzIwYy4uODcw
NzFiOTliMjhkNjVkMjE4ZjBhYmQyZGI4YTU3Y2QwMDFmNmE2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9MaW5rUmVsQXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0xpbmtSZWxBdHRyaWJ1dGUuY3BwCkBAIC00MSw5ICs0MSwxMSBAQCBMaW5rUmVsQXR0cmli
dXRlOjpMaW5rUmVsQXR0cmlidXRlKCkKICAgICAsIG1faXNETlNQcmVmZXRjaChmYWxzZSkKICNp
ZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKICAgICAsIG1faXNMaW5rUHJlZmV0Y2goZmFsc2UpCi0g
ICAgLCBtX2lzTGlua1ByZXJlbmRlcihmYWxzZSkKICAgICAsIG1faXNMaW5rU3VicmVzb3VyY2Uo
ZmFsc2UpCiAjZW5kaWYKKyNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCisgICAgLCBtX2lzTGlu
a1ByZXJlbmRlcihmYWxzZSkKKyNlbmRpZgogewogfQogCkBAIC01NCw5ICs1NiwxMSBAQCBMaW5r
UmVsQXR0cmlidXRlOjpMaW5rUmVsQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgcmVsKQogICAgICwg
bV9pc0ROU1ByZWZldGNoKGZhbHNlKQogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgICwg
bV9pc0xpbmtQcmVmZXRjaChmYWxzZSkKLSAgICAsIG1faXNMaW5rUHJlcmVuZGVyKGZhbHNlKQog
ICAgICwgbV9pc0xpbmtTdWJyZXNvdXJjZShmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShMSU5L
X1BSRVJFTkRFUikKKyAgICAsIG1faXNMaW5rUHJlcmVuZGVyKGZhbHNlKQorI2VuZGlmCiB7CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQiKSkKICAgICAgICAgbV9p
c1N0eWxlU2hlZXQgPSB0cnVlOwpAQCAtOTYsMTEgKzEwMCwxMyBAQCBMaW5rUmVsQXR0cmlidXRl
OjpMaW5rUmVsQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgcmVsKQogI2lmIEVOQUJMRShMSU5LX1BS
RUZFVENIKQogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoKml0LCAicHJl
ZmV0Y2giKSkKICAgICAgICAgICAgICAgbV9pc0xpbmtQcmVmZXRjaCA9IHRydWU7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgqaXQsICJwcmVyZW5kZXIiKSkKLSAgICAg
ICAgICAgICAgbV9pc0xpbmtQcmVyZW5kZXIgPSB0cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoKml0LCAic3VicmVzb3VyY2UiKSkKICAgICAgICAgICAgICAgbV9p
c0xpbmtTdWJyZXNvdXJjZSA9IHRydWU7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTElOS19QUkVSRU5E
RVIpCisgICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgqaXQsICJwcmVyZW5k
ZXIiKSkKKyAgICAgICAgICAgICAgbV9pc0xpbmtQcmVyZW5kZXIgPSB0cnVlOworI2VuZGlmCiAg
ICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xpbmtS
ZWxBdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua1JlbEF0dHJpYnV0ZS5oCmlu
ZGV4IDMxNzgxOTRiNDlhMWJkMDViOWIwYzE0NDQxZWJmNWY4NjI1NzhhY2MuLjk4ZGQ0ODE5MWM5
ZjgzNzNlZjI0YjFkMjI5YjEyMjNlMmRhMjc2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTGlua1JlbEF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGlua1Jl
bEF0dHJpYnV0ZS5oCkBAIC00NCw5ICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2lzRE5T
UHJlZmV0Y2g7CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgYm9vbCBtX2lzTGlua1By
ZWZldGNoOwotICAgIGJvb2wgbV9pc0xpbmtQcmVyZW5kZXI7CiAgICAgYm9vbCBtX2lzTGlua1N1
YnJlc291cmNlOwogI2VuZGlmCisjaWYgRU5BQkxFKExJTktfUFJFUkVOREVSKQorICAgIGJvb2wg
bV9pc0xpbmtQcmVyZW5kZXI7CisjZW5kaWYKIAogICAgIExpbmtSZWxBdHRyaWJ1dGUoKTsKICAg
ICBleHBsaWNpdCBMaW5rUmVsQXR0cmlidXRlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0xpbmtMb2FkZXIuY3BwCmluZGV4IDdkNjk5Nzg4NmI5NjcwYzc4ODgxZWM1NDhjY2Y3MGQ1
NmE3N2ExMDEuLmQ0YTRmM2I4NTVhYzE4NDVlNGZmOWI5MWI5NGViOGZlZTc5NzIwNzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvTGlua0xvYWRlci5jcHAKQEAgLTQ0LDEyICs0NCwyMCBAQAogI2luY2x1
ZGUgIkxpbmtSZWxBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCisjaWYgRU5B
QkxFKExJTktfUFJFUkVOREVSKQorI2luY2x1ZGUgIlByZXJlbmRlcmVyLmgiCisjaW5jbHVkZSAi
UHJlcmVuZGVySGFuZGxlLmgiCisjZW5kaWYgLy8gRU5BQkxFKExJTktfUFJFUkVOREVSKQorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIExpbmtMb2FkZXI6OkxpbmtMb2FkZXIoTGlua0xvYWRlckNs
aWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9saW5rTG9hZFRp
bWVyKHRoaXMsICZMaW5rTG9hZGVyOjpsaW5rTG9hZFRpbWVyRmlyZWQpCiAgICAgLCBtX2xpbmtM
b2FkaW5nRXJyb3JUaW1lcih0aGlzLCAmTGlua0xvYWRlcjo6bGlua0xvYWRpbmdFcnJvclRpbWVy
RmlyZWQpCisjaWYgRU5BQkxFKExJTktfUFJFUkVOREVSKQorICAgICwgbV9wcmVyZW5kZXJIYW5k
bGUoMCkKKyNlbmRpZiAvLyBFTkFCTEUoTElOS19QUkVSRU5ERVIpCiB7CiB9CiAKQEAgLTEwMyw3
ICsxMTEsNyBAQCBib29sIExpbmtMb2FkZXI6OmxvYWRMaW5rKGNvbnN0IExpbmtSZWxBdHRyaWJ1
dGUmIHJlbEF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiB0eQogICAgIH0KIAogI2lmIEVOQUJMRShM
SU5LX1BSRUZFVENIKQotICAgIGlmICgocmVsQXR0cmlidXRlLm1faXNMaW5rUHJlZmV0Y2ggfHwg
cmVsQXR0cmlidXRlLm1faXNMaW5rUHJlcmVuZGVyIHx8IHJlbEF0dHJpYnV0ZS5tX2lzTGlua1N1
YnJlc291cmNlKSAmJiBocmVmLmlzVmFsaWQoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKSkgeworICAg
IGlmICgocmVsQXR0cmlidXRlLm1faXNMaW5rUHJlZmV0Y2ggfHwgcmVsQXR0cmlidXRlLm1faXNM
aW5rU3VicmVzb3VyY2UpICYmIGhyZWYuaXNWYWxpZCgpICYmIGRvY3VtZW50LT5mcmFtZSgpKSB7
CiAgICAgICAgIGlmICghbV9jbGllbnQtPnNob3VsZExvYWRMaW5rKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gUmVz
b3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkOwpAQCAtMTI3LDggKzEzNSwyMyBAQCBib29sIExp
bmtMb2FkZXI6OmxvYWRMaW5rKGNvbnN0IExpbmtSZWxBdHRyaWJ1dGUmIHJlbEF0dHJpYnV0ZSwg
Y29uc3QgU3RyaW5nJiB0eQogICAgICAgICAgICAgbV9jYWNoZWRMaW5rUmVzb3VyY2UtPmFkZENs
aWVudCh0aGlzKTsKICAgICB9CiAjZW5kaWYKKworI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikK
KyAgICBpZiAocmVsQXR0cmlidXRlLm1faXNMaW5rUHJlcmVuZGVyKSB7CisgICAgICAgIEFTU0VS
VCghbV9wcmVyZW5kZXJIYW5kbGUpOworICAgICAgICBtX3ByZXJlbmRlckhhbmRsZSA9IGRvY3Vt
ZW50LT5wcmVyZW5kZXJlcigpLT5yZW5kZXIoaHJlZik7CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShMSU5LX1BSRVJFTkRFUikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBMaW5rTG9hZGVy
OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKK3sKKyNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCisg
ICAgaWYgKG1fcHJlcmVuZGVySGFuZGxlKQorICAgICAgICBtX3ByZXJlbmRlckhhbmRsZS0+cmVt
b3ZlZEZyb21Eb2N1bWVudCgpOworI2VuZGlmCit9CisKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9MaW5r
TG9hZGVyLmgKaW5kZXggMWZiYzE4ZDdjNzZlYjZhNmU3YTRlZmQ3MTkxMTFiNjM5NjBlNzlkYi4u
MGE2YTgwNTEzNzIxZjIzMWI0N2U3YjdiYTg2YTVjMjJlYWMxMWRkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTGlua0xvYWRlci5oCkBAIC0zNyw5ICszNywxNCBAQAogI2luY2x1ZGUgIkxpbmtMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBMaW5rUmVsQXR0cmlidXRlOworI2lmIEVO
QUJMRShMSU5LX1BSRVJFTkRFUikKK2NsYXNzIFByZXJlbmRlckhhbmRsZTsKKyNlbmRpZiAvLyBF
TkFCTEUoTElOS19QUkVSRU5ERVIpCiAKIC8vIFRoZSBMaW5rTG9hZGVyIGNhbiBsb2FkIGxpbmsg
cmVsIHR5cGVzIGljb24sIGRucy1wcmVmZXRjaCwgc3VicmVzb3VyY2UsIHByZWZldGNoIGFuZCBw
cmVyZW5kZXIuCiBjbGFzcyBMaW5rTG9hZGVyIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50
IHsKQEAgLTUwLDYgKzU1LDcgQEAgcHVibGljOgogICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VD
bGllbnQKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsK
ICAgICAKKyAgICB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICBib29sIGxvYWRMaW5r
KGNvbnN0IExpbmtSZWxBdHRyaWJ1dGUmLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgc2l6ZXMsIGNvbnN0IEtVUkwmLCBEb2N1bWVudCopOwogCiBwcml2YXRlOgpAQCAtNjEsNiAr
NjcsMTAgQEAgcHJpdmF0ZToKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSZXNvdXJj
ZT4gbV9jYWNoZWRMaW5rUmVzb3VyY2U7CiAgICAgVGltZXI8TGlua0xvYWRlcj4gbV9saW5rTG9h
ZFRpbWVyOwogICAgIFRpbWVyPExpbmtMb2FkZXI+IG1fbGlua0xvYWRpbmdFcnJvclRpbWVyOwor
CisjaWYgRU5BQkxFKExJTktfUFJFUkVOREVSKQorICAgIFJlZlB0cjxQcmVyZW5kZXJIYW5kbGU+
IG1fcHJlcmVuZGVySGFuZGxlOworI2VuZGlmIC8vIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKIH07
CiAgICAgCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJlcmVuZGVyZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9QcmVyZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxOGM4
OGZmYjNhMDc4NDI5NjBjZGY1MDI1ZTlhMzYwY2U5NDAxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUHJlcmVuZGVyZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNp
Zm5kZWYgUHJlcmVuZGVyZXJfaAorI2RlZmluZSBQcmVyZW5kZXJlcl9oCisKKyNpZiBFTkFCTEUo
TElOS19QUkVSRU5ERVIpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKworI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUHJlcmVuZGVySGFuZGxlOwor
Y2xhc3MgS1VSTDsKKworY2xhc3MgUHJlcmVuZGVyZXIgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICBQcmVyZW5kZXJlcihEb2N1bWVudCopOworICAgIHZpcnR1YWwgflBy
ZXJlbmRlcmVyKCk7CisKKyAgICBQYXNzUmVmUHRyPFByZXJlbmRlckhhbmRsZT4gcmVuZGVyKGNv
bnN0IEtVUkwmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9W
RVJSSURFOworCisgICAgY29uc3QgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgVmVjdG9yPFJl
ZlB0cjxQcmVyZW5kZXJIYW5kbGU+ID4gbV9oYW5kbGVzOworfTsKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKExJTktfUFJFUkVOREVSKQorCisjZW5kaWYgLy8gUHJlcmVuZGVyZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUHJlcmVuZGVySGFuZGxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QcmVyZW5kZXJIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTBiZDVkM2Y3
YzA4NWRlN2VhOWE0NWZhMDU4MGExOWVkNGVhOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUHJlcmVuZGVySGFuZGxlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
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
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj
aWZuZGVmIFByZXJlbmRlckhhbmRsZV9oCisjZGVmaW5lIFByZXJlbmRlckhhbmRsZV9oCisKKyNp
ZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtVUkw7CisKK2NsYXNzIFByZXJlbmRlckhh
bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFByZXJlbmRlckhhbmRsZT4geworcHVibGljOgorICAg
IFByZXJlbmRlckhhbmRsZShpbnQgaWQpOworICAgIH5QcmVyZW5kZXJIYW5kbGUoKTsKKworICAg
IHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIHZvaWQgdW5sb2FkZWQoKTsKKworcHJp
dmF0ZToKKyAgICBpbnQgbV9pZDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShMSU5LX1BS
RVJFTkRFUikKKworI2VuZGlmIC8vIFByZXJlbmRlckhhbmRsZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKaW5kZXggMWY2YzE4YzRlNmZlMDczNGNiMjcwZThjYzdhOWQ3N2MxMWZhMjZiYS4u
MTYwMGJlYWNlNTM5NDAzNzhmYmY0NGZhNWMxMDc0NzBjMzQyYTc0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cApAQCAtMjMxLDcgKzIzMSw2IEBACiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJQb3B1cE1lbnVJbmZvLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUG9wdXBU
eXBlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViUmFuZ2UuaCcsCi0gICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJSZWZlcnJlclBvbGljeS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYlJlZ3VsYXJFeHByZXNzaW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
UnVudGltZUZlYXR1cmVzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2NvcGVkVXNl
ckdlc3R1cmUuaCcsCkBAIC0zMzAsNiArMzI5LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGlj
L3BsYXRmb3JtL1dlYlByaXZhdGVPd25QdHIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJQcml2YXRlUHRyLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZv
cm0vV2ViUmVjdC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlJlZmVy
cmVyUG9saWN5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0vV2Vi
U2l6ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlNvY2tldFN0cmVh
bUVycm9yLmgnLApAQCAtNDYxLDYgKzQ2MSw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1ByZXJlbmRlcmVyLmNwcCcsCisgICAg
ICAgICAgICAgICAgJ3NyYy9QcmVyZW5kZXJIYW5kbGUuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1Jlc291cmNlSGFuZGxlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJH
cm91cC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvU2Nyb2xsYmFyR3JvdXAuaCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggMWE0MTI5NzMyOWNiNGViOGZkMDY3M2Yz
NjJiYjIyMzExZTQ3N2IzYi4uYWQ1ZTJlZjI1NDJiNDQwZGUyZWIzOTBlNWZiM2FhZDNhM2VmZGIz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtNjQsNiArNjQsNyBAQAog
ICAgICAgJ0VOQUJMRV9KQVZBU0NSSVBUX0kxOE5fQVBJPTEnLAogICAgICAgJ0VOQUJMRV9MRUdB
Q1lfTk9USUZJQ0FUSU9OUz0xJywKICAgICAgICdFTkFCTEVfTElOS19QUkVGRVRDSD0xJywKKyAg
ICAgICdFTkFCTEVfTElOS19QUkVSRU5ERVI9MScsCiAgICAgICAnRU5BQkxFX01FRElBX1NPVVJD
RT0xJywKICAgICAgICdFTkFCTEVfTUVESUFfU1RBVElTVElDUz0xJywKICAgICAgICdFTkFCTEVf
TUVESUFfU1RSRUFNPTEnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQ29udGV4dE1lbnVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDb250ZXh0TWVudURhdGEuaAppbmRleCBlNzJhNDM0ZGJhZmNiZmIyYjY3ZGQ3YmEyODE2OGM1
YmQxNzRlM2FjLi5hMzYzNzIxOTI2OTAyOTQ5MjU0ODJjNjkxMDQ2NWZjZDBlMzY4ZDcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb250ZXh0TWVudURhdGEu
aApAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiV2ViTWVudUl0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgotI2luY2x1ZGUgIldl
YlJlZmVycmVyUG9saWN5LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlZlY3Rvci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgK
aW5kZXggMGQ1NDA2ZDUyMDY4MmM5NTAxNTQ2YjQwODI1MzI4NTA5NTVmNmJlNS4uNTA1OTM2Njg4
MjE5NzA3ZTkxNmFkNTVlZjQ2YzFiMTI2MTAwNGJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJGcmFtZS5oCkBAIC0zMywxMCArMzMsMTAgQEAKIAogI2luY2x1ZGUgIldlYklj
b25VUkwuaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCi0jaW5jbHVkZSAiV2ViUmVmZXJyZXJQb2xp
Y3kuaCIKICNpbmNsdWRlICJXZWJVUkxMb2FkZXJPcHRpb25zLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViQ2FudmFzLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlJlZmVycmVyUG9saWN5LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViVVJMLmgiCiAKIHN0cnVjdCBOUE9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlJlZmVycmVyUG9saWN5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJSZWZlcnJlclBvbGljeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4MjcxMGZiMjIzNDkwMzljYmI2ZGY3ZGJlMmE1ZTRiYjE3MDQwODBjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlJlZmVycmVyUG9saWN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBXZWJSZWZlcnJlclBvbGljeV9oCi0jZGVmaW5lIFdlYlJlZmVycmVyUG9saWN5
X2gKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWVudW0gV2ViUmVmZXJyZXJQb2xpY3kgewotICAg
IFdlYlJlZmVycmVyUG9saWN5QWx3YXlzLAotICAgIFdlYlJlZmVycmVyUG9saWN5RGVmYXVsdCwK
LSAgICBXZWJSZWZlcnJlclBvbGljeU5ldmVyLAotICAgIFdlYlJlZmVycmVyUG9saWN5T3JpZ2lu
LAotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VjdXJpdHlQb2xpY3kuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlY3VyaXR5UG9saWN5LmgKaW5kZXggNDY2ZDk4Njg0
ZmYyN2M5NzAzNjA3M2FmNGU2MjI1NjliNDA4YmVkZi4uMjdkMmE2NTgyZjdkMWE0OGE4Mjk0MjIy
MmYxOGRiODg5YzNjNGI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2VjdXJpdHlQb2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTZWN1cml0eVBvbGljeS5oCkBAIC0zMSw4ICszMSw4IEBACiAjaWZuZGVmIFdlYlNlY3Vy
aXR5UG9saWN5X2gKICNkZWZpbmUgV2ViU2VjdXJpdHlQb2xpY3lfaAogCi0jaW5jbHVkZSAiV2Vi
UmVmZXJyZXJQb2xpY3kuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDb21tb24uaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAppbmRleCA1YjhmOTkxMjZhNTMzYzgzYjNlMmI2
MTk3ODNiMDU5ODE0NzQwZDFjLi43YzEyMDhmYzZjODhkNzI4NGQ4ODk1NzM4NWRhY2QzMmYxNjI0
YmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaApAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIldlYkdhbWVwYWRzLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJXZWJMb2NhbGl6ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJSZWZlcnJlclBv
bGljeS5oIgogI2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgpAQCAtNjksMTEgKzcwLDEzIEBAIGNs
YXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKIGNsYXNzIFdlYlBsdWdpbkxpc3RC
dWlsZGVyOyAvLyBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBpbiBwbGF0Zm9ybT8KIGNsYXNzIFdl
YlNhbmRib3hTdXBwb3J0OwogY2xhc3MgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeTsgLy8gRklY
TUU6IERvZXMgdGhpcyBiZWxvbmcgaW4gcGxhdGZvcm0/CitjbGFzcyBXZWJTaXplOwogY2xhc3Mg
V2ViU29ja2V0U3RyZWFtSGFuZGxlOwogY2xhc3MgV2ViU3RvcmFnZU5hbWVzcGFjZTsgLy8gRklY
TUU6IERvZXMgdGhpcyBiZWxvbmcgaW4gcGxhdGZvcm0/CiBjbGFzcyBXZWJUaGVtZUVuZ2luZTsK
IGNsYXNzIFdlYlRocmVhZDsKIGNsYXNzIFdlYlVSTExvYWRlcjsKK2NsYXNzIFdlYlZpZXc7IC8v
IEZJWE1FOiBEb2VzIHRoaXMgYmVsb25nIGluIHBsYXRmb3JtPwogY2xhc3MgV2ViV29ya2VyUnVu
TG9vcDsKIAogY2xhc3MgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IHsKQEAgLTQxMyw2ICs0MTYsMTEg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFdvcmtlclJ1bkxvb3AoY29uc3Qg
V2ViV29ya2VyUnVuTG9vcCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wV29ya2VyUnVu
TG9vcChjb25zdCBXZWJXb3JrZXJSdW5Mb29wJikgeyB9CiAKKyAgICAvLyBMaW5rIFByZXJlbmRl
cgorICAgIHZpcnR1YWwgdm9pZCBuZXdMaW5rUHJlcmVuZGVyKGludCBpZCwgV2ViVmlldyosIGNv
bnN0IFdlYlVSTCYsIGNvbnN0IFdlYlN0cmluZyYgcmVmZXJyZXIsIFdlYlJlZmVycmVyUG9saWN5
LCBjb25zdCBXZWJTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRMaW5rUHJlcmVu
ZGVyKGludCBpZCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVubG9hZGVkTGlua1ByZXJlbmRlcihp
bnQgaWQpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYlJlZmVycmVyUG9saWN5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyNzEwZmIyMjM0OTAzOWNiYjZk
ZjdkYmUyYTVlNGJiMTcwNDA4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oCkBAIC0wLDAgKzEsNDUg
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
CisjaWZuZGVmIFdlYlJlZmVycmVyUG9saWN5X2gKKyNkZWZpbmUgV2ViUmVmZXJyZXJQb2xpY3lf
aAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBXZWJSZWZlcnJlclBvbGljeSB7CisgICAg
V2ViUmVmZXJyZXJQb2xpY3lBbHdheXMsCisgICAgV2ViUmVmZXJyZXJQb2xpY3lEZWZhdWx0LAor
ICAgIFdlYlJlZmVycmVyUG9saWN5TmV2ZXIsCisgICAgV2ViUmVmZXJyZXJQb2xpY3lPcmlnaW4s
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCmluZGV4IGMxODQxNmY1
OTI0YWFlYTA3YWU2ODBmMDZmMTZlZTc2ODA0ODMyYmYuLjY0Mzg1MTkyNjkwNGQxZTdhN2RhMTRj
ZWNmNGRkOTJjMzBhYjgyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCkBAIC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSAiV2Vi
TWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKICNp
bmNsdWRlICJXZWJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCi0jaW5jbHVkZSAiV2ViUmVmZXJyZXJQ
b2xpY3kuaCIKICNpbmNsdWRlICJXZWJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJXZWJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIldlYlN0b3JhZ2VRdW90YUVycm9yLmgiCkBAIC05OSw2ICs5OCw3IEBA
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYk1lZGlhU3RyZWFtU291cmNl
LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVmZXJyZXJQb2xpY3kuaCIKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJlcmVuZGVySGFuZGxlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ByZXJlbmRlckhhbmRsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzU5YTRhMmJjZDdmZmI4OTNmNzllMzQ2ZWI1NzM3OWE5MTg5ODFlMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ByZXJlbmRlckhhbmRsZS5jcHAKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJlcmVuZGVy
SGFuZGxlLmgiCisKKyNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCisKKyNpbmNsdWRlICJTZWN1
cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YkNTdHJpbmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUHJlcmVuZGVySGFuZGxlOjpQcmVyZW5kZXJIYW5kbGUoaW50
IGlkKQorICAgIDogbV9pZChpZCkKK3sKK30KKworUHJlcmVuZGVySGFuZGxlOjp+UHJlcmVuZGVy
SGFuZGxlKCkKK3sKK30KKwordm9pZCBQcmVyZW5kZXJIYW5kbGU6OnJlbW92ZWRGcm9tRG9jdW1l
bnQoKQoreworICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnJlbW92ZWRMaW5r
UHJlcmVuZGVyKG1faWQpOworfQorCit2b2lkIFByZXJlbmRlckhhbmRsZTo6dW5sb2FkZWQoKQor
eworICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnVubG9hZGVkTGlua1ByZXJl
bmRlcihtX2lkKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExJTktfUFJFUkVOREVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJlcmVuZGVyZXIuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJlcmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
MGY5MmQ4MTNjOGZkYzZmY2NjMTViYmRhNjk3ZDFlZDViMmJiNDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QcmVyZW5kZXJlci5jcHAKQEAgLTAsMCArMSwx
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
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
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByZXJlbmRlcmVyLmgiCisK
KyNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQcmVy
ZW5kZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIldl
YkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJSZWZlcnJlclBvbGljeS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW50IGdldE5leHRQcmVyZW5k
ZXJJZCgpCit7CisgICAgc3RhdGljIGludCBuZXh0SWQgPSAxOworICAgIHJldHVybiBuZXh0SWQr
KzsKK30KKworUHJlcmVuZGVyZXI6OlByZXJlbmRlcmVyKERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCit7Cit9CisKK1ByZXJlbmRlcmVyOjp+UHJlcmVuZGVyZXIoKQoreworfQorCitQYXNz
UmVmUHRyPFByZXJlbmRlckhhbmRsZT4gUHJlcmVuZGVyZXI6OnJlbmRlcihjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgaWYgKCFtX2RvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFdlYktpdDo6V2ViRnJhbWVJbXBsKiBmcmFtZUltcGwgPSBXZWJLaXQ6OldlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKG1fZG9jdW1lbnQtPmZyYW1lKCkpOworICAgIGlmICghZnJhbWVJbXBs
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIHZpZXcgPSBmcmFtZUlt
cGwtPnZpZXcoKTsKKworICAgIC8vIFByZXJlbmRlcnMgYXJlIHVubGlrZSByZXF1ZXN0cyBpbiBt
b3N0IHdheXMgKGZvciBpbnN0YW5jZSwgdGhleSBwYXNzIGRvd24gZnJhZ21lbnRzLCBhbmQgdGhl
eSBkb24ndCByZXR1cm4gZGF0YSksCisgICAgLy8gYnV0IHRoZXkgZG8gaGF2ZSByZWZlcnJlcnMu
CisgICAgY29uc3QgU2VjdXJpdHlQb2xpY3k6OlJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9saWN5
ID0gbV9kb2N1bWVudC0+cmVmZXJyZXJQb2xpY3koKTsKKyAgICBTdHJpbmcgcmVmZXJyZXIgPSBT
ZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihyZWZlcnJlclBvbGljeSwgdXJs
LCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKTsKKwor
ICAgIGNvbnN0IGludCBpZCA9IGdldE5leHRQcmVyZW5kZXJJZCgpOworICAgIFJlZlB0cjxQcmVy
ZW5kZXJIYW5kbGU+IHByZXJlbmRlciA9IGFkb3B0UmVmKG5ldyBQcmVyZW5kZXJIYW5kbGUoaWQp
KTsKKworICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm5ld0xpbmtQcmVyZW5k
ZXIoaWQsIHZpZXcsIHVybCwgV1RGOjpTdHJpbmcocmVmZXJyZXIpLCBzdGF0aWNfY2FzdDxXZWJL
aXQ6OldlYlJlZmVycmVyUG9saWN5PihyZWZlcnJlclBvbGljeSksIHZpZXctPnNpemUoKSk7CisK
KyAgICBtX2hhbmRsZXMuYXBwZW5kKHByZXJlbmRlcik7CisgICAgcmV0dXJuIHByZXJlbmRlcjsK
K30KKwordm9pZCBQcmVyZW5kZXJlcjo6c3RvcCgpCit7CisgICAgd2hpbGUgKCFtX2hhbmRsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQcmVyZW5kZXJIYW5kbGU+IGhhbmRsZSA9IG1f
aGFuZGxlc1swXS5yZWxlYXNlKCk7CisgICAgICAgIG1faGFuZGxlcy5yZW1vdmUoMCk7CisgICAg
ICAgIGhhbmRsZS0+dW5sb2FkZWQoKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShMSU5LX1BSRVJFTkRFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXggZGQ3Y2RkMWRiZDY1Njc3ZDQ2
MzEzOGE2YjdjYmIzYmMzMzgwN2JjOC4uOGRjNGY3YjU5NmJlOTI0YmY3ODVjMDNiNzRmOGQ0YmMw
NGJkZmUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTg5LDYgKzg5LDcgQEAgRU5BQkxFX0lOUFVU
X1NQRUVDSCA9IDsKIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSID0gRU5BQkxFX0pBVkFTQ1JJ
UFRfREVCVUdHRVI7CiBFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMgPSBFTkFCTEVfTEVHQUNZ
X05PVElGSUNBVElPTlM7CiBFTkFCTEVfTElOS19QUkVGRVRDSCA9IDsKK0VOQUJMRV9MSU5LX1BS
RVJFTkRFUiA9IDsKIEVOQUJMRV9NQVRITUwgPSBFTkFCTEVfTUFUSE1MOwogRU5BQkxFX01FRElB
X1NPVVJDRSA9IDsKIEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTID0gOwpAQCAtMTI5LDQgKzEzMCw0
IEBAIEVOQUJMRV9XRUJfVElNSU5HID0gOwogRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VS
UzsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5B
QkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJM
RV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19HUklEX0xBWU9VVCkgJChFTkFC
TEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRB
TElTVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMUykgJChF
TkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVO
QUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9B
UEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9JQ09O
REFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX0NPTE9S
KSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChF
TkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9UQUcpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVU
QVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJ
U0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19UQUcpICQoRU5BQkxFX1FVT1RBKSAkKEVO
QUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAk
KEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9T
VFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdT
KSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAk
KEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURF
T19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VC
X1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxF
X0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykg
JChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVf
REFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUKSAkKEVOQUJMRV9EQVRBX1RSQU5T
RkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04p
ICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJM
RV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChF
TkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhF
RF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkg
JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9O
VEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAk
KEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9UQUcpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVU
QVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJ
U0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19UQUcpICQoRU5BQkxFX1FVT1RBKSAkKEVO
QUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAk
KEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9T
VFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdT
KSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAk
KEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURF
T19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VC
X1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hTTFQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGYxM2VhZTgyN2M4YmIyY2E2YWNjZWI1MDg0ZDUyNzdiNDU1Mjk4ZDQuLjZkZWFjNDlmYzY1
ODVmYmI0YzllMmM0MWUyNTBlMmRhMWRjYzg4NmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMy0yOCAgR2F2
aW4gUGV0ZXJzICA8Z2F2aW5wQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgUHJlcmVuZGVy
ZXIgYW5kIFByZXJlbmRlckhhbmRsZSBmb3Igc2lnbmFsaW5nIG9uIDxsaW5rIHJlbD1wcmVyZW5k
ZXIgLi4+IGVsZW1lbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODI0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgcHJlcmVuZGVyIGNhc2UgaXNuJ3QgcXVpdGUgYSByZXNvdXJjZSBsb2FkLCBh
bmQgdXNpbmcgcmVzb3VyY2UKKyAgICAgICAgbG9hZGluZyB0byByZXRyaWV2ZSB0aGVtIGhhcyBj
b25zdHJhaW5lZCB0aGUgQVBJLgorCisgICAgICAgIFRoZSBuZXcgUHJlcmVuZGVyZXIgYW5kIFBy
ZXJlbmRlckhhbmRsZSBsZXQgPGxpbmsgcmVsPXByZXJlbmRlcj4KKyAgICAgICAgZWxlbWVudHMg
c2lnbmFsIHJlbW92YWwgYW5kIHVubG9hZCB0byB0aGVpciBsb2FkaW5nIHBsYXRmb3JtLgorCisg
ICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMTItMDMtMTkgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgYWRkIGRwcmFua2UgdG8gd2Via2l0
cHkgd2F0Y2hsaXN0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rv
b2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDhhNzQ5YWQ0YmE3OTg0MDllY2NkNmRiNWFl
NjhlNmZjMTE0YjczNzIuLjI1YjY0MmRmMjA4OTAwZGQ5ZGMxOTYxNmU3YmQwODcwMTk2MWUzNGYg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0CkBAIC0xMDUsNiArMTA1LDcgQEAgbXkgKAogICAgICRqYXZhU2NyaXB0
RGVidWdnZXJTdXBwb3J0LAogICAgICRsZWdhY3lOb3RpZmljYXRpb25zU3VwcG9ydCwKICAgICAk
bGlua1ByZWZldGNoU3VwcG9ydCwKKyAgICAkbGlua1ByZXJlbmRlclN1cHBvcnQsCiAgICAgJG1h
dGhtbFN1cHBvcnQsCiAgICAgJG1lZGlhU291cmNlU3VwcG9ydCwKICAgICAkbWVkaWFTdGF0aXN0
aWNzU3VwcG9ydCwKQEAgLTI2Myw2ICsyNjQsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBv
cHRpb24gPT4gImxpbmstcHJlZmV0Y2giLCBkZXNjID0+ICJUb2dnbGUgcHJlIGZldGNoaW5nIHN1
cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfTElOS19QUkVGRVRDSCIsIGRlZmF1bHQg
PT4gMCwgdmFsdWUgPT4gXCRsaW5rUHJlZmV0Y2hTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9
PiAibGluay1wcmVyZW5kZXIiLCBkZXNjID0+ICJUb2dnbGUgcHJlIHJlbmRlcmluZyBzdXBwb3J0
IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0xJTktfUFJFUkVOREVSIiwgZGVmYXVsdCA9PiAw
LCB2YWx1ZSA9PiBcJGxpbmtQcmVyZW5kZXJTdXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9PiAi
bWF0aG1sIiwgZGVzYyA9PiAiVG9nZ2xlIE1hdGhNTCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX01BVEhNTCIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRtYXRobWxTdXBwb3J0
IH0sCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBhMmNmYWJiYmU4YTQyOTNlNzVkMjEzYjJkMDJkNWVlZTgyYzM2MDcxLi5k
YmNmMTU1YTc3OGExNmRlZWU1YjQ4MmE4Mjg1ZTNhY2YzZjNkNGM0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjggQEAKKzIwMTItMDMtMjggIEdhdmluIFBldGVycyAgPGdhdmlucEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWRkIFByZXJlbmRlcmVyIGFuZCBQcmVyZW5kZXJIYW5kbGUgZm9yIHNpZ25hbGlu
ZyBvbiA8bGluayByZWw9cHJlcmVuZGVyIC4uPiBlbGVtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNDc4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHByZXJlbmRlciBjYXNlIGlzbid0IHF1
aXRlIGEgcmVzb3VyY2UgbG9hZCwgYW5kIHVzaW5nIHJlc291cmNlCisgICAgICAgIGxvYWRpbmcg
dG8gcmV0cmlldmUgdGhlbSBoYXMgY29uc3RyYWluZWQgdGhlIEFQSS4KKworICAgICAgICBUaGUg
bmV3IFByZXJlbmRlcmVyIGFuZCBQcmVyZW5kZXJIYW5kbGUgbGV0IDxsaW5rIHJlbD1wcmVyZW5k
ZXI+CisgICAgICAgIGVsZW1lbnRzIHNpZ25hbCByZW1vdmFsIGFuZCB1bmxvYWQgdG8gdGhlaXIg
bG9hZGluZyBwbGF0Zm9ybS4KKworICAgICAgICBUaGUgbGF5b3V0IHRlc3QgaXMgYmVpbmcgcmVt
b3ZlZCBiZWNhdXNlIGl0IHJlbGllZCBvbiB0aGUgcHJlcmVuZGVyCisgICAgICAgIGxhdW5jaGlu
ZyBhIG5ldHdvcmsgcmVxdWVzdCwgd2hpY2ggdGhleSBkb24ndCBkbyBhbnltb3JlLgorCisgICAg
ICAgICogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZXJlbmRlci1leHBlY3RlZC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZXJlbmRlci5odG1s
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBw
ZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZDoKKwogMjAxMi0wMy0xOSAg
VG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGZsZXgtaXRlbS1hbGln
bjogc3RyZXRjaCBzaG91bGQgb25seSBncm93LCBuZXZlciBzaHJpbmsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVyZW5kZXItZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZXJlbmRlci1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NWJmZTI2NDUyMDRkMTMyNTdl
Y2QyNDYyOTVjMGE5NGQ3MWNjZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZXJlbmRl
ci1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLXByZWZldGNoLmxp
bmsgaGFzIE1JTUUgdHlwZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KLVBBU1Mgb25sb2FkIGNh
bGxlZCEKLVRoaXMgdGVzdCB3aWxsIG9ubHkgcHJpbnQgIlBBU1MiIG9yICJGQUlMIiBpZiBsaW5r
IHByZWZldGNoZXMgYXJlIGVuYWJsZWQsIG90aGVyd2lzZSBpdCB3aWxsIHNob3cgbm90aGluZyBi
ZWxvdy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9w
cmVyZW5kZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVy
ZW5kZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3OGY0MmNlZWM2Mzc1
M2QwNjdjMjRiMjhhZWQ3M2ZlYzYzNGM2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJl
cmVuZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08Ym9keT4KLTxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgotPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0PgotZnVuY3Rpb24gcHJlZmV0Y2hfb25sb2Fk
KCkgewotICAgIHRlc3RQYXNzZWQoJ29ubG9hZCBjYWxsZWQhJyk7Ci0gICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKTsKLX0KLTwvc2NyaXB0PgotPGh0bWw+Ci08
cD5UaGlzIHRlc3Qgd2lsbCBvbmx5IHByaW50ICJQQVNTIiBvciAiRkFJTCIgaWYgbGluayBwcmVm
ZXRjaGVzIGFyZQotZW5hYmxlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgc2hvdyBub3RoaW5nIGJlbG93
LjwvcD4KLTxsaW5rIGhyZWY9InByZWZldGNoLmxpbmsiIHJlbD0icHJlcmVuZGVyIiBvbmxvYWQ9
InByZWZldGNoX29ubG9hZCgpIiBvbmVycm9yPSJ0ZXN0RmFpbGVkKCdvbmVycm9yJykiIC8+Ci08
L2h0bWw+Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggODE0NTQ5NjEyNGYzOGY1YzEy
YTRkMTE3OTFkZmJiODg4NGQzMmMyNi4uMGZiMDZhOWQ3MzgzNDk2MWM0YmM2OTcyYmU1MGYyZDE1
MGE4MGU2YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTEwNDQsNyArMTA0NCw2IEBA
IGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1vbmVycm9yLmh0bWwKIGZhc3QvZG9t
L0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1vbmxvYWQuaHRtbAogZmFzdC9kb20vSFRNTExpbmtF
bGVtZW50L3ByZWZldGNoLXRvby1tYW55LWNsaWVudHMuaHRtbAogZmFzdC9kb20vSFRNTExpbmtF
bGVtZW50L3ByZWZldGNoLmh0bWwKLWZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVyZW5kZXIu
aHRtbAogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3N1YnJlc291cmNlLmh0bWwKIGh0dHAvdGVz
dHMvbWlzYy9saW5rLXJlbC1wcmVmZXRjaC1hbmQtc3VicmVzb3VyY2UuaHRtbAogaHR0cC90ZXN0
cy9taXNjL3ByZWZldGNoLXB1cnBvc2UuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRl
eCBhODMyMDk0N2E5NmI3MDVlZGI3ZmMyNGI1YjUxNmQ4ZmFjMTdkMmRmLi5kZjA5Njc4MWYyNWY0
MDk5ZGMxNTkwMTZjNjRmYmE4NzA1N2FmY2UwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApA
QCAtODMzLDcgKzgzMyw2IEBAIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1iZWZv
cmVsb2FkLmh0bWwKIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1vbmVycm9yLmh0
bWwKIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1vbmxvYWQuaHRtbAogZmFzdC9k
b20vSFRNTExpbmtFbGVtZW50L3ByZWZldGNoLXRvby1tYW55LWNsaWVudHMuaHRtbAotZmFzdC9k
b20vSFRNTExpbmtFbGVtZW50L3ByZXJlbmRlci5odG1sCiBmYXN0L2RvbS9IVE1MTGlua0VsZW1l
bnQvc3VicmVzb3VyY2UuaHRtbAogCiAjIFRlc3RzIGZhaWxpbmcgYmVjYXVzZSB0aGUgY29udGV4
dCBtZW51IGlzIGdyYWJiaW5nIG1vdXNlIGV2ZW50cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQK
aW5kZXggYTJiYmMwNDc3ODc2NTU2ZjI0ZmFhY2EwNDA1MWVlNzIzYWE1NmM4YS4uYjU0NzQ0NTEy
ZWI5NGY1ZDVlOGIzYmZhMWU0ZmQ5ZTg3ZWZhNDlmMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQKQEAgLTE5NCw3ICsxOTQsNiBAQCBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlZmV0Y2gt
YmVmb3JlbG9hZC5odG1sCiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlZmV0Y2gtb25lcnJv
ci5odG1sCiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlZmV0Y2gtb25sb2FkLmh0bWwKIGZh
c3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC10b28tbWFueS1jbGllbnRzLmh0bWwKLWZh
c3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVyZW5kZXIuaHRtbAogZmFzdC9kb20vSFRNTExpbmtF
bGVtZW50L3N1YnJlc291cmNlLmh0bWwKIGh0dHAvdGVzdHMvbWlzYy9saW5rLXJlbC1wcmVmZXRj
aC1hbmQtc3VicmVzb3VyY2UuaHRtbAogaHR0cC90ZXN0cy9taXNjL3ByZWZldGNoLXB1cnBvc2Uu
aHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggMDI4YTlhZWNmMWQ5ZmYxOTMwYWU2NzE3
NDgzNTJiZDg0NjEwMTQ3Ny4uOTc0NmVjOTIwMjczYTUyODg3ZDY1Zjk3OWQ4ZjFjODNhMGNlZDI0
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC0xNDIsNyArMTQyLDYgQEAgZmFzdC9kb20v
SFRNTExpbmtFbGVtZW50L3ByZWZldGNoLWJlZm9yZWxvYWQuaHRtbAogZmFzdC9kb20vSFRNTExp
bmtFbGVtZW50L3ByZWZldGNoLW9uZXJyb3IuaHRtbAogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50
L3ByZWZldGNoLW9ubG9hZC5odG1sCiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlZmV0Y2gt
dG9vLW1hbnktY2xpZW50cy5odG1sCi1mYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlcmVuZGVy
Lmh0bWwKIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9zdWJyZXNvdXJjZS5odG1sCiBodHRwL3Rl
c3RzL21pc2MvbGluay1yZWwtcHJlZmV0Y2gtYW5kLXN1YnJlc291cmNlLmh0bWwKIGh0dHAvdGVz
dHMvbWlzYy9wcmVmZXRjaC1wdXJwb3NlLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5k
ZXggM2ZlNzY4NjRkNWM2YjkwZWM2YmRmNDliM2U4NGE2ZWQ0YjZkYzg3YS4uMmYxNDc5ZTVlMDZi
MjdhYTIxZjUxYzU4YTliOTVmZmZjYmU3NTczMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQK
QEAgLTEwOTIsNyArMTA5Miw2IEBAIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1v
bmVycm9yLmh0bWwKIGZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVmZXRjaC1vbmxvYWQuaHRt
bAogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZWZldGNoLXRvby1tYW55LWNsaWVudHMuaHRt
bAogaHR0cC90ZXN0cy9taXNjL2xpbmstcmVsLXByZWZldGNoLWFuZC1zdWJyZXNvdXJjZS5odG1s
Ci1mYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlcmVuZGVyLmh0bWwKIGZhc3QvZG9tL0hUTUxM
aW5rRWxlbWVudC9zdWJyZXNvdXJjZS5odG1sCiBodHRwL3Rlc3RzL21pc2MvcHJlZmV0Y2gtcHVy
cG9zZS5odG1sCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCmluZGV4IGU1ZDI4
NGJlNjM1ZWJlYjRhM2MzMDhlYmQxYzI2MDNiOTA1MDZhNGMuLjU5YjI4MDU3MTQ5MWQzZjA5NDJh
ZTY4NTMwNTMzZjkxZDg1YzA0NDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBl
ZApAQCAtMTYwOSw3ICsxNjA5LDYgQEAgZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZWZldGNo
LW9uZXJyb3IuaHRtbAogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3ByZWZldGNoLW9ubG9hZC5o
dG1sCiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlZmV0Y2gtdG9vLW1hbnktY2xpZW50cy5o
dG1sCiBodHRwL3Rlc3RzL21pc2MvbGluay1yZWwtcHJlZmV0Y2gtYW5kLXN1YnJlc291cmNlLmh0
bWwKLWZhc3QvZG9tL0hUTUxMaW5rRWxlbWVudC9wcmVyZW5kZXIuaHRtbAogZmFzdC9kb20vSFRN
TExpbmtFbGVtZW50L3N1YnJlc291cmNlLmh0bWwKIGh0dHAvdGVzdHMvbWlzYy9wcmVmZXRjaC1w
dXJwb3NlLmh0bWwKIApkaWZmIC0tZ2l0IGEvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZyBiL1dl
YktpdExpYnJhcmllcy9DaGFuZ2VMb2cKaW5kZXggOTZkOTY3ZTc3NmI4YWNiNTFhYWRkNTg2M2Ni
NTM4NzU1NGE0NzRjYi4uZTRlYTE3ZjYwZGM3ZDljMWVhNjc0NGM3MDk4ZGMyZTc5NWQwMGQzNiAx
MDA2NDQKLS0tIGEvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZworKysgYi9XZWJLaXRMaWJyYXJp
ZXMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDMtMjggIEdhdmluIFBldGVycyAg
PGdhdmlucEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIFByZXJlbmRlcmVyIGFuZCBQcmVy
ZW5kZXJIYW5kbGUgZm9yIHNpZ25hbGluZyBvbiA8bGluayByZWw9cHJlcmVuZGVyIC4uPiBlbGVt
ZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgy
NDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IHByZXJlbmRlciBjYXNlIGlzbid0IHF1aXRlIGEgcmVzb3VyY2UgbG9hZCwgYW5kIHVzaW5nIHJl
c291cmNlCisgICAgICAgIGxvYWRpbmcgdG8gcmV0cmlldmUgdGhlbSBoYXMgY29uc3RyYWluZWQg
dGhlIEFQSS4KKworICAgICAgICBUaGUgbmV3IFByZXJlbmRlcmVyIGFuZCBQcmVyZW5kZXJIYW5k
bGUgbGV0IDxsaW5rIHJlbD1wcmVyZW5kZXI+CisgICAgICAgIGVsZW1lbnRzIHNpZ25hbCByZW1v
dmFsIGFuZCB1bmxvYWQgdG8gdGhlaXIgbG9hZGluZyBwbGF0Zm9ybS4KKworICAgICAgICAqIHdp
bi90b29scy92c3Byb3BzL0ZlYXR1cmVEZWZpbmVzLnZzcHJvcHM6CisgICAgICAgICogd2luL3Rv
b2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52c3Byb3BzOgorCiAyMDEyLTAzLTE0ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdyb25nIGljb24gdG8g
cmVzdG9yZSB0byB3aW5kb3dlZCBtb2RlIGluIGZ1bGwgc2NyZWVuIHZpZGVvIHBhbmVsCmRpZmYg
LS1naXQgYS9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXMu
dnNwcm9wcyBiL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5l
cy52c3Byb3BzCmluZGV4IDE4ZTUxM2Q3Zjc1ODdkYmZiMTY4NzdmYWVhZGFkYzU1NDNiMjJjODku
LmQzYWJiYmJlOTJlMjM3OGFjOWFiNGQ4NDI0NjMwZWI3MGEyMTcyNWYgMTAwNjQ0Ci0tLSBhL1dl
YktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lcy52c3Byb3BzCisr
KyBiL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lcy52c3By
b3BzCkBAIC05LDcgKzksNyBAQAogCT4KICAgPFRvb2wKIAkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKTskKEVOQUJMRV8zRF9DQU5WQVMpOyQoRU5BQkxFXzNEX1JFTkRFUklORyk7JChFTkFC
TEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKTskKEVOQUJMRV9CTE9CKTskKEVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORyk7JChFTkFCTEVfQ1NTX0ZJTFRFUlMpOyQoRU5BQkxFX0NTU19HUklEX0xBWU9V
VCk7JChFTkFCTEVfQ1NTX1NIQURFUlMpOyQoRU5BQkxFX0NTU19SRUdJT05TKTskKEVOQUJMRV9D
U1NfRVhDTFVTSU9OUyk7JChFTkFCTEVfU1FMX0RBVEFCQVNFKTskKEVOQUJMRV9EQVRBR1JJRCk7
JChFTkFCTEVfREFUQUxJU1QpOyQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpOyQoRU5BQkxF
X0RFVEFJTFMpOyQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTik7JChFTkFCTEVfRElSRUNUT1JZ
X1VQTE9BRCk7JChFTkFCTEVfRklMVEVSUyk7JChFTkFCTEVfRklMRV9TWVNURU0pOyQoRU5BQkxF
X0ZVTExTQ1JFRU5fQVBJKTskKEVOQUJMRV9HQU1FUEFEKTskKEVOQUJMRV9HRU9MT0NBVElPTik7
JChFTkFCTEVfSUNPTkRBVEFCQVNFKTskKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKTskKEVOQUJM
RV9JTlBVVF9DT0xPUik7JChFTkFCTEVfSU5QVVRfU1BFRUNIKTskKEVOQUJMRV9JTlBVVF9UWVBF
X0RBVEUpOyQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpOyQoRU5BQkxFX0lOUFVUX1RZUEVf
REFURVRJTUVMT0NBTCk7JChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCk7JChFTkFCTEVfSU5QVVRf
VFlQRV9USU1FKTskKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspOyQoRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIpOyQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKTskKEVOQUJMRV9MSU5LX1BS
RUZFVENIKTskKEVOQUJMRV9NQVRITUwpOyQoRU5BQkxFX01FVEVSX1RBRyk7JChFTkFCTEVfTUlD
Uk9EQVRBKTskKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpOyQoRU5BQkxFX05PVElGSUNBVElP
TlMpOyQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpOyQoRU5BQkxFX1BST0dSRVNTX1RBRyk7
JChFTkFCTEVfUVVPVEEpOyQoRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIpOyQoRU5B
QkxFX1NDUklQVEVEX1NQRUVDSCk7JChFTkFCTEVfU0hBRE9XX0RPTSk7JChFTkFCTEVfU0hBUkVE
X1dPUktFUlMpOyQoRU5BQkxFX1NUWUxFX1NDT1BFRCk7JChFTkFCTEVfU1ZHKTskKEVOQUJMRV9T
VkdfRE9NX09CSkNfQklORElOR1MpOyQoRU5BQkxFX1NWR19GT05UUyk7JChFTkFCTEVfVklERU8p
OyQoRU5BQkxFX01FRElBX1NPVVJDRSk7JChFTkFCTEVfTUVESUFfU1RBVElTVElDUyk7JChFTkFC
TEVfV0VCX1NPQ0tFVFMpOyQoRU5BQkxFX1dFQl9USU1JTkcpOyQoRU5BQkxFX1dPUktFUlMpOyQo
RU5BQkxFX1hTTFQpIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iJChFTkFCTEVfUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpOyQoRU5BQkxFXzNEX0NBTlZBUyk7JChFTkFCTEVfM0RfUkVOREVS
SU5HKTskKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpOyQoRU5BQkxFX0JMT0IpOyQoRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HKTskKEVOQUJMRV9DU1NfRklMVEVSUyk7JChFTkFCTEVfQ1NT
X0dSSURfTEFZT1VUKTskKEVOQUJMRV9DU1NfU0hBREVSUyk7JChFTkFCTEVfQ1NTX1JFR0lPTlMp
OyQoRU5BQkxFX0NTU19FWENMVVNJT05TKTskKEVOQUJMRV9TUUxfREFUQUJBU0UpOyQoRU5BQkxF
X0RBVEFHUklEKTskKEVOQUJMRV9EQVRBTElTVCk7JChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVN
Uyk7JChFTkFCTEVfREVUQUlMUyk7JChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKTskKEVOQUJM
RV9ESVJFQ1RPUllfVVBMT0FEKTskKEVOQUJMRV9GSUxURVJTKTskKEVOQUJMRV9GSUxFX1NZU1RF
TSk7JChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpOyQoRU5BQkxFX0dBTUVQQUQpOyQoRU5BQkxFX0dF
T0xPQ0FUSU9OKTskKEVOQUJMRV9JQ09OREFUQUJBU0UpOyQoRU5BQkxFX0lOREVYRURfREFUQUJB
U0UpOyQoRU5BQkxFX0lOUFVUX0NPTE9SKTskKEVOQUJMRV9JTlBVVF9TUEVFQ0gpOyQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURSk7JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSk7JChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKTskKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKTskKEVO
QUJMRV9JTlBVVF9UWVBFX1RJTUUpOyQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSyk7JChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUik7JChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpOyQoRU5B
QkxFX0xJTktfUFJFRkVUQ0gpOyQoRU5BQkxFX0xJTktfUFJFUkVOREVSKTskKEVOQUJMRV9NQVRI
TUwpOyQoRU5BQkxFX01FVEVSX1RBRyk7JChFTkFCTEVfTUlDUk9EQVRBKTskKEVOQUJMRV9NVVRB
VElPTl9PQlNFUlZFUlMpOyQoRU5BQkxFX05PVElGSUNBVElPTlMpOyQoRU5BQkxFX1BBR0VfVklT
SUJJTElUWV9BUEkpOyQoRU5BQkxFX1BST0dSRVNTX1RBRyk7JChFTkFCTEVfUVVPVEEpOyQoRU5B
QkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIpOyQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCk7
JChFTkFCTEVfU0hBRE9XX0RPTSk7JChFTkFCTEVfU0hBUkVEX1dPUktFUlMpOyQoRU5BQkxFX1NU
WUxFX1NDT1BFRCk7JChFTkFCTEVfU1ZHKTskKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1Mp
OyQoRU5BQkxFX1NWR19GT05UUyk7JChFTkFCTEVfVklERU8pOyQoRU5BQkxFX01FRElBX1NPVVJD
RSk7JChFTkFCTEVfTUVESUFfU1RBVElTVElDUyk7JChFTkFCTEVfV0VCX1NPQ0tFVFMpOyQoRU5B
QkxFX1dFQl9USU1JTkcpOyQoRU5BQkxFX1dPUktFUlMpOyQoRU5BQkxFX1hTTFQpIgogCS8+CiAg
IDxVc2VyTWFjcm8KIAkJTmFtZT0iRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FIgpAQCAt
MTkyLDYgKzE5MiwxMSBAQAogCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRydWUiCiAJLz4KICAg
PFVzZXJNYWNybworCQlOYW1lPSJFTkFCTEVfTElOS19QUkVSRU5ERVIiCisJCVZhbHVlPSIiCisJ
CVBlcmZvcm1FbnZpcm9ubWVudFNldD0idHJ1ZSIKKwkvPgorICA8VXNlck1hY3JvCiAJCU5hbWU9
IkVOQUJMRV9NQVRITUwiCiAJCVZhbHVlPSJFTkFCTEVfTUFUSE1MIgogCQlQZXJmb3JtRW52aXJv
bm1lbnRTZXQ9InRydWUiCmRpZmYgLS1naXQgYS9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zz
cHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52c3Byb3BzIGIvV2ViS2l0TGlicmFyaWVzL3dpbi90
b29scy92c3Byb3BzL0ZlYXR1cmVEZWZpbmVzQ2Fpcm8udnNwcm9wcwppbmRleCA4NmRjMDRkNWMw
NjEyNjY1ZjU4YTUzYjljNDQ1NDczMDBkZTVhMDQ1Li4xNmVhZWI4NjY1NjQyMjA0YmJhNTY2ZDlj
YjM3ZGMyMmE5YmVkZDI1IDEwMDY0NAotLS0gYS9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3Zz
cHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52c3Byb3BzCisrKyBiL1dlYktpdExpYnJhcmllcy93
aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lc0NhaXJvLnZzcHJvcHMKQEAgLTksNyArOSw3
IEBACiAJPgogICA8VG9vbAogCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQlQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucz0iJChFTkFCTEVfM0RfQ0FOVkFTKTskKEVOQUJMRV8zRF9SRU5ERVJJTkcp
OyQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyk7JChFTkFCTEVfQkxPQik7JChFTkFCTEVf
Q0hBTk5FTF9NRVNTQUdJTkcpOyQoRU5BQkxFX0NTU19GSUxURVJTKTskKEVOQUJMRV9DU1NfR1JJ
RF9MQVlPVVQpOyQoRU5BQkxFX0NTU19TSEFERVJTKTskKEVOQUJMRV9DU1NfUkVHSU9OUyk7JChF
TkFCTEVfQ1NTX0VYQ0xVU0lPTlMpOyQoRU5BQkxFX1NRTF9EQVRBQkFTRSk7JChFTkFCTEVfREFU
QUdSSUQpOyQoRU5BQkxFX0RBVEFMSVNUKTskKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKTsk
KEVOQUJMRV9ERVRBSUxTKTskKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pOyQoRU5BQkxFX0RJ
UkVDVE9SWV9VUExPQUQpOyQoRU5BQkxFX0ZJTFRFUlMpOyQoRU5BQkxFX0ZJTEVfU1lTVEVNKTsk
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSk7JChFTkFCTEVfR0FNRVBBRCk7JChFTkFCTEVfR0VPTE9D
QVRJT04pOyQoRU5BQkxFX0lDT05EQVRBQkFTRSk7JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSk7
JChFTkFCTEVfSU5QVVRfQ09MT1IpOyQoRU5BQkxFX0lOUFVUX1NQRUVDSCk7JChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFKTskKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKTskKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEVUSU1FTE9DQUwpOyQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpOyQoRU5BQkxF
X0lOUFVUX1RZUEVfVElNRSk7JChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKTskKEVOQUJMRV9KQVZB
U0NSSVBUX0RFQlVHR0VSKTskKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUyk7JChFTkFCTEVf
TElOS19QUkVGRVRDSCk7JChFTkFCTEVfTUFUSE1MKTskKEVOQUJMRV9NRVRFUl9UQUcpOyQoRU5B
QkxFX01JQ1JPREFUQSk7JChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKTskKEVOQUJMRV9OT1RJ
RklDQVRJT05TKTskKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKTskKEVOQUJMRV9QUk9HUkVT
U19UQUcpOyQoRU5BQkxFX1FVT1RBKTskKEVOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVS
KTskKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpOyQoRU5BQkxFX1NIQURPV19ET00pOyQoRU5BQkxF
X1NIQVJFRF9XT1JLRVJTKTskKEVOQUJMRV9TVFlMRV9TQ09QRUQpOyQoRU5BQkxFX1NWRyk7JChF
TkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKTskKEVOQUJMRV9TVkdfRk9OVFMpOyQoRU5BQkxF
X1ZJREVPKTskKEVOQUJMRV9NRURJQV9TT1VSQ0UpOyQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1Mp
OyQoRU5BQkxFX1dFQl9TT0NLRVRTKTskKEVOQUJMRV9XRUJfVElNSU5HKTskKEVOQUJMRV9XT1JL
RVJTKTskKEVOQUJMRV9YU0xUKSIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiQoRU5BQkxF
XzNEX0NBTlZBUyk7JChFTkFCTEVfM0RfUkVOREVSSU5HKTskKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpOyQoRU5BQkxFX0JMT0IpOyQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKTskKEVO
QUJMRV9DU1NfRklMVEVSUyk7JChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKTskKEVOQUJMRV9DU1Nf
U0hBREVSUyk7JChFTkFCTEVfQ1NTX1JFR0lPTlMpOyQoRU5BQkxFX0NTU19FWENMVVNJT05TKTsk
KEVOQUJMRV9TUUxfREFUQUJBU0UpOyQoRU5BQkxFX0RBVEFHUklEKTskKEVOQUJMRV9EQVRBTElT
VCk7JChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUyk7JChFTkFCTEVfREVUQUlMUyk7JChFTkFC
TEVfREVWSUNFX09SSUVOVEFUSU9OKTskKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKTskKEVOQUJM
RV9GSUxURVJTKTskKEVOQUJMRV9GSUxFX1NZU1RFTSk7JChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
OyQoRU5BQkxFX0dBTUVQQUQpOyQoRU5BQkxFX0dFT0xPQ0FUSU9OKTskKEVOQUJMRV9JQ09OREFU
QUJBU0UpOyQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpOyQoRU5BQkxFX0lOUFVUX0NPTE9SKTsk
KEVOQUJMRV9JTlBVVF9TUEVFQ0gpOyQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSk7JChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRSk7JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKTsk
KEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKTskKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpOyQoRU5B
QkxFX0lOUFVUX1RZUEVfV0VFSyk7JChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUik7JChFTkFC
TEVfTEVHQUNZX05PVElGSUNBVElPTlMpOyQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpOyQoRU5BQkxF
X0xJTktfUFJFUkVOREVSKTskKEVOQUJMRV9NQVRITUwpOyQoRU5BQkxFX01FVEVSX1RBRyk7JChF
TkFCTEVfTUlDUk9EQVRBKTskKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpOyQoRU5BQkxFX05P
VElGSUNBVElPTlMpOyQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpOyQoRU5BQkxFX1BST0dS
RVNTX1RBRyk7JChFTkFCTEVfUVVPVEEpOyQoRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRM
RVIpOyQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCk7JChFTkFCTEVfU0hBRE9XX0RPTSk7JChFTkFC
TEVfU0hBUkVEX1dPUktFUlMpOyQoRU5BQkxFX1NUWUxFX1NDT1BFRCk7JChFTkFCTEVfU1ZHKTsk
KEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpOyQoRU5BQkxFX1NWR19GT05UUyk7JChFTkFC
TEVfVklERU8pOyQoRU5BQkxFX01FRElBX1NPVVJDRSk7JChFTkFCTEVfTUVESUFfU1RBVElTVElD
Uyk7JChFTkFCTEVfV0VCX1NPQ0tFVFMpOyQoRU5BQkxFX1dFQl9USU1JTkcpOyQoRU5BQkxFX1dP
UktFUlMpOyQoRU5BQkxFX1hTTFQpIgogCS8+CiAgIDxVc2VyTWFjcm8KIAkJTmFtZT0iRU5BQkxF
XzNEX0NBTlZBUyIKQEAgLTE4Nyw2ICsxODcsMTEgQEAKIAkJUGVyZm9ybUVudmlyb25tZW50U2V0
PSJ0cnVlIgogCS8+CiAgIDxVc2VyTWFjcm8KKwkJTmFtZT0iRU5BQkxFX0xJTktfUFJFUkVOREVS
IgorCQlWYWx1ZT0iIgorCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRydWUiCisJLz4KKyAgPFVz
ZXJNYWNybwogCQlOYW1lPSJFTkFCTEVfTUFUSE1MIgogCQlWYWx1ZT0iRU5BQkxFX01BVEhNTCIK
IAkJUGVyZm9ybUVudmlyb25tZW50U2V0PSJ0cnVlIgo=
</data>
<flag name="review"
          id="138588"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>