<?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>103457</bug_id>
          
          <creation_ts>2012-11-27 15:19:39 -0800</creation_ts>
          <short_desc>[WK2] Forward cookie jar calls to NetworkProcess</short_desc>
          <delta_ts>2012-11-29 21:41:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>fishd</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>777267</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-27 15:19:39 -0800</bug_when>
    <thetext>DOM and programmatic cookie access should happen in network process, because this is where loading happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777294</commentid>
    <comment_count>1</comment_count>
      <attachid>176353</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-27 15:59:36 -0800</bug_when>
    <thetext>Created attachment 176353
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777303</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-27 16:03:10 -0800</bug_when>
    <thetext>Attachment 176353 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777310</commentid>
    <comment_count>3</comment_count>
      <attachid>176353</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-27 16:07:33 -0800</bug_when>
    <thetext>Comment on attachment 176353
proposed patch

Attachment 176353 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15010299</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777313</commentid>
    <comment_count>4</comment_count>
      <attachid>176353</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-27 16:08:54 -0800</bug_when>
    <thetext>Comment on attachment 176353
proposed patch

Attachment 176353 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15026185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777350</commentid>
    <comment_count>5</comment_count>
      <attachid>176353</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-27 16:32:46 -0800</bug_when>
    <thetext>Comment on attachment 176353
proposed patch

Attachment 176353 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15025163</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777391</commentid>
    <comment_count>6</comment_count>
      <attachid>176372</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-27 17:03:35 -0800</bug_when>
    <thetext>Created attachment 176372
with build fixes

Added strategy implementations for each WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777399</commentid>
    <comment_count>7</comment_count>
      <attachid>176372</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-27 17:12:20 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

Attachment 176372 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15026209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777424</commentid>
    <comment_count>8</comment_count>
      <attachid>176372</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-27 17:53:07 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

Attachment 176372 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15023238</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777489</commentid>
    <comment_count>9</comment_count>
      <attachid>176372</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-27 20:40:10 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

Attachment 176372 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15016267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777491</commentid>
    <comment_count>10</comment_count>
      <attachid>176372</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-27 20:46:24 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

Attachment 176372 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15027268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777779</commentid>
    <comment_count>11</comment_count>
      <attachid>176372</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 05:22:02 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

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

Patches like this make my unhappy.  As a consequence of supporting WebKit2, you&apos;ve now added an extra layer of indirection for everyone, including ports that don&apos;t care to support WebKit2, and added ifdefs to 9 functions.  Give your previous resistance to adding complexity and ifdefs to WebKit to support Chromium, I&apos;m surprised that you find these sorts of patches acceptable.

&gt; Source/WebCore/loader/CookieJar.cpp:61
&gt; +#if USE(PLATFORM_STRATEGIES)
&gt; +    return platformStrategies()-&gt;cookiesStrategy()-&gt;cookiesForDOM(networkingContext(document), document-&gt;firstPartyForCookies(), url);
&gt; +#else

It&apos;s unfortunate that you can&apos;t put the platformStrategies code in a separate CPP file, for example CookieJarWebKit2.cpp.  I suspect you would be unhappy if we put USE(PLATFORM_SUPPORT) ifdefs in CookieJar.cpp back when Chromium used PlatformSupport.

&gt; Source/WebCore/platform/Cookie.h:38
&gt; +        Cookie() { }

Please initialize scalars in these sorts of constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777780</commentid>
    <comment_count>12</comment_count>
      <attachid>176372</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 05:22:51 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

I think we should find a way of implementing this feature without adding WebKit2-specific ifdefs to cross-port files like CookeJar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777789</commentid>
    <comment_count>13</comment_count>
      <attachid>176372</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 05:27:07 -0800</bug_when>
    <thetext>Comment on attachment 176372
with build fixes

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

&gt; Source/WebKit/efl/WebCoreSupport/PlatformStrategiesEfl.cpp:86
&gt; +    return WebCore::cookiesForDOM(context, firstParty, url);

There&apos;s how I would restructure this patch to avoid forking CookieJar.cpp:

1) For ports that USE(PLATFORM_STRATEGIES), rename these symbols to not collide with the symbols called by CookieJar.cpp.
2) Add a PlatformStrategiesCookieJar.cpp that implements these symbols in terms of PlatformStrategies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777954</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 08:58:27 -0800</bug_when>
    <thetext>&gt; I suspect you would be unhappy if we put USE(PLATFORM_SUPPORT) ifdefs in CookieJar.cpp back when Chromium used PlatformSupport.

The difference is that WebKit2 is what nearly all WebKit ports use, while Chromium is just one port, and one that has historically standing in the project due to using a lot of unique approaches.

Isolating platform strategies code into separate files makes no sense for the project. I intend to stick to the approach in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777957</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 09:00:53 -0800</bug_when>
    <thetext>I disagree.  As far as I can tell, there&apos;s no reason you need to add ifdefs to this file that is used both by WebKit2 ports and by ports that don&apos;t wish to use WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778008</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 10:05:39 -0800</bug_when>
    <thetext>More files with duplicated code mean more maintenance burden. There is also a significant cognitive burden - we already have PLATFORM_STRATEGIES ifdefs, but now some of these decisions will be hardwired in project files, and some remain as ifdefs.

I do not think that needs of ports that don&apos;t use WebKit2 are a priority for the project. If there is a strong desire to avoid ifdefs, I wouldn&apos;t object to increased forking for those, if we can also agree that mainline port maintainers are not obligated to keep these building, and agree to remove those ports from EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778013</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 10:13:54 -0800</bug_when>
    <thetext>There are many things I dislike about PlatformStrategies, too - the ifdefs are ugly, and if you look at this patch, adding functions to strategies is a huge pain because multiple WebKit1 ports need to be updated.

But I don&apos;t think that having a fight about indirection in this particular bug is the most constructive way forward. These calls are not performance sensitive, and PlatformStrategies are our current solution for the need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778058</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 10:47:38 -0800</bug_when>
    <thetext>&gt; I do not think that needs of ports that don&apos;t use WebKit2 are a priority for the project.

If that how you feel, it sounds like we need to discuss this topic on webkit-dev.  I do think that the needs of ports that don&apos;t use WebKit2 are a priority for the project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778235</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 12:55:12 -0800</bug_when>
    <thetext>Adam, do you intend to block landing this patch for the meta discussion? You&apos;ve recently blocked landing of another NetworkProcess patch, and this is becoming difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778238</commentid>
    <comment_count>20</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-11-28 12:56:44 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; I do not think that needs of ports that don&apos;t use WebKit2 are a priority for the project.
&gt; 
&gt; If that how you feel, it sounds like we need to discuss this topic on webkit-dev.  I do think that the needs of ports that don&apos;t use WebKit2 are a priority for the project.

Obviously the needs of the Chromium port are a priority for the project, as a substantial number of core contributors use it as their primary port for development. I hope Alexey did not mean to imply otherwise.


-- More broadly:

I feel like in these discussions we should draw a distinction between Chromium on the one hand, and relatively minor single-process-only ports on the other. It seems to me that essentially all non-Chromium ports that are very active (large community of active contributors, have buildbots, consistently actively maintained) have a WebKit2 port. So really saying &quot;ports that don&apos;t use WebKit2&quot; basically means &quot;the Chromium port&quot; and &quot;WebKit2-specific changes&quot; means &quot;changes applying to basically all ports but Chromium&quot;. I agree that the Chromium concerns are important but I think it clouds the issue to imply that WebKit2-based ports are somehow unusual as opposed to the norm or that Chromium concerns apply to a broad range of critical ports.


-- Looking forward:

I feel like we need to work out a system for doing process indirection that is reasonable for the needs of all ports, Chromium and otherwise. So far I have been frustrated at our inability to make progress on this. There needs to be some offline discussion, most likely in person. The divergence on how to do multiprocess is a source of ongoing friction and we don&apos;t seem to be making progress by debating this in individual bugs.

In this specific patch, to me your feedback looks like asking non-Chromium ports to make their code more complex so that Chromium code can be simpler, down to even asking to make a fork of a cross-platform file that all the major non-Chromium ports would use, to avoid adding some ifdefs to the file that Chromium would use. I feel like this does not really minimize cognitive complexity for the project as a whole. I am sure your perspective is different. (And maybe I misunderstood the request.) But understanding each other&apos;s perspectives is the first step to finding an approach we can all agree on or at least live with.

I hope we can continue this wider discussion about aligning strategies in other venues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778303</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 13:53:45 -0800</bug_when>
    <thetext>&gt; In this specific patch, to me your feedback looks like asking non-Chromium ports to make their code more complex so that Chromium code can be simpler, down to even asking to make a fork of a cross-platform file that all the major non-Chromium ports would use, to avoid adding some ifdefs to the file that Chromium would use.

I&apos;m not sure I explained what I had in mind clearly.  Let&apos;s take setCookies as an example.  Currently, all ports link in the setCookies implementation in [1].  setCookies then calls setCookiesFromDOM, which is declared in [2] and implemented separately for each platform (e.g., [3], [4], [5]).  This design was introduced just recently by Alexey in [6].

What I&apos;m suggesting is that all ports continue to use the implementation of setCookies in [1], but that ports that wish to USE(PLATFORM_STRATEGIES) supply a PlatformCookieJar.cpp that implements the setCookiesFromDOM function from [2].  That implementation can then call CookiesStrategy::setCookiesFromDOM much in the same way that the cookiesForDOM implementation in [5] calls WebCookieJar::setCookie.

This approach avoids introducing USE(PLATFORM_STRATEGIES) ifdefs.  Instead, it uses the existing PlatformCookieJar.h abstraction to let different ports supply different cookie jar implementations.

[1] http://trac.webkit.org/browser/trunk/Source/WebCore/loader/CookieJar.cpp
[2] http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/PlatformCookieJar.h
[3] http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/mac/CookieJarMac.mm
[4] http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/qt/CookieJarQt.cpp
[5] http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/chromium/CookieJarChromium.cpp
[6] https://bugs.webkit.org/show_bug.cgi?id=101621

&gt; I feel like this does not really minimize cognitive complexity for the project as a whole. I am sure your perspective is different. (And maybe I misunderstood the request.)

The choice is essentially between a bunch of USE(PLATFORM_STRATEGIES) ifdefs in [1] or a PlatformCookieJar.cpp implementation of PlatformCookieJar.h that ports link in when defining USE(PLATFORM_STRATEGIES).

An even better design would be to find a way to have all ports share the CookieStrategy interface.  In particular, the functions that Alexey is adding to CookieStrategy look very similar to the functions declared in this header:

http://trac.webkit.org/browser/trunk/Source/Platform/chromium/public/WebCookieJar.h

If we could agree on the names, types, and stability of these functions, then we could merge CookieJar.cpp, CookieJarChromium.cpp, and PlatformCookieJar.cpp into a single CookieJar.cpp with no extra cognitive overhead for anyone.  (I tried to sketch out how that might work in https://bugs.webkit.org/show_bug.cgi?id=99483#c16, but I suspect a bugzilla comment isn&apos;t a good medium for explaining how that would work.)

&gt; I hope we can continue this wider discussion about aligning strategies in other venues.

That sounds like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778323</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 14:09:13 -0800</bug_when>
    <thetext>&gt; I agree that the Chromium concerns are important but I think it clouds the issue to imply that WebKit2-based ports are somehow unusual as opposed to the norm or that Chromium concerns apply to a broad range of critical ports.

This precisely matches where I am coming from, the &quot;not a priority&quot; statement I made was not accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778480</commentid>
    <comment_count>23</comment_count>
      <attachid>176600</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-28 16:34:27 -0800</bug_when>
    <thetext>Created attachment 176600
more build fixes

I need more time to think about Adam&apos;s proposal. I don&apos;t fully understand it yet, it seems that we&apos;d get a lot of duplicated code, or perhaps an extra level of indirection for all non-chromium ports.

Please let me try to get a green EWS with this approach first.

&gt; In particular, the functions that Alexey is adding to CookieStrategy look very similar to the functions declared in this header

I think that it is a good idea to encapsulate a storage session in a class, however a CookieJar is probably not the right one. On the Mac, there is no separate cookie storage, it&apos;s part of session storage, so a CookieJar class would be quite tricky to align with Mac APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778486</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-28 16:39:40 -0800</bug_when>
    <thetext>&gt; &gt; In particular, the functions that Alexey is adding to CookieStrategy look very similar to the functions declared in this header
&gt; 
&gt; I think that it is a good idea to encapsulate a storage session in a class, however a CookieJar is probably not the right one. On the Mac, there is no separate cookie storage, it&apos;s part of session storage, so a CookieJar class would be quite tricky to align with Mac APIs.

I think you&apos;re getting hung up on the name.  If you look at the functions in WebCookieJar, you&apos;ll find that they&apos;re the same as the ones you&apos;re adding to CookieStrategy.  The only difference is that you&apos;re passing a NetworkingContext as the first parameter, which is something we could do in a common approach as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778581</commentid>
    <comment_count>25</comment_count>
      <attachid>176600</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-28 18:19:32 -0800</bug_when>
    <thetext>Comment on attachment 176600
more build fixes

Attachment 176600 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15025558</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779135</commentid>
    <comment_count>26</comment_count>
      <attachid>176752</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 10:17:59 -0800</bug_when>
    <thetext>Created attachment 176752
more build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779436</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 14:22:31 -0800</bug_when>
    <thetext>I&apos;d like to discuss Adam&apos;s concrete proposal for this patch. I don&apos;t think that deeper architectural improvements should block landing it. We have a large number of strategy functions already.

&gt; What I&apos;m suggesting is that all ports continue to use the implementation of setCookies in [1], but that 
&gt; ports that wish to USE(PLATFORM_STRATEGIES) supply a PlatformCookieJar.cpp that implements the 
&gt; setCookiesFromDOM function from [2].  That implementation can then call 
&gt; CookiesStrategy::setCookiesFromDOM much in the same way that the cookiesForDOM implementation in 
&gt; [5] calls WebCookieJar::setCookie.
&gt;
&gt; This approach avoids introducing USE(PLATFORM_STRATEGIES) ifdefs.  Instead, it uses the existing 
&gt; PlatformCookieJar.h abstraction to let different ports supply different cookie jar implementations.

So if I understand this suggestion correctly, we&apos;d have a copy of code that calls strategies in CookieJarMac.mm, CookieJarWin.cpp, CookieJarQt.cpp and so on? Furthermore, we&apos;d still have USE(PLATFORM_STRATEGIES) in some of these, because each platform file may be used both by ports that use strategies, and ports that don&apos;t. There is no reason to have a copy of Windows API cookie access code in two files, one that uses strategy, and one that doesn&apos;t

Furthermore, we still have some uncertainty on whether PlatformStrategies code should live in platform or outside. I want to keep files like CookieJarMac.mm as pure interfaces to underlying platform as possible. It&apos;s not entirely the case now (we call out to get default storage session, for instance), but I think that OS API interface should be kept separate from process model logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779443</commentid>
    <comment_count>28</comment_count>
      <attachid>176752</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 14:29:25 -0800</bug_when>
    <thetext>Comment on attachment 176752
more build fixes

I think that having ifdefs in this bottleneck file is a better solution than short term alternatives we have, so putting back under review.

The real tangible burden is having to update all platforms in lockstep, and as evidenced by this patch, strategies don&apos;t make it very easy. Engineers working on most ports have to pay this cost, and will inevitably be looking at ways to improve the solution.

I don&apos;t think that adding more isolation between platforms - especially at the cost of more duplicated code - is the right direction. It may make reading the code easier initially, but once you try to make a patch, you are suddenly dealing with more complicated code, multiplied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779508</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-29 15:26:54 -0800</bug_when>
    <thetext>&gt; So if I understand this suggestion correctly, we&apos;d have a copy of code that calls strategies in CookieJarMac.mm, CookieJarWin.cpp, CookieJarQt.cpp and so on?

No, that is not a correct understanding of the proposal in comment #21.  I&apos;m proposing that you create a new file named PlatformCookieJar.cpp that calls the strategy.  There is no duplicated code in this approach.

&gt; Furthermore, we&apos;d still have USE(PLATFORM_STRATEGIES) in some of these, because each platform file may be used both by ports that use strategies, and ports that don&apos;t.

Currently there is a one-to-one correspondence between ports and CookieJarFoo.cpp files, so I don&apos;t think this case actually occurs.

&gt; Furthermore, we still have some uncertainty on whether PlatformStrategies code should live in platform or outside. I want to keep files like CookieJarMac.mm as pure interfaces to underlying platform as possible.

My proposal does not involve modifying CookieJarMac.mm (other than perhaps renaming the functions to not collide with the symbols in PlatformCookieJar.cpp).

&gt; I think that having ifdefs in this bottleneck file is a better solution than short term alternatives we have, so putting back under review.

I disagree for the reasons stated above.  Specifically, I don&apos;t see any technical reason why we should put USE(PLATFORM_STRATEGIES) ifdefs in CookieJar.cpp.  We can simply put the USE(PLATFORM_STRATEGIES) code in PlatformCookieJar.cpp and have PlatformCookieJar.cpp call through to CookieStrategy the same way that CookieJarChromium.cpp calls through to WebCookieJar.

As a though exercise, consider how you would react if I told you that we should have a USE(PLATFORM_API) ifdef in CookieJar.cpp.  Further imagine that code behind the USE(PLATFORM_API) ifdef did precisely what the code in CookieJarChromium.cpp does today and that I asked you to move the CookieStrategy code to a separate CookieJarWebKit2.cpp file.  I suspect you would question why USE(PLATFORM_API) code ought to live in CookieJar.cpp but the WebKit2-related code had to live in a separate file.

As far as I can tell, the situations are symmetric and ought to be treated as such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779554</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 15:57:30 -0800</bug_when>
    <thetext>&gt; No, that is not a correct understanding of the proposal in comment #21.  I&apos;m proposing that you create a new file named PlatformCookieJar.cpp that calls the strategy.  There is no duplicated code in this approach.

Sorry, I tried to read the proposal this way, but I couldn&apos;t see a meaningful way to turn the idea into something workable, so I imagined a different once.

We&apos;d need to change signatures of functions that actually use platform APIs (like the ones in CookieJarMac.mm), so that they don&apos;t collide with PlatformCookieJar. We&apos;d need a header for those, say RealUnderlyingPlatformCookieJar.h. So, we&apos;d have CookieJar.h, PlatformCookieJar.h, and RealUnderlyingPlatformCookieJar.h.

And when we are done with this, we&apos;ll have a number of confusingly similar functions that don&apos;t do much. CookieJar will only unwrap Document into NetworkingContext. PlatformCookieJar will only call a strategy, not even being a sensible part of &quot;platform&quot;.

We&apos;ll have an additional level of indirection, too.

It will be much more work to me now, as every CookieJarXXX implementation (and corresponding exports) except for chromium one will need to be updated for the new signature.

I see an tremendous amount of downside for not using an ifdef in a file that&apos;s already a special purpose bottleneck one.

&gt; As far as I can tell, the situations are symmetric and ought to be treated as such.

This is not how I see it at all. WebKit2 is a process architecture that a lot of ports use. The fact that it&apos;s mostly implemented in a separate top level directory and not in WebCore should not make it look like just a port among dozens.

Especially in the context of OS API wrappers like CookieJar, it&apos;s distinct from any port in that it only provides marshaling, and ultimately relies on also having a port-specific implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779562</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-29 16:06:32 -0800</bug_when>
    <thetext>&gt; We&apos;d need to change signatures of functions that actually use platform APIs (like the ones in CookieJarMac.mm), so that they don&apos;t collide with PlatformCookieJar. We&apos;d need a header for those, say RealUnderlyingPlatformCookieJar.h. So, we&apos;d have CookieJar.h, PlatformCookieJar.h, and RealUnderlyingPlatformCookieJar.h.

That sounds exactly like what you just did in bug 101621.

&gt; &gt; As far as I can tell, the situations are symmetric and ought to be treated as such.
&gt; 
&gt; This is not how I see it at all. WebKit2 is a process architecture that a lot of ports use. The fact that it&apos;s mostly implemented in a separate top level directory and not in WebCore should not make it look like just a port among dozens.

I suspect that&apos;s the core of the disagreement.  I don&apos;t think the Chromium port should be treated as a second-class citizen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779567</commentid>
    <comment_count>32</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 16:10:04 -0800</bug_when>
    <thetext>&gt; I don&apos;t think the Chromium port should be treated as a second-class citizen.

Chromium is a port though, not an architecture used by most ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779574</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 16:21:23 -0800</bug_when>
    <thetext>&gt; That sounds exactly like what you just did in bug 101621.

As you know, the plan of record is to merge CookieJar functions into call sites. There is some easy work there (rename the functions at call sites and call networkingContext() in place). Coming up with a syntax that supports strategies while being acceptable to chromium is not that easy, but we&apos;ll have to do that sooner or later anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779596</commentid>
    <comment_count>34</comment_count>
      <attachid>176752</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-29 16:53:26 -0800</bug_when>
    <thetext>Comment on attachment 176752
more build fixes

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

&gt; Source/WebCore/platform/Cookie.h:38
&gt; +        Cookie() { }

Should this initialize the double and the bools?

&gt; Source/WebKit/efl/WebCoreSupport/PlatformStrategiesEfl.cpp:87
&gt; +String PlatformStrategiesEfl::cookiesForDOM(NetworkingContext* context, const KURL&amp; firstParty, const KURL&amp; url)
&gt; +{
&gt; +    return WebCore::cookiesForDOM(context, firstParty, url);
&gt; +}

Can we do this with a default implementation in the base class rather than repeating this for every platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779698</commentid>
    <comment_count>35</comment_count>
      <attachid>176752</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-29 18:15:38 -0800</bug_when>
    <thetext>Comment on attachment 176752
more build fixes

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

Thank you for review!

&gt;&gt; Source/WebCore/platform/Cookie.h:38
&gt;&gt; +        Cookie() { }
&gt; 
&gt; Should this initialize the double and the bools?

There is no need for this here, because data members will be filled when decoding a message. I don&apos;t like code that does unneeded work much, and default values for these member variables would not necessarily be safe as fallback for code that uses this constructor in the future.

&gt;&gt; Source/WebKit/efl/WebCoreSupport/PlatformStrategiesEfl.cpp:87
&gt;&gt; +}
&gt; 
&gt; Can we do this with a default implementation in the base class rather than repeating this for every platform?

Hmm, I should think about this. Going to land as is for now, but I&apos;ll be changing signatures of these functions soon, and may do it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779729</commentid>
    <comment_count>36</comment_count>
      <attachid>176752</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 18:33:43 -0800</bug_when>
    <thetext>Comment on attachment 176752
more build fixes

Clearing flags on attachment: 176752

Committed r136197: &lt;http://trac.webkit.org/changeset/136197&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779730</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 18:33:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779802</commentid>
    <comment_count>38</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-11-29 21:41:38 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 176752 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176752&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/Cookie.h:38
&gt; &gt; +        Cookie() { }
&gt; 
&gt; Should this initialize the double and the bools?
&gt; 
&gt; &gt; Source/WebKit/efl/WebCoreSupport/PlatformStrategiesEfl.cpp:87
&gt; &gt; +String PlatformStrategiesEfl::cookiesForDOM(NetworkingContext* context, const KURL&amp; firstParty, const KURL&amp; url)
&gt; &gt; +{
&gt; &gt; +    return WebCore::cookiesForDOM(context, firstParty, url);
&gt; &gt; +}
&gt; 
&gt; Can we do this with a default implementation in the base class rather than repeating this for every platform?

Whoah, r+ing when another reviewer still had clear objections to the approach (and then landing based on that) is not a cool thing to do. I realize the conversation was getting frustrating for all involved, but this shouldn&apos;t be the way we do things in the WebKit project. What&apos;s going on here?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176353</attachid>
            <date>2012-11-27 15:59:36 -0800</date>
            <delta_ts>2012-11-27 17:03:35 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>CookieStrategy.txt</filename>
            <type>text/plain</type>
            <size>38976</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29v
a2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFBsYXRmb3JtQ29va2llSmFy
LmggZnVuY3Rpb25zIGFyZSBub3cgdXNlZCBpbiBXZWJLaXQyLgorCisgICAgICAgICogbG9hZGVy
L0Nvb2tpZUphci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICBVc2UgYSBzdHJhdGVneSBpbnN0ZWFkIG9mIGdv
aW5nIHRvIFBsYXRmb3JtQ29va2llSmFyIGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0v
Q29va2llLmg6IChDb29raWUpOiBBZGRlZCBhIGRlZmF1bHQgY29uc3RydWN0b3IsIHNvIHRoYXQg
Q29va2llIGNvdWxkIGJlCisgICAgICAgIHNlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZnVuY3Rpb25zIGZvciBjb29raWUgamFyLgor
CiAyMDEyLTExLTI3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5kZXhlZERCOiBTaW1wbGlmeSB0cmFuc2FjdGlvbiB0aW1lcnMgYW5kIGV2ZW50IHRyYWNr
aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIwNSw2ICsyMDUsNyBA
QCBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvckQxRXYKIF9fWk43V2ViQ29yZTEyY2FjaGVTdG9y
YWdlRXYKIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNE5vZGVFTlNfMTNFQ2hpbGRy
ZW5Pbmx5RVBOM1dURjZWZWN0b3JJUFMwX0xtMEVFRU5TXzEzRUFic29sdXRlVVJMc0VQTlM1X0lO
U18xM1F1YWxpZmllZE5hbWVFTG0wRUVFCiBfX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05T
XzVSYW5nZUVQTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFRUVOU18yM0VBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlRWJOU18xM0VBYnNvbHV0ZVVSTHNFCitfX1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tp
ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgog
X19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYKQEAgLTIzMCw4ICsyMzEs
MTAgQEAgX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNv
cmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVt
ZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxM1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJvcGVy
dHlFTlNfMTNDU1NQcm9wZXJ0eUlERWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBlc0Vi
CitfX1pON1dlYkNvcmUxM2Nvb2tpZXNGb3JET01FUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktO
U180S1VSTEVTNF8KIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0
b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTEzZ2V0UmF3Q29va2llc0VQTlNf
MTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JOM1dURjZWZWN0b3JJTlNfNkNvb2tp
ZUVMbTBFRUUKIF9fWk43V2ViQ29yZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19a
TjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9f
Wk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQpAQCAtMjc2LDYgKzI3OSw3
IEBAIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb245c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29y
ZTE0RnJhbWVTZWxlY3Rpb25DMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTRMb2FkZXJTdHJh
dGVneTIxcmVzb3VyY2VMb2FkU2NoZWR1bGVyRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1l
bnQxMHBsdWdpbk5vZGVFdgorX19aTjdXZWJDb3JlMTRjb29raWVzRW5hYmxlZEVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0XwogX19aTks3V2ViQ29yZTVGcmFtZTI1dHJhY2tl
ZFJlcGFpbnRSZWN0c0FzVGV4dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdzZXRUcmFja3NS
ZXBhaW50c0ViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjByZXNldFRyYWNrZWRSZXBhaW50c0V2
CkBAIC00NzYsNiArNDgwLDcgQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktO
U18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3Np
dGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43
V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW5nZUUKK19fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0VQTlNfMTdOZXR3b3JraW5nQ29udGV4dEUKIF9fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185Rmxv
YXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCkBAIC00OTksNiArNTA0LDcg
QEAgX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUAogX19aTjdXZWJDb3Jl
MTdWaWV3cG9ydEFyZ3VtZW50czE5ZGVwcmVjYXRlZFRhcmdldERQSUUKIF9fWk43V2ViQ29yZTE3
Y2FjaGVET01TdHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVy
ZUVQS05TMl85Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04z
V1RGNlN0cmluZ0VSaQorX19aTjdXZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVu
c2lvbkMxRVBOU181RnJhbWVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThI
VE1MQ29udGVudEVsZW1lbnQ2Y3JlYXRlRVBOU184RG9jdW1lbnRFCkBAIC02MzgsNiArNjQ0LDcg
QEAgX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTgogX19aTjdXZWJDb3Jl
MjNkYXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVI
b3N0TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29k
ZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKK19fWk43V2ViQ29yZTIzZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXNFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUk4zV1RGN0hhc2hT
ZXRJTlMyXzZTdHJpbmdFTlMyXzEwU3RyaW5nSGFzaEVOUzJfMTBIYXNoVHJhaXRzSVM0X0VFRUUK
IF9fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMw
XzZTdHJpbmdFTlMwXzEwU3RyaW5nSGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43
V2ViQ29yZTI0QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyMTd3cml0ZVByb3BlcnR5TGlzdEV2CiBf
X1pON1dlYkNvcmUyNENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTExc2V0UmVzb3VyY2VFUE5TXzE0
Q2FjaGVkUmVzb3VyY2VFCkBAIC02NTcsNiArNjY0LDcgQEAgX19aTjdXZWJDb3JlMjRGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXJDMgogX19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2
ZXJEMkV2CiBfX1pON1dlYkNvcmUyNGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3Vt
ZW50RVJLTjNXVEY2U3RyaW5nRVM1X05TXzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQog
X19aTjdXZWJDb3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCitf
X1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVQTlNfMTdOZXR3b3JraW5nQ29u
dGV4dEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdl
ZEUKQEAgLTY4Niw2ICs2OTQsNyBAQCBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlCiBfX1pON1dlYkNvcmUyNmRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlRXYKIF9fWk43
V2ViQ29yZTI4ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTI4cmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgorX19aTjdXZWJDb3Jl
Mjljb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVS
S05TXzRLVVJMRVM0XwogX19aTjdXZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1w
dEVpYgogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRGVjb2RpbmdXaXRoUmFuZ2VFUDhOU1N0
cmluZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRW5jb2RpbmdXaXRoUmFu
Z2VFUDhOU1N0cmluZzhfTlNSYW5nZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02MDcwLDcgKzYwNzAsNyBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07
CiAJCUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAx
RTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJB
NzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdl
TWFjLm1tICovOyB9OwotCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29r
aWVKYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlF
MTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYz
MkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxNDI0QzkwMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVK
YXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovOyB9OwogCQlFMTQy
NEM5MzE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuY3BwICovOyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2ll
SmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQy
NEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2ll
SmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKKyNpZiBVU0UoUExBVEZPUk1f
U1RSQVRFR0lFUykKKyNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNl
cnJvciBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2VzIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVz
ZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCiAjZW5kaWYKQEAgLTUxLDQ3ICs1Niw4MyBAQCBzdGF0
aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250CiAKIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFU
Rk9STV9TVFJBVEVHSUVTKQorICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2ll
c1N0cmF0ZWd5KCktPmNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbHNlCiAgICAgcmV0dXJu
IGNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbmRpZgogfQogCiB2b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyaW5nKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+c2V0Q29va2llc0Zyb21ET00obmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJs
LCBjb29raWVTdHJpbmcpOworI2Vsc2UKICAgICBzZXRDb29raWVzRnJvbURPTShuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmws
IGNvb2tpZVN0cmluZyk7CisjZW5kaWYKIH0KIAogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+Y29va2llc0Vu
YWJsZWQobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNv
b2tpZXNFbmFibGVkKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisjZW5kaWYKIH0KIAog
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQor
ICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCktPmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCk7CisjZWxzZQogICAgIHJldHVybiBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCks
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwpOworI2VuZGlmCiB9CiAKIGJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJ
RVMpCisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+
Z2V0UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2Vsc2UKICAgICByZXR1cm4gZ2V0
UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29raWUobmV0
d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUpOworI2Vsc2UKICAgICBk
ZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUp
OworI2VuZGlmCiB9CiAKIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcygwLCBob3N0bmFtZXMpOworI2Vsc2UKICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygw
LCBob3N0bmFtZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMp
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2Vsc2UKICAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVBbGxDb29raWVzKDApOworI2Vsc2UKICAg
ICBkZWxldGVBbGxDb29raWVzKDApOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0Nvb2tpZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZS5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gdG8gdGhlIFdlYiBJbnNwZWN0b3IuCiAKICAgICBzdHJ1Y3QgQ29va2ll
IHsKKyAgICAgICAgQ29va2llKCkgeyB9CisKICAgICAgICAgQ29va2llKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwaXJlcywgYm9vbCBodHRwT25s
eSwgYm9vbCBzZWN1cmUsCiAgICAgICAgICAgICAgICAgYm9vbCBzZXNzaW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCwxMCBAQAogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
ICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCiB0eXBlZGVmIHN0cnVjdCBPcGFx
dWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKQEAgLTM2LDYg
KzM5LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLVVJMOworY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7
CitzdHJ1Y3QgQ29va2llOworCiBjbGFzcyBDb29raWVzU3RyYXRlZ3kgewogcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpID0gMDsKQEAgLTQ0LDYgKzUxLDE2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBkZWZhdWx0Q29va2llU3RvcmFnZSgpID0gMDsKICNlbmRpZgogCisgICAgdmlydHVhbCBTdHJp
bmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvb2tp
ZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgS1VSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db29raWVzU3RyYXRlZ3koKSB7
IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzU5MzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0xMS0yNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3
YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZGVkIG1lc3NhZ2Vz
IHRvIG1hbmlwdXRhdGUgQ29va2llSmFyIGluIG5ldHdvcmsgcHJvY2Vzcy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOiBSZW1v
dmVkIHVubmVjZXNzYXJ5IFdlYkNvcmU6OiBwcmVmaXhlcywKKyAgICAgICAgdGhpcyBmaWxlIGhh
cyBhIHVzaW5nIGRpcmVjaXZlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9ucyB0aGF0
IHVzZSBQbGF0Zm9ybUNvb2tpZUphciBpbiB0aGUgbmV0d29yayBwcm9jZXNzLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OiAoc3RydWN0X29yX2NsYXNzKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6Cisg
ICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIENv
b2tpZS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxl
dGVBbGxDb29raWVzKToKKyAgICAgICAgV2hlbiB1c2luZyB0aGUgbmV0d29yayBwcm9jZXNzLCBm
b3J3YXJkIGNvb2tpZSBjYWxscyB0byBpdC4KKwogMjAxMi0xMS0yNyAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQREZQbHVnaW46IFBhZ2Ugc2NhbGUg
ZmFjdG9yIHNob3VsZCBhZmZlY3Qgc3ViZnJhbWUgUERGcwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQ29ubmVjdGlvblN0YWNrLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0
aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+CkBAIC0xMjIsNyArMTI0LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZQogICAgIHJlc291cmNlTG9hZElkZW50aWZpZXIgPSBOZXR3
b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVk
dWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgS1VSTCYg
dXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIGlkZW50aWZp
ZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cigpLmFkZExvYWRJblByb2dyZXNzKHVybCk7CiB9CkBAIC0xNTIsNiArMTU0LDYyIEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldFMKICAgICBtX3NlcmlhbExvYWRpbmdF
bmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Y29va2llc0ZvckRPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmws
IFN0cmluZyYgcmVzdWx0KQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBh
IGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIHJlc3VsdCA9IFdlYkNvcmU6OmNvb2tpZXNG
b3JET00oUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgp
LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6
OnNldENvb2tpZXNGcm9tRE9NKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2Us
IGZhbHNlKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCit2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wmIHJlc3VsdCkKK3sKKyAgICAvLyBG
SVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3JhZ2Ugc2Vzc2lvbi4KKyAg
ICByZXN1bHQgPSBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBz
dG9yYWdlIHNlc3Npb24uCisgICAgcmVzdWx0ID0gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoMCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByZXN1bHQpCit7CisgICAgLy8gRklYTUUg
KE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNl
LCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCwgcmVzdWx0KTsKK30KKwordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZShSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCks
IHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNl
c3Npb24uCisgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lc1NldDsKKyAgICBXZWJDb3JlOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZh
bHNlLCBmYWxzZSkuZ2V0KCksIGhvc3RuYW1lc1NldCk7CisgICAgV1RGOjpjb3B5VG9WZWN0b3Io
aG9zdG5hbWVzU2V0LCBob3N0bmFtZXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3Jh
Z2Ugc2Vzc2lvbi4KKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpLCBob3N0bmFtZSk7
Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUFsbENvb2tp
ZXMoKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3Rv
cmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4MiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOwogICAgIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAg
dm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKTsKLSAgICAKKyAgICB2b2lkIGNvb2tp
ZXNGb3JET00oY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIGNvb2tpZXNFbmFibGVkKGNvbnN0IFdlYkNvcmU6OktVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBib29sJiByZXN1bHQpOworICAgIHZvaWQg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIGdl
dFJhd0Nvb2tpZXMoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7CisgICAg
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
KyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKwogICAgIFJlZlB0cjxDb3JlSVBDOjpD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTM1OTA5KQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDE2IEBAIG1lc3NhZ2Vz
IC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXMKICAgICBSZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKSAtPiAoKQogICAgIAogICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgLT4gKCkKKworICAgIENvb2tpZXNGb3JET00odWludDMyX3Qgc3RvcmFnZVR5cGUsIFdlYkNv
cmU6OktVUkwgZmlyc3RQYXJ0eSwgV2ViQ29yZTo6S1VSTCB1cmwpIC0+IChXVEY6OlN0cmluZyBy
ZXN1bHQpCisgICAgU2V0Q29va2llc0Zyb21ET00odWludDMyX3Qgc3RvcmFnZVR5cGUsIFdlYkNv
cmU6OktVUkwgZmlyc3RQYXJ0eSwgV2ViQ29yZTo6S1VSTCB1cmwsIFdURjo6U3RyaW5nIGNvb2tp
ZVN0cmluZykKKyAgICBDb29raWVzRW5hYmxlZCh1aW50MzJfdCBzdG9yYWdlVHlwZSwgV2ViQ29y
ZTo6S1VSTCBmaXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKGJvb2wgZW5hYmxlZCkK
KyAgICBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1aW50MzJfdCBzdG9yYWdlVHlwZSwg
V2ViQ29yZTo6S1VSTCBmaXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKFdURjo6U3Ry
aW5nIHJlc3VsdCkKKyAgICBHZXRSYXdDb29raWVzKHVpbnQzMl90IHN0b3JhZ2VUeXBlLCBXZWJD
b3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsKSAtPiAoV1RGOjpWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBjb29raWVzKQorICAgIERlbGV0ZUNvb2tpZSh1aW50MzJfdCBzdG9y
YWdlVHlwZSwgV2ViQ29yZTo6S1VSTCB1cmwsIFdURjo6U3RyaW5nIGNvb2tpZU5hbWUpCisgICAg
R2V0SG9zdG5hbWVzV2l0aENvb2tpZXModWludDMyX3Qgc3RvcmFnZVR5cGUpIC0+IChXVEY6OlZl
Y3RvcjxXVEY6OlN0cmluZz4gaG9zdG5hbWVzKQorICAgIERlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZSh1aW50MzJfdCBzdG9yYWdlVHlwZSwgV1RGOjpTdHJpbmcgaG9zdG5hbWUpCisgICAgRGVsZXRl
QWxsQ29va2llcyh1aW50MzJfdCBzdG9yYWdlVHlwZSkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVz
c2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21l
c3NhZ2VzLnB5CShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCBkZWYg
c3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpBbmlt
YXRpb24nLAogICAgICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCcsCiAg
ICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCisgICAgICAgICdXZWJDb3Jl
OjpDb29raWUnLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ1Nlc3Npb24nLAogICAgICAgICAnV2Vi
Q29yZTo6RmxvYXRQb2ludDNEJywKICAgICAgICAgJ1dlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGlu
Z3MnLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RhdGFiYXNlRGV0YWlscy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0
aW9uQWx0ZXJuYXRpdmUuaD4KQEAgLTY4Niw2ICs2ODcsNDIgQEAgYm9vbCBBcmd1bWVudENvZGVy
PENvbXBvc2l0aW9uVW5kZXJsaW5lPgogICAgIHJldHVybiB0cnVlOwogfQogCisKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxDb29raWU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBDb29raWUmIGNvb2tpZSkKK3sKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5uYW1lOworICAgIGVu
Y29kZXIgPDwgY29va2llLnZhbHVlOworICAgIGVuY29kZXIgPDwgY29va2llLmRvbWFpbjsKKyAg
ICBlbmNvZGVyIDw8IGNvb2tpZS5wYXRoOworICAgIGVuY29kZXIgPDwgY29va2llLmV4cGlyZXM7
CisgICAgZW5jb2RlciA8PCBjb29raWUuaHR0cE9ubHk7CisgICAgZW5jb2RlciA8PCBjb29raWUu
c2VjdXJlOworICAgIGVuY29kZXIgPDwgY29va2llLnNlc3Npb247Cit9CisKK2Jvb2wgQXJndW1l
bnRDb2RlcjxDb29raWU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDb29raWUm
IGNvb2tpZSkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb29raWUubmFtZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb29raWUudmFsdWUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2ll
LmRvbWFpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShjb29raWUucGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShjb29raWUuZXhwaXJlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWRlY29kZXItPmRlY29kZShjb29raWUuaHR0cE9ubHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLnNlY3VyZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb29raWUuc2Vzc2lvbikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogdm9pZCBBcmd1bWVudENvZGVyPERhdGFiYXNlRGV0YWlscz46OmVuY29k
ZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERhdGFiYXNlRGV0YWlscyYgZGV0YWls
cykKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiAgICAgY2xhc3MgVXNlclNj
cmlwdDsKICAgICBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CisgICAgc3RydWN0IENvb2tp
ZTsKICAgICBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmU7CiAgICAgc3RydWN0IERyYWdTZXNz
aW9uOwogICAgIHN0cnVjdCBGaWxlQ2hvb3NlclNldHRpbmdzOwpAQCAtMjA3LDYgKzIwOCwxMSBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
Jik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb2tp
ZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJD
b3JlOjpDb29raWUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6Q29va2llJik7Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscz4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxz
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAx
MzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwyMCBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRl
Z3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4K
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykK
KyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdJTikgJiYgVVNFKENGTkVUV09SSykKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmgiCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTExMyw2ICsxMTUsMTI0IEBAIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBXZWJQbGEKIH0KICNlbmRpZgogCitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29r
aWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBLVVJMJiB1cmwpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAg
ICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTShmaXJzdFBhcnR5LCB1cmwpLCBN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET006OlJl
cGx5KHJlc3VsdCksIDApKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tp
ZXNGb3JET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llU3RyaW5nKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENvb2tpZXNGcm9tRE9N
KGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKGNvbnRleHQsIGZp
cnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCit7CisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKKyAgICAgICAgYm9vbCByZXN1bHQ7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkKGZpcnN0UGFy
dHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2ll
c0VuYWJsZWQ6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFdlYkNv
cmU6OmNvb2tpZXNFbmFibGVkKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK1N0cmlu
ZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBL
VVJMJiB1cmwpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJv
Y2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgU3RyaW5nIHJl
c3VsdDsKKyAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlv
bigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nv
b2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHks
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llcyhmaXJzdFBhcnR5LCB1cmwpLCBN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXM6OlJl
cGx5KHJhd0Nvb2tpZXMpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gV2ViQ29yZTo6Z2V0UmF3
Q29va2llcyhjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwsIHJhd0Nvb2tpZXMpOworfQorCit2b2lk
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51
c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKSwgMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tp
ZShjb250ZXh0LCB1cmwsIGNvb2tpZU5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7
CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RuYW1lc1ZlY3RvcjsKKyAgICAgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0
SG9zdG5hbWVzV2l0aENvb2tpZXM6OlJlcGx5KGhvc3RuYW1lc1ZlY3RvciksIDApOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGhvc3RuYW1lc1ZlY3Rvci5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIGhvc3RuYW1lcy5hZGQoaG9zdG5hbWVzVmVjdG9yW2ldKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQor
ICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAg
ICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQs
IGhvc3RuYW1lKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUFsbENv
b2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCit7CisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6RGVsZXRlQWxsQ29va2llcygpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorCisgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyhjb250ZXh0KTsKK30KKwogLy8gTG9h
ZGVyU3RyYXRlZ3kKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDE1IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlKCkgT1ZFUlJJREU7CiAjZW5kaWYKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVzRm9yRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29va2llc0VuYWJsZWQoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoV2ViQ29yZTo6TmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBX
ZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGdldFJhd0Nvb2tpZXMo
V2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpOZXR3b3Jr
aW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqKSBPVkVSUklE
RTsKIAogICAgIC8vIFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5CiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTkzNCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAg
IFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgor
ICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAg
KFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmdldFBsdWdpbkluZm8pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZm
ZXJGb3JUeXBlKToKKyAgICAgICAgV2ViS2l0MSBzdHJhdGVneSBqdXN0IHVzZXMgUGxhdGZvcm1D
b29raWVKYXIuCisKIDIwMTItMTEtMjcgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIG9iamMvb2JqYy1ydW50aW1lLmggZG9lcyBub3QgZXhpc3Qgb24gYWxs
IFBMQVRGT1JNKE1BQykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzU5MDkpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJD
b3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5n
ZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5n
IGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYs
IGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxl
ZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxs
Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopIE9WRVJSSURFOwogCiAgICAgLy8g
V2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMo
KSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDEzNTkwOSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Db2xv
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91
cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogCkBAIC05NCwxMiArOTUsNTcgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IFdlYlBsYQogI2VuZGlmCiB9CiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFtbV2ViUGx1Z2lu
RGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHJlZnJlc2hdOwogfQogCi12b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdl
YkNvcmU6OlBsdWdpbkluZm8+JiBwbHVnaW5zKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEyOCw3ICsxNzQsNyBA
QCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjCiAgICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5nZXRUeXBlcyh0eXBlcyk7CiB9CiAKLVBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKIH0K
</data>
<flag name="commit-queue"
          id="192110"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176372</attachid>
            <date>2012-11-27 17:03:35 -0800</date>
            <delta_ts>2012-11-28 16:34:27 -0800</delta_ts>
            <desc>with build fixes</desc>
            <filename>CookieStrategy.txt</filename>
            <type>text/plain</type>
            <size>63278</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29v
a2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFBsYXRmb3JtQ29va2llSmFy
LmggZnVuY3Rpb25zIGFyZSBub3cgdXNlZCBpbiBXZWJLaXQyLgorCisgICAgICAgICogbG9hZGVy
L0Nvb2tpZUphci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICBVc2UgYSBzdHJhdGVneSBpbnN0ZWFkIG9mIGdv
aW5nIHRvIFBsYXRmb3JtQ29va2llSmFyIGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0v
Q29va2llLmg6IChDb29raWUpOiBBZGRlZCBhIGRlZmF1bHQgY29uc3RydWN0b3IsIHNvIHRoYXQg
Q29va2llIGNvdWxkIGJlCisgICAgICAgIHNlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZnVuY3Rpb25zIGZvciBjb29raWUgamFyLgor
CiAyMDEyLTExLTI3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5kZXhlZERCOiBTaW1wbGlmeSB0cmFuc2FjdGlvbiB0aW1lcnMgYW5kIGV2ZW50IHRyYWNr
aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIwNSw2ICsyMDUsNyBA
QCBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvckQxRXYKIF9fWk43V2ViQ29yZTEyY2FjaGVTdG9y
YWdlRXYKIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNE5vZGVFTlNfMTNFQ2hpbGRy
ZW5Pbmx5RVBOM1dURjZWZWN0b3JJUFMwX0xtMEVFRU5TXzEzRUFic29sdXRlVVJMc0VQTlM1X0lO
U18xM1F1YWxpZmllZE5hbWVFTG0wRUVFCiBfX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05T
XzVSYW5nZUVQTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFRUVOU18yM0VBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlRWJOU18xM0VBYnNvbHV0ZVVSTHNFCitfX1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tp
ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgog
X19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYKQEAgLTIzMCw4ICsyMzEs
MTAgQEAgX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNv
cmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVt
ZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxM1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJvcGVy
dHlFTlNfMTNDU1NQcm9wZXJ0eUlERWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBlc0Vi
CitfX1pON1dlYkNvcmUxM2Nvb2tpZXNGb3JET01FUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktO
U180S1VSTEVTNF8KIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0
b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTEzZ2V0UmF3Q29va2llc0VQTlNf
MTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JOM1dURjZWZWN0b3JJTlNfNkNvb2tp
ZUVMbTBFRUUKIF9fWk43V2ViQ29yZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19a
TjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9f
Wk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQpAQCAtMjc2LDYgKzI3OSw3
IEBAIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb245c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29y
ZTE0RnJhbWVTZWxlY3Rpb25DMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTRMb2FkZXJTdHJh
dGVneTIxcmVzb3VyY2VMb2FkU2NoZWR1bGVyRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1l
bnQxMHBsdWdpbk5vZGVFdgorX19aTjdXZWJDb3JlMTRjb29raWVzRW5hYmxlZEVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0XwogX19aTks3V2ViQ29yZTVGcmFtZTI1dHJhY2tl
ZFJlcGFpbnRSZWN0c0FzVGV4dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdzZXRUcmFja3NS
ZXBhaW50c0ViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjByZXNldFRyYWNrZWRSZXBhaW50c0V2
CkBAIC00NzYsNiArNDgwLDcgQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktO
U18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3Np
dGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43
V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW5nZUUKK19fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0VQTlNfMTdOZXR3b3JraW5nQ29udGV4dEUKIF9fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185Rmxv
YXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCkBAIC00OTksNiArNTA0LDcg
QEAgX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUAogX19aTjdXZWJDb3Jl
MTdWaWV3cG9ydEFyZ3VtZW50czE5ZGVwcmVjYXRlZFRhcmdldERQSUUKIF9fWk43V2ViQ29yZTE3
Y2FjaGVET01TdHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVy
ZUVQS05TMl85Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04z
V1RGNlN0cmluZ0VSaQorX19aTjdXZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVu
c2lvbkMxRVBOU181RnJhbWVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThI
VE1MQ29udGVudEVsZW1lbnQ2Y3JlYXRlRVBOU184RG9jdW1lbnRFCkBAIC02MzgsNiArNjQ0LDcg
QEAgX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTgogX19aTjdXZWJDb3Jl
MjNkYXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVI
b3N0TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29k
ZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKK19fWk43V2ViQ29yZTIzZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXNFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUk4zV1RGN0hhc2hT
ZXRJTlMyXzZTdHJpbmdFTlMyXzEwU3RyaW5nSGFzaEVOUzJfMTBIYXNoVHJhaXRzSVM0X0VFRUUK
IF9fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMw
XzZTdHJpbmdFTlMwXzEwU3RyaW5nSGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43
V2ViQ29yZTI0QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyMTd3cml0ZVByb3BlcnR5TGlzdEV2CiBf
X1pON1dlYkNvcmUyNENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTExc2V0UmVzb3VyY2VFUE5TXzE0
Q2FjaGVkUmVzb3VyY2VFCkBAIC02NTcsNiArNjY0LDcgQEAgX19aTjdXZWJDb3JlMjRGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXJDMgogX19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2
ZXJEMkV2CiBfX1pON1dlYkNvcmUyNGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3Vt
ZW50RVJLTjNXVEY2U3RyaW5nRVM1X05TXzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQog
X19aTjdXZWJDb3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCitf
X1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVQTlNfMTdOZXR3b3JraW5nQ29u
dGV4dEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdl
ZEUKQEAgLTY4Niw2ICs2OTQsNyBAQCBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlCiBfX1pON1dlYkNvcmUyNmRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlRXYKIF9fWk43
V2ViQ29yZTI4ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTI4cmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgorX19aTjdXZWJDb3Jl
Mjljb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVS
S05TXzRLVVJMRVM0XwogX19aTjdXZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1w
dEVpYgogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRGVjb2RpbmdXaXRoUmFuZ2VFUDhOU1N0
cmluZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRW5jb2RpbmdXaXRoUmFu
Z2VFUDhOU1N0cmluZzhfTlNSYW5nZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02MDcwLDcgKzYwNzAsNyBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07
CiAJCUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAx
RTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJB
NzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdl
TWFjLm1tICovOyB9OwotCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29r
aWVKYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlF
MTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYz
MkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxNDI0QzkwMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVK
YXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovOyB9OwogCQlFMTQy
NEM5MzE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuY3BwICovOyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2ll
SmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQy
NEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2ll
SmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKKyNpZiBVU0UoUExBVEZPUk1f
U1RSQVRFR0lFUykKKyNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNl
cnJvciBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2VzIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVz
ZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCiAjZW5kaWYKQEAgLTUxLDQ3ICs1Niw4MyBAQCBzdGF0
aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250CiAKIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFU
Rk9STV9TVFJBVEVHSUVTKQorICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2ll
c1N0cmF0ZWd5KCktPmNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbHNlCiAgICAgcmV0dXJu
IGNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbmRpZgogfQogCiB2b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyaW5nKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+c2V0Q29va2llc0Zyb21ET00obmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJs
LCBjb29raWVTdHJpbmcpOworI2Vsc2UKICAgICBzZXRDb29raWVzRnJvbURPTShuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmws
IGNvb2tpZVN0cmluZyk7CisjZW5kaWYKIH0KIAogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+Y29va2llc0Vu
YWJsZWQobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNv
b2tpZXNFbmFibGVkKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisjZW5kaWYKIH0KIAog
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQor
ICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCktPmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCk7CisjZWxzZQogICAgIHJldHVybiBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCks
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwpOworI2VuZGlmCiB9CiAKIGJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJ
RVMpCisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+
Z2V0UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2Vsc2UKICAgICByZXR1cm4gZ2V0
UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29raWUobmV0
d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUpOworI2Vsc2UKICAgICBk
ZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUp
OworI2VuZGlmCiB9CiAKIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcygwLCBob3N0bmFtZXMpOworI2Vsc2UKICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygw
LCBob3N0bmFtZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMp
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2Vsc2UKICAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVBbGxDb29raWVzKDApOworI2Vsc2UKICAg
ICBkZWxldGVBbGxDb29raWVzKDApOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0Nvb2tpZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZS5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gdG8gdGhlIFdlYiBJbnNwZWN0b3IuCiAKICAgICBzdHJ1Y3QgQ29va2ll
IHsKKyAgICAgICAgQ29va2llKCkgeyB9CisKICAgICAgICAgQ29va2llKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwaXJlcywgYm9vbCBodHRwT25s
eSwgYm9vbCBzZWN1cmUsCiAgICAgICAgICAgICAgICAgYm9vbCBzZXNzaW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCwxMCBAQAogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
ICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCiB0eXBlZGVmIHN0cnVjdCBPcGFx
dWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKQEAgLTM2LDYg
KzM5LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLVVJMOworY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7
CitzdHJ1Y3QgQ29va2llOworCiBjbGFzcyBDb29raWVzU3RyYXRlZ3kgewogcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpID0gMDsKQEAgLTQ0LDYgKzUxLDE2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBkZWZhdWx0Q29va2llU3RvcmFnZSgpID0gMDsKICNlbmRpZgogCisgICAgdmlydHVhbCBTdHJp
bmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvb2tp
ZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgS1VSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db29raWVzU3RyYXRlZ3koKSB7
IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzU5MzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0xMS0yNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3
YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZGVkIG1lc3NhZ2Vz
IHRvIG1hbmlwdXRhdGUgQ29va2llSmFyIGluIG5ldHdvcmsgcHJvY2Vzcy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOiBSZW1v
dmVkIHVubmVjZXNzYXJ5IFdlYkNvcmU6OiBwcmVmaXhlcywKKyAgICAgICAgdGhpcyBmaWxlIGhh
cyBhIHVzaW5nIGRpcmVjaXZlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9ucyB0aGF0
IHVzZSBQbGF0Zm9ybUNvb2tpZUphciBpbiB0aGUgbmV0d29yayBwcm9jZXNzLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OiAoc3RydWN0X29yX2NsYXNzKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6Cisg
ICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIENv
b2tpZS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxl
dGVBbGxDb29raWVzKToKKyAgICAgICAgV2hlbiB1c2luZyB0aGUgbmV0d29yayBwcm9jZXNzLCBm
b3J3YXJkIGNvb2tpZSBjYWxscyB0byBpdC4KKwogMjAxMi0xMS0yNyAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQREZQbHVnaW46IFBhZ2Ugc2NhbGUg
ZmFjdG9yIHNob3VsZCBhZmZlY3Qgc3ViZnJhbWUgUERGcwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQ29ubmVjdGlvblN0YWNrLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0
aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+CkBAIC0xMjIsNyArMTI0LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZQogICAgIHJlc291cmNlTG9hZElkZW50aWZpZXIgPSBOZXR3
b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVk
dWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgS1VSTCYg
dXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIGlkZW50aWZp
ZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cigpLmFkZExvYWRJblByb2dyZXNzKHVybCk7CiB9CkBAIC0xNTIsNiArMTU0LDYyIEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldFMKICAgICBtX3NlcmlhbExvYWRpbmdF
bmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Y29va2llc0ZvckRPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmws
IFN0cmluZyYgcmVzdWx0KQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBh
IGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIHJlc3VsdCA9IFdlYkNvcmU6OmNvb2tpZXNG
b3JET00oUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgp
LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6
OnNldENvb2tpZXNGcm9tRE9NKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2Us
IGZhbHNlKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCit2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wmIHJlc3VsdCkKK3sKKyAgICAvLyBG
SVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3JhZ2Ugc2Vzc2lvbi4KKyAg
ICByZXN1bHQgPSBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBz
dG9yYWdlIHNlc3Npb24uCisgICAgcmVzdWx0ID0gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoMCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByZXN1bHQpCit7CisgICAgLy8gRklYTUUg
KE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNl
LCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCwgcmVzdWx0KTsKK30KKwordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZShSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCks
IHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNl
c3Npb24uCisgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lc1NldDsKKyAgICBXZWJDb3JlOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZh
bHNlLCBmYWxzZSkuZ2V0KCksIGhvc3RuYW1lc1NldCk7CisgICAgV1RGOjpjb3B5VG9WZWN0b3Io
aG9zdG5hbWVzU2V0LCBob3N0bmFtZXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3Jh
Z2Ugc2Vzc2lvbi4KKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpLCBob3N0bmFtZSk7
Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUFsbENvb2tp
ZXMoKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3Rv
cmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4MiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOwogICAgIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAg
dm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKTsKLSAgICAKKyAgICB2b2lkIGNvb2tp
ZXNGb3JET00oY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIGNvb2tpZXNFbmFibGVkKGNvbnN0IFdlYkNvcmU6OktVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBib29sJiByZXN1bHQpOworICAgIHZvaWQg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIGdl
dFJhd0Nvb2tpZXMoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7CisgICAg
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
KyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKwogICAgIFJlZlB0cjxDb3JlSVBDOjpD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTM1OTA5KQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDE2IEBAIG1lc3NhZ2Vz
IC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXMKICAgICBSZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKSAtPiAoKQogICAgIAogICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgLT4gKCkKKworICAgIENvb2tpZXNGb3JET00oV2ViQ29yZTo6S1VSTCBmaXJzdFBhcnR5LCBX
ZWJDb3JlOjpLVVJMIHVybCkgLT4gKFdURjo6U3RyaW5nIHJlc3VsdCkKKyAgICBTZXRDb29raWVz
RnJvbURPTShXZWJDb3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsLCBXVEY6
OlN0cmluZyBjb29raWVTdHJpbmcpCisgICAgQ29va2llc0VuYWJsZWQoV2ViQ29yZTo6S1VSTCBm
aXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKGJvb2wgZW5hYmxlZCkKKyAgICBDb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNv
cmU6OktVUkwgdXJsKSAtPiAoV1RGOjpTdHJpbmcgcmVzdWx0KQorICAgIEdldFJhd0Nvb2tpZXMo
V2ViQ29yZTo6S1VSTCBmaXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKFdURjo6VmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gY29va2llcykKKyAgICBEZWxldGVDb29raWUoV2ViQ29yZTo6
S1VSTCB1cmwsIFdURjo6U3RyaW5nIGNvb2tpZU5hbWUpCisgICAgR2V0SG9zdG5hbWVzV2l0aENv
b2tpZXModWludDMyX3Qgc3RvcmFnZVR5cGUpIC0+IChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4g
aG9zdG5hbWVzKQorICAgIERlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXVEY6OlN0cmluZyBob3N0
bmFtZSkKKyAgICBEZWxldGVBbGxDb29raWVzKCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2Fn
ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5CShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCBkZWYgc3Ry
dWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpBbmltYXRp
b24nLAogICAgICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCcsCiAgICAg
ICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCisgICAgICAgICdXZWJDb3JlOjpD
b29raWUnLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ1Nlc3Npb24nLAogICAgICAgICAnV2ViQ29y
ZTo6RmxvYXRQb2ludDNEJywKICAgICAgICAgJ1dlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3Mn
LApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGF0YWJhc2VEZXRhaWxzLmg+CkBAIC02ODYsNiArNjg3LDQyIEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxDb21wb3NpdGlvblVuZGVybGluZT4KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29va2llPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgQ29va2llJiBjb29raWUpCit7CisgICAgZW5jb2RlciA8PCBjb29raWUu
bmFtZTsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS52YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGNvb2tp
ZS5kb21haW47CisgICAgZW5jb2RlciA8PCBjb29raWUucGF0aDsKKyAgICBlbmNvZGVyIDw8IGNv
b2tpZS5leHBpcmVzOworICAgIGVuY29kZXIgPDwgY29va2llLmh0dHBPbmx5OworICAgIGVuY29k
ZXIgPDwgY29va2llLnNlY3VyZTsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5zZXNzaW9uOworfQor
Citib29sIEFyZ3VtZW50Q29kZXI8Q29va2llPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgQ29va2llJiBjb29raWUpCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2ll
Lm5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
Y29va2llLnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGNvb2tpZS5kb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoY29va2llLnBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLmV4cGlyZXMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLmh0dHBPbmx5KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tpZS5zZWN1cmUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLnNl
c3Npb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
CiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIHZvaWQgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURl
dGFpbHM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEYXRhYmFzZURl
dGFpbHMmIGRldGFpbHMpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFVzZXJTdHlsZVNoZWV0OwogICAg
IGNsYXNzIFVzZXJTY3JpcHQ7CiAgICAgc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOworICAg
IHN0cnVjdCBDb29raWU7CiAgICAgc3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZlOwogICAgIHN0
cnVjdCBEcmFnU2Vzc2lvbjsKICAgICBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKQEAgLTIw
Nyw2ICsyMDgsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgog
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpDb21wb3Np
dGlvblVuZGVybGluZSYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpDb29raWU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6Q29va2llJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkNvb2tpZSYpOworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEYXRhYmFzZURldGFpbHM+IHsKICAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxz
Jik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkRh
dGFiYXNlRGV0YWlscyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwx
OCArMzksMjAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0tVUkwuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0xvYWRlclN0cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Q
YXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAorI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2VuZGlmCisK
ICNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNlbmRpZgogCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0xMTMsNiArMTE1LDEyNCBAQCBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gV2ViUGxhCiB9CiAjZW5kaWYKIAorU3RyaW5nIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2Vz
cygpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oZmlyc3RQ
YXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29r
aWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRD
b29raWVzRnJvbURPTShmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyksIDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJDb3JlOjpzZXRDb29raWVzRnJvbURP
TShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyk7Cit9CisKK2Jvb2wgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNO
ZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAoIVdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5h
YmxlZChmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwp
OworfQorCitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisg
ICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAg
ICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZp
cnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNl
bmRpZgorCisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK2Jvb2wgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVz
KQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoZmlyc3RQ
YXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRS
YXdDb29raWVzOjpSZXBseShyYXdDb29raWVzKSwgMCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFdl
YkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVz
KTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKHVybCwgY29va2ll
TmFtZSksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJDb3Jl
OjpkZWxldGVDb29raWUoY29udGV4dCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBob3N0bmFtZXNWZWN0b3I7Cisg
ICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpH
ZXRIb3N0bmFtZXNXaXRoQ29va2llcygpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkdldEhvc3RuYW1lc1dpdGhDb29raWVzOjpSZXBseShob3N0bmFtZXNWZWN0b3Ip
LCAwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBob3N0bmFtZXNWZWN0b3Iu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBob3N0bmFtZXMuYWRkKGhvc3RuYW1lc1ZlY3Rvcltp
XSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKGNvbnRleHQsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisjaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9j
ZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKSwgMCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShjb250ZXh0LCBob3N0bmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQoreworI2lmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNO
ZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUFsbENvb2tpZXMoKSwgMCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoY29udGV4dCk7
Cit9CisKIC8vIExvYWRlclN0cmF0ZWd5CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzU5MDkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxNyBAQCBwcml2YXRlOgogI2lm
IFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKICAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOwog
I2VuZGlmCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICB2aXJ0dWFsIFN0cmluZyBj
b29raWVzRm9yRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBj
b25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQo
V2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGdldFJhd0Nvb2tpZXMoV2ViQ29yZTo6TmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJD
b3JlOjpLVVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqKSBPVkVSUklERTsKKyNlbmRpZgogCiAg
ICAgLy8gV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1OTQ2KQorKysgU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEt
MjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0g
Rm9yd2FyZCBjb29raWUgamFyIGNhbGxzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmNv
b2tpZXNGb3JET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmNvb2tpZXNFbmFibGVk
KToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVsZXRlQ29va2llKToKKyAgICAg
ICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgor
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpkZWxldGVBbGxDb29raWVzKToKKwogMjAx
Mi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
RWZsLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAK
QEAgLTgwLDYgKzgxLDUxIEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpub3RpZnlDb29r
aWUKIHsKIH0KIAorU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llc0ZvckRPTShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQs
IGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpzZXRD
b29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKK3sK
KyAgICBXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmws
IGNvb2tpZVN0cmluZyk7Cit9CisKK2Jvb2wgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpjb29raWVz
RW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxl
ZChjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitTdHJpbmcgUGxhdGZvcm1TdHJhdGVn
aWVzRWZsOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBm
aXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0UmF3
Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwsIHJh
d0Nvb2tpZXMpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVsZXRlQ29va2ll
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoY29udGV4dCwgdXJs
LCBjb29raWVOYW1lKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3sKKyAgICBXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b250ZXh0LCBob3N0bmFtZXMpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQoreworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb250ZXh0LCBob3N0bmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpk
ZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIFdlYkNv
cmU6OmRlbGV0ZUFsbENvb2tpZXMoY29udGV4dCk7Cit9CisKIHZvaWQgUGxhdGZvcm1TdHJhdGVn
aWVzRWZsOjpyZWZyZXNoUGx1Z2lucygpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuaAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDE2IEBAIHByaXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29r
aWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKTsKKyAg
ICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2ll
U3RvcmFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9t
RE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
V2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCopOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQg
cmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTk0NikK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgor
CisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2Vz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwOgorICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzR3RrOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0
azo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6ZGVsZXRlQWxs
Q29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3ODYuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvb2tpZUphci5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogCkBAIC03NCw2ICs3NSw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6bm90aWZ5Q29va2llCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6
OmNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2ll
c0ZvckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc0d0azo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBj
b29raWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwg
Zmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29y
ZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5n
IFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBQbGF0Zm9ybVN0cmF0
ZWdpZXNHdGs6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nv
b2tpZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNH
dGs6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29v
a2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVn
aWVzR3RrOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0
cmF0ZWdpZXNHdGs6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFBsYXRmb3Jt
U3RyYXRlZ2llc0d0azo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiAvLyBQ
bHVnaW5TdHJhdGVneQogdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OnJlZnJlc2hQbHVnaW5z
KCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFdlYkNvcmU6OkNv
b2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJM
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxl
ZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
QWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTk0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTExLTI3ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndh
cmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVs
ZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdp
bkluZm8pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKToK
KyAgICAgICAgV2ViS2l0MSBzdHJhdGVneSBqdXN0IHVzZXMgUGxhdGZvcm1Db29raWVKYXIuCisK
IDIwMTItMTEtMjcgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIG9iamMvb2JqYy1ydW50aW1lLmggZG9lcyBub3QgZXhpc3Qgb24gYWxsIFBMQVRGT1JNKE1B
QykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpDb29raWVz
U3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0
Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JE
T00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwm
LCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJD
b3JlOjpOZXR3b3JraW5nQ29udGV4dCopIE9WRVJSSURFOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBPVkVSUklERTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCkBAIC05
NCwxMiArOTUsNTcgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBsYQog
I2VuZGlmCiB9CiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00o
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShjb250ZXh0
LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0
Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7
CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJs
LCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29udGV4dCwg
Zmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJh
d0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCBy
YXdDb29raWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tp
ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVy
bCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
Y29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJD
b3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hh
cmVkRGF0YWJhc2VdIHJlZnJlc2hdOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+JiBwbHVnaW5zKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdpbklu
Zm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEyOCw3ICsxNzQsNyBAQCB2b2lkIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjCiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5nZXRUeXBlcyh0eXBlcyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1Bh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5i
dWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzU5NDYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBO
ZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNRdDo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzUXQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNRdDo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVB
bGxDb29raWVzKToKKwogMjAxMi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzUXQuY3BwCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPE5vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVk
ZSA8UGFnZS5oPgogI2luY2x1ZGUgPFBhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFBsYXRmb3JtQ29v
a2llSmFyLmg+CiAjaW5jbHVkZSA8UGx1Z2luRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgogI2luY2x1ZGUgPFFMb2NhbGU+CkBAIC05Myw2ICs5NCw1MSBAQCB2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0Ojpub3RpZnlDb29raWVzCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9y
bVN0cmF0ZWdpZXNRdDo6Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9t
RE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsK
K30KKworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVzKGNv
bnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzUXQ6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6
ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBXZWJDb3JlOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb250ZXh0LCBob3N0bmFtZXMpOworfQorCit2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgV2ViQ29yZTo6
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3RuYW1lKTsKK30KKwordm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQor
CiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpyZWZyZXNoUGx1Z2lucygpCiB7CiAgICAgUGx1
Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwpJbmRleDogU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
UXQuaAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBA
QCBwcml2YXRlOgogICAgIAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGNv
b2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCB2b2lk
IHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6
OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29v
a2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNTk0NikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0
byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6ZGVsZXRlQWxsQ29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMzU3ODYuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2ll
SmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhYmFzZS5oPgogI2lmIFVTRShDRk5F
VFdPUkspCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgpAQCAtOTAsNiArOTEsNTEgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IFdlYlBsYQogfQogI2VuZGlmCiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFBsdWdpbkRhdGFi
YXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTUgQEAg
cHJpdmF0ZToKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlKCk7CiAjZW5kaWYKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVzRm9yRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktV
UkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVh
bCBib29sIGdldFJhd0Nvb2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqKTsKIAogICAgIC8vIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbmNlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1OTQ2KQorKysgU291cmNlL1dlYktpdC93aW5j
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0xMS0yNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3
YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuY3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNv
b2tpZXNGb3JET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tp
ZXNGcm9tRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5h
YmxlZCk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFJh
d0Nvb2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tp
ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQWxs
Q29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3ODYuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291
cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Nyw2ICs3OCw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpub3RpZnlDb29rCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpj
b29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgY29va2llU3RyaW5nKQoreworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKGNv
bnRleHQsIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1
cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30K
KworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVz
KGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2Vi
Q29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBX
ZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb250ZXh0LCBob3N0bmFtZXMpOworfQor
Cit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7Cisg
ICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3RuYW1lKTsK
K30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVz
KGNvbnRleHQpOworfQorCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpyZWZyZXNoUGx1
Z2lucygpCiB7CiAgICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVz
aCgpOwpJbmRleDogU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaAkocmV2aXNpb24gMTM1OTA5KQorKysg
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8g
V2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvb2tpZXND
aGFuZ2VkKCk7CisgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29va2llc0Zyb21ET00oV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGNv
b2tpZXNFbmFibGVkKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1YWwgU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VS
TCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUNvb2tpZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwm
LCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cyk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVBbGxDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kik7CiAKICAg
ICAvLyBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1
Z2lucygpOwo=
</data>
<flag name="review"
          id="192131"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="192133"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176600</attachid>
            <date>2012-11-28 16:34:27 -0800</date>
            <delta_ts>2012-11-29 10:17:59 -0800</delta_ts>
            <desc>more build fixes</desc>
            <filename>CookieStrategy.txt</filename>
            <type>text/plain</type>
            <size>63221</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29v
a2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFBsYXRmb3JtQ29va2llSmFy
LmggZnVuY3Rpb25zIGFyZSBub3cgdXNlZCBpbiBXZWJLaXQyLgorCisgICAgICAgICogbG9hZGVy
L0Nvb2tpZUphci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICBVc2UgYSBzdHJhdGVneSBpbnN0ZWFkIG9mIGdv
aW5nIHRvIFBsYXRmb3JtQ29va2llSmFyIGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0v
Q29va2llLmg6IChDb29raWUpOiBBZGRlZCBhIGRlZmF1bHQgY29uc3RydWN0b3IsIHNvIHRoYXQg
Q29va2llIGNvdWxkIGJlCisgICAgICAgIHNlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZnVuY3Rpb25zIGZvciBjb29raWUgamFyLgor
CiAyMDEyLTExLTI3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgSW5kZXhlZERCOiBTaW1wbGlmeSB0cmFuc2FjdGlvbiB0aW1lcnMgYW5kIGV2ZW50IHRyYWNr
aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIwNSw2ICsyMDUsNyBA
QCBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvckQxRXYKIF9fWk43V2ViQ29yZTEyY2FjaGVTdG9y
YWdlRXYKIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNE5vZGVFTlNfMTNFQ2hpbGRy
ZW5Pbmx5RVBOM1dURjZWZWN0b3JJUFMwX0xtMEVFRU5TXzEzRUFic29sdXRlVVJMc0VQTlM1X0lO
U18xM1F1YWxpZmllZE5hbWVFTG0wRUVFCiBfX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05T
XzVSYW5nZUVQTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFRUVOU18yM0VBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlRWJOU18xM0VBYnNvbHV0ZVVSTHNFCitfX1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tp
ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgog
X19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYKQEAgLTIzMCw4ICsyMzEs
MTAgQEAgX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNv
cmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVt
ZW50MjJzZXRJbmxpbmVTdHlsZVByb3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxM1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJvcGVy
dHlFTlNfMTNDU1NQcm9wZXJ0eUlERWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBlc0Vi
CitfX1pON1dlYkNvcmUxM2Nvb2tpZXNGb3JET01FUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktO
U180S1VSTEVTNF8KIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0
b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTEzZ2V0UmF3Q29va2llc0VQTlNf
MTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JOM1dURjZWZWN0b3JJTlNfNkNvb2tp
ZUVMbTBFRUUKIF9fWk43V2ViQ29yZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19a
TjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9f
Wk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQpAQCAtMjc2LDYgKzI3OSw3
IEBAIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb245c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29y
ZTE0RnJhbWVTZWxlY3Rpb25DMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTRMb2FkZXJTdHJh
dGVneTIxcmVzb3VyY2VMb2FkU2NoZWR1bGVyRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1l
bnQxMHBsdWdpbk5vZGVFdgorX19aTjdXZWJDb3JlMTRjb29raWVzRW5hYmxlZEVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0XwogX19aTks3V2ViQ29yZTVGcmFtZTI1dHJhY2tl
ZFJlcGFpbnRSZWN0c0FzVGV4dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdzZXRUcmFja3NS
ZXBhaW50c0ViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjByZXNldFRyYWNrZWRSZXBhaW50c0V2
CkBAIC00NzYsNiArNDgwLDcgQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktO
U18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3Np
dGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43
V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW5nZUUKK19fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0VQTlNfMTdOZXR3b3JraW5nQ29udGV4dEUKIF9fWk43V2ViQ29yZTE2ZGVs
ZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185Rmxv
YXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCkBAIC00OTksNiArNTA0LDcg
QEAgX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUAogX19aTjdXZWJDb3Jl
MTdWaWV3cG9ydEFyZ3VtZW50czE5ZGVwcmVjYXRlZFRhcmdldERQSUUKIF9fWk43V2ViQ29yZTE3
Y2FjaGVET01TdHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVy
ZUVQS05TMl85Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04z
V1RGNlN0cmluZ0VSaQorX19aTjdXZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVQTlNfMTdOZXR3
b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0X1JLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVu
c2lvbkMxRVBOU181RnJhbWVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThI
VE1MQ29udGVudEVsZW1lbnQ2Y3JlYXRlRVBOU184RG9jdW1lbnRFCkBAIC02MzgsNiArNjQ0LDcg
QEAgX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTgogX19aTjdXZWJDb3Jl
MjNkYXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVI
b3N0TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29k
ZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKK19fWk43V2ViQ29yZTIzZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXNFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUk4zV1RGN0hhc2hT
ZXRJTlMyXzZTdHJpbmdFTlMyXzEwU3RyaW5nSGFzaEVOUzJfMTBIYXNoVHJhaXRzSVM0X0VFRUUK
IF9fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMw
XzZTdHJpbmdFTlMwXzEwU3RyaW5nSGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43
V2ViQ29yZTI0QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyMTd3cml0ZVByb3BlcnR5TGlzdEV2CiBf
X1pON1dlYkNvcmUyNENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTExc2V0UmVzb3VyY2VFUE5TXzE0
Q2FjaGVkUmVzb3VyY2VFCkBAIC02NTcsNiArNjY0LDcgQEAgX19aTjdXZWJDb3JlMjRGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXJDMgogX19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2
ZXJEMkV2CiBfX1pON1dlYkNvcmUyNGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3Vt
ZW50RVJLTjNXVEY2U3RyaW5nRVM1X05TXzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQog
X19aTjdXZWJDb3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCitf
X1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVQTlNfMTdOZXR3b3JraW5nQ29u
dGV4dEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdl
ZEUKQEAgLTY4Niw2ICs2OTQsNyBAQCBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlCiBfX1pON1dlYkNvcmUyNmRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlRXYKIF9fWk43
V2ViQ29yZTI4ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTI4cmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgorX19aTjdXZWJDb3Jl
Mjljb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVS
S05TXzRLVVJMRVM0XwogX19aTjdXZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1w
dEVpYgogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRGVjb2RpbmdXaXRoUmFuZ2VFUDhOU1N0
cmluZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRW5jb2RpbmdXaXRoUmFu
Z2VFUDhOU1N0cmluZzhfTlNSYW5nZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02MDcwLDcgKzYwNzAsNyBAQAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5
bGVSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTM5ODY2MTE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07
CiAJCUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAx
RTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJB
NzEgLyogQ29va2llU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxM0YwMUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdl
TWFjLm1tICovOyB9OwotCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29r
aWVKYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlF
MTQyNEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYz
MkQ0MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxNDI0QzkwMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVK
YXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQyNEM4RjE2NEI0NjBCMDBGMzJENDAgLyogQ29va2llSmFyTWFjLm1tICovOyB9OwogCQlFMTQy
NEM5MzE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBD
b29raWVKYXIuY3BwICovOyB9OwogCQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2ll
SmFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQy
NEM5MjE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVK
YXIuY3BwCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2ll
SmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAKKyNpZiBVU0UoUExBVEZPUk1f
U1RSQVRFR0lFUykKKyNpbmNsdWRlICJDb29raWVzU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNl
cnJvciBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2VzIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVz
ZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCiAjZW5kaWYKQEAgLTUxLDQ3ICs1Niw4MyBAQCBzdGF0
aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250CiAKIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFU
Rk9STV9TVFJBVEVHSUVTKQorICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2ll
c1N0cmF0ZWd5KCktPmNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbHNlCiAgICAgcmV0dXJu
IGNvb2tpZXNGb3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbmRpZgogfQogCiB2b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyaW5nKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+c2V0Q29va2llc0Zyb21ET00obmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJs
LCBjb29raWVTdHJpbmcpOworI2Vsc2UKICAgICBzZXRDb29raWVzRnJvbURPTShuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmws
IGNvb2tpZVN0cmluZyk7CisjZW5kaWYKIH0KIAogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+Y29va2llc0Vu
YWJsZWQobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgZG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNv
b2tpZXNFbmFibGVkKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50LT5jb29raWVVUkwoKSk7CisjZW5kaWYKIH0KIAog
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQor
ICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCktPmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHVybCk7CisjZWxzZQogICAgIHJldHVybiBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCks
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwpOworI2VuZGlmCiB9CiAKIGJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJ
RVMpCisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+
Z2V0UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2Vsc2UKICAgICByZXR1cm4gZ2V0
UmF3Q29va2llcyhuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAg
cGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29raWUobmV0
d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUpOworI2Vsc2UKICAgICBk
ZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUp
OworI2VuZGlmCiB9CiAKIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5nZXRIb3N0bmFtZXNXaXRoQ29v
a2llcygwLCBob3N0bmFtZXMpOworI2Vsc2UKICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygw
LCBob3N0bmFtZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMp
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2Vsc2UKICAgICBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoMCwgaG9zdG5hbWUpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVBbGxDb29raWVzKDApOworI2Vsc2UKICAg
ICBkZWxldGVBbGxDb29raWVzKDApOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0Nvb2tpZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nvb2tpZS5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gdG8gdGhlIFdlYiBJbnNwZWN0b3IuCiAKICAgICBzdHJ1Y3QgQ29va2ll
IHsKKyAgICAgICAgQ29va2llKCkgeyB9CisKICAgICAgICAgQ29va2llKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwaXJlcywgYm9vbCBodHRwT25s
eSwgYm9vbCBzZWN1cmUsCiAgICAgICAgICAgICAgICAgYm9vbCBzZXNzaW9uKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCwxMCBAQAogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
ICNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCiB0eXBlZGVmIHN0cnVjdCBPcGFx
dWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKQEAgLTM2LDYg
KzM5LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLVVJMOworY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7
CitzdHJ1Y3QgQ29va2llOworCiBjbGFzcyBDb29raWVzU3RyYXRlZ3kgewogcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpID0gMDsKQEAgLTQ0LDYgKzUxLDE2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBkZWZhdWx0Q29va2llU3RvcmFnZSgpID0gMDsKICNlbmRpZgogCisgICAgdmlydHVhbCBTdHJp
bmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9N
KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvb2tp
ZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgS1VSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db29raWVzU3RyYXRlZ3koKSB7
IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzU5MzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0xMS0yNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3
YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFkZGVkIG1lc3NhZ2Vz
IHRvIG1hbmlwdXRhdGUgQ29va2llSmFyIGluIG5ldHdvcmsgcHJvY2Vzcy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOiBSZW1v
dmVkIHVubmVjZXNzYXJ5IFdlYkNvcmU6OiBwcmVmaXhlcywKKyAgICAgICAgdGhpcyBmaWxlIGhh
cyBhIHVzaW5nIGRpcmVjaXZlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9ucyB0aGF0
IHVzZSBQbGF0Zm9ybUNvb2tpZUphciBpbiB0aGUgbmV0d29yayBwcm9jZXNzLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OiAoc3RydWN0X29yX2NsYXNzKToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6Cisg
ICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIENv
b2tpZS4KKyAgICAgICAgCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxl
dGVBbGxDb29raWVzKToKKyAgICAgICAgV2hlbiB1c2luZyB0aGUgbmV0d29yayBwcm9jZXNzLCBm
b3J3YXJkIGNvb2tpZSBjYWxscyB0byBpdC4KKwogMjAxMi0xMS0yNyAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQREZQbHVnaW46IFBhZ2Ugc2NhbGUg
ZmFjdG9yIHNob3VsZCBhZmZlY3Qgc3ViZnJhbWUgUERGcwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiQ29ubmVjdGlvblN0YWNrLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0
aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+CkBAIC0xMjIsNyArMTI0LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZQogICAgIHJlc291cmNlTG9hZElkZW50aWZpZXIgPSBOZXR3
b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVk
dWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6YWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgS1VSTCYg
dXJsLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIGlkZW50aWZp
ZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cigpLmFkZExvYWRJblByb2dyZXNzKHVybCk7CiB9CkBAIC0xNTIsNiArMTU0LDYyIEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNldFMKICAgICBtX3NlcmlhbExvYWRpbmdF
bmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Y29va2llc0ZvckRPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmws
IFN0cmluZyYgcmVzdWx0KQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBh
IGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIHJlc3VsdCA9IFdlYkNvcmU6OmNvb2tpZXNG
b3JET00oUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgp
LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6
OnNldENvb2tpZXNGcm9tRE9NKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2Us
IGZhbHNlKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCit2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wmIHJlc3VsdCkKK3sKKyAgICAvLyBG
SVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3JhZ2Ugc2Vzc2lvbi4KKyAg
ICByZXN1bHQgPSBXZWJDb3JlOjpjb29raWVzRW5hYmxlZChSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBz
dG9yYWdlIHNlc3Npb24uCisgICAgcmVzdWx0ID0gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoMCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByZXN1bHQpCit7CisgICAgLy8gRklYTUUg
KE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNl
LCBmYWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCwgcmVzdWx0KTsKK30KKwordm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUNv
b2tpZShSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCks
IHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNl
c3Npb24uCisgICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lc1NldDsKKyAgICBXZWJDb3JlOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZh
bHNlLCBmYWxzZSkuZ2V0KCksIGhvc3RuYW1lc1NldCk7CisgICAgV1RGOjpjb3B5VG9WZWN0b3Io
aG9zdG5hbWVzU2V0LCBob3N0bmFtZXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3Jh
Z2Ugc2Vzc2lvbi4KKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpLCBob3N0bmFtZSk7
Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUFsbENvb2tp
ZXMoKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3Rv
cmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4MiwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpOwogICAgIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAg
dm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKTsKLSAgICAKKyAgICB2b2lkIGNvb2tp
ZXNGb3JET00oY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIHNldENvb2tpZXNGcm9tRE9NKGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIGNvb2tpZXNFbmFibGVkKGNvbnN0IFdlYkNvcmU6OktVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBib29sJiByZXN1bHQpOworICAgIHZvaWQg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2b2lkIGdl
dFJhd0Nvb2tpZXMoY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7CisgICAg
dm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKTsK
KyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKwogICAgIFJlZlB0cjxDb3JlSVBDOjpD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTM1OTA5KQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDE2IEBAIG1lc3NhZ2Vz
IC0+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXMKICAgICBSZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKSAtPiAoKQogICAgIAogICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgLT4gKCkKKworICAgIENvb2tpZXNGb3JET00oV2ViQ29yZTo6S1VSTCBmaXJzdFBhcnR5LCBX
ZWJDb3JlOjpLVVJMIHVybCkgLT4gKFdURjo6U3RyaW5nIHJlc3VsdCkKKyAgICBTZXRDb29raWVz
RnJvbURPTShXZWJDb3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsLCBXVEY6
OlN0cmluZyBjb29raWVTdHJpbmcpCisgICAgQ29va2llc0VuYWJsZWQoV2ViQ29yZTo6S1VSTCBm
aXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKGJvb2wgZW5hYmxlZCkKKyAgICBDb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNv
cmU6OktVUkwgdXJsKSAtPiAoV1RGOjpTdHJpbmcgcmVzdWx0KQorICAgIEdldFJhd0Nvb2tpZXMo
V2ViQ29yZTo6S1VSTCBmaXJzdFBhcnR5LCBXZWJDb3JlOjpLVVJMIHVybCkgLT4gKFdURjo6VmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gY29va2llcykKKyAgICBEZWxldGVDb29raWUoV2ViQ29yZTo6
S1VSTCB1cmwsIFdURjo6U3RyaW5nIGNvb2tpZU5hbWUpCisgICAgR2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoKSAtPiAoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+IGhvc3RuYW1lcykKKyAgICBEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoV1RGOjpTdHJpbmcgaG9zdG5hbWUpCisgICAgRGVsZXRlQWxs
Q29va2llcygpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gMTM1
OTA5KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgZGVmIHN0cnVjdF9vcl9jbGFzcyhuYW1lc3Bh
Y2UsIHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6QW5pbWF0aW9uJywKICAgICAgICAgJ1dlYkNv
cmU6OkVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQnLAogICAgICAgICAnV2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmUnLAorICAgICAgICAnV2ViQ29yZTo6Q29va2llJywKICAgICAgICAgJ1dl
YkNvcmU6OkRyYWdTZXNzaW9uJywKICAgICAgICAgJ1dlYkNvcmU6OkZsb2F0UG9pbnQzRCcsCiAg
ICAgICAgICdXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAxMzU5
MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNl
RGV0YWlscy5oPgpAQCAtNjg2LDYgKzY4Nyw0MiBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q29tcG9z
aXRpb25VbmRlcmxpbmU+CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKwordm9pZCBBcmd1bWVudENv
ZGVyPENvb2tpZT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb2tp
ZSYgY29va2llKQoreworICAgIGVuY29kZXIgPDwgY29va2llLm5hbWU7CisgICAgZW5jb2RlciA8
PCBjb29raWUudmFsdWU7CisgICAgZW5jb2RlciA8PCBjb29raWUuZG9tYWluOworICAgIGVuY29k
ZXIgPDwgY29va2llLnBhdGg7CisgICAgZW5jb2RlciA8PCBjb29raWUuZXhwaXJlczsKKyAgICBl
bmNvZGVyIDw8IGNvb2tpZS5odHRwT25seTsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5zZWN1cmU7
CisgICAgZW5jb2RlciA8PCBjb29raWUuc2Vzc2lvbjsKK30KKworYm9vbCBBcmd1bWVudENvZGVy
PENvb2tpZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIENvb2tpZSYgY29va2ll
KQoreworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tpZS5uYW1lKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tpZS52YWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb29raWUuZG9tYWlu
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tp
ZS5wYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGNvb2tpZS5leHBpcmVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGNvb2tpZS5odHRwT25seSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShjb29raWUuc2VjdXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tpZS5zZXNzaW9uKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKwogI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCiB2b2lkIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQogewpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAko
cmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBVc2VyU3R5bGVTaGVldDsKICAgICBjbGFzcyBVc2VyU2NyaXB0Owog
ICAgIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGluZTsKKyAgICBzdHJ1Y3QgQ29va2llOwogICAg
IHN0cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZTsKICAgICBzdHJ1Y3QgRHJhZ1Nlc3Npb247CiAg
ICAgc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7CkBAIC0yMDcsNiArMjA4LDExIEBAIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKIH07
CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29va2llPiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNv
b2tpZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpDb29raWUmKTsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RGF0YWJhc2VEZXRhaWxzPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYsIGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyYpOwogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMmKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTggKzM5LDIwIEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9LVVJMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2FkZXJTdHJhdGVneS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29r
aWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorI2luY2x1
ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
CiAjZW5kaWYKIAotI2lmIFVTRShDRikKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jZW5k
aWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MTEzLDYgKzExNSwxMjQgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBs
YQogfQogI2VuZGlmCiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JE
T00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChX
ZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBTdHJp
bmcgcmVzdWx0OworICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NKGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVwbHkocmVz
dWx0KSwgMCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRP
TShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVT
dHJpbmcpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zyb21ET00oZmlyc3RQ
YXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0
eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBib29sIHJlc3VsdDsKKyAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQoZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxl
ZDo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29v
a2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChXZWJQcm9jZXNzOjpz
aGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0Owor
ICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShmaXJzdFBhcnR5LCB1cmwpLCBNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5
LCB1cmwpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyNpZiBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1By
b2Nlc3MoKSkgeworICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHkocmF3
Q29va2llcyksIDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVz
KGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpLCAwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRl
eHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAg
ICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gaG9zdG5hbWVzVmVjdG9yOworICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRIb3N0bmFt
ZXNXaXRoQ29va2llczo6UmVwbHkoaG9zdG5hbWVzVmVjdG9yKSwgMCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gaG9zdG5hbWVzVmVjdG9yLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgaG9zdG5hbWVzLmFkZChob3N0bmFtZXNWZWN0b3JbaV0pOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b250ZXh0LCBob3N0bmFtZXMpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYg
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShob3N0bmFtZSksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5h
bWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxl
dGVBbGxDb29raWVzKCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiAvLyBMb2FkZXJTdHJh
dGVneQogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNiArNTgsMTUgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShNQUMpIHx8IFVT
RShDRk5FVFdPUkspCiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gZGVmYXVsdENvb2tpZVN0b3JhZ2UoKSBPVkVSUklERTsKICNlbmRpZgorICAgIHZpcnR1YWwg
U3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVz
RW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6
OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3Jl
OjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNv
bnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250
ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlQWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopIE9WRVJSSURFOwogCiAg
ICAgLy8gV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1OTQ2KQorKysgU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEt
MjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0g
Rm9yd2FyZCBjb29raWUgamFyIGNhbGxzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc0VmbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmNv
b2tpZXNGb3JET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmNvb2tpZXNFbmFibGVk
KToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVsZXRlQ29va2llKToKKyAgICAg
ICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgor
ICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpkZWxldGVBbGxDb29raWVzKToKKwogMjAx
Mi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
RWZsLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29va2llSmFyLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAK
QEAgLTgwLDYgKzgxLDUxIEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpub3RpZnlDb29r
aWUKIHsKIH0KIAorU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llc0ZvckRPTShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
S1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQs
IGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpzZXRD
b29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKK3sK
KyAgICBXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmws
IGNvb2tpZVN0cmluZyk7Cit9CisKK2Jvb2wgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpjb29raWVz
RW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxl
ZChjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitTdHJpbmcgUGxhdGZvcm1TdHJhdGVn
aWVzRWZsOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBm
aXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Z2V0UmF3
Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwsIHJh
d0Nvb2tpZXMpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVsZXRlQ29va2ll
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoY29udGV4dCwgdXJs
LCBjb29raWVOYW1lKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3sKKyAgICBXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b250ZXh0LCBob3N0bmFtZXMpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQoreworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb250ZXh0LCBob3N0bmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpk
ZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIFdlYkNv
cmU6OmRlbGV0ZUFsbENvb2tpZXMoY29udGV4dCk7Cit9CisKIHZvaWQgUGxhdGZvcm1TdHJhdGVn
aWVzRWZsOjpyZWZyZXNoUGx1Z2lucygpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuaAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDE2IEBAIHByaXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29r
aWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKTsKKyAg
ICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2ll
U3RvcmFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9t
RE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
V2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCopOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQg
cmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTk0NikK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgor
CisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2Vz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuY3BwOgorICAgICAgICAoUGxhdGZvcm1T
dHJhdGVnaWVzR3RrOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0
azo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6ZGVsZXRlQWxs
Q29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3ODYuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bs
YXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAJKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvb2tpZUphci5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogCkBAIC03NCw2ICs3NSw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6bm90aWZ5Q29va2llCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6
OmNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2ll
c0ZvckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc0d0azo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBj
b29raWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwg
Zmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29y
ZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5n
IFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBQbGF0Zm9ybVN0cmF0
ZWdpZXNHdGs6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nv
b2tpZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNH
dGs6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29v
a2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVn
aWVzR3RrOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0
cmF0ZWdpZXNHdGs6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFBsYXRmb3Jt
U3RyYXRlZ2llc0d0azo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiAvLyBQ
bHVnaW5TdHJhdGVneQogdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OnJlZnJlc2hQbHVnaW5z
KCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3Ry
YXRlZ2llc0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFdlYkNvcmU6OkNv
b2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJM
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtp
bmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxl
ZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
QWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29y
ZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTk0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTExLTI3ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndh
cmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgorICAgICAgICAoV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVs
ZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdp
bkluZm8pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKToK
KyAgICAgICAgV2ViS2l0MSBzdHJhdGVneSBqdXN0IHVzZXMgUGxhdGZvcm1Db29raWVKYXIuCisK
IDIwMTItMTEtMjcgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIG9iamMvb2JqYy1ydW50aW1lLmggZG9lcyBub3QgZXhpc3Qgb24gYWxsIFBMQVRGT1JNKE1B
QykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpDb29raWVz
U3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0
Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JE
T00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwm
LCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJD
b3JlOjpOZXR3b3JraW5nQ29udGV4dCopIE9WRVJSSURFOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBPVkVSUklERTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDEzNTkwOSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCkBAIC05
NCwxMiArOTUsNTcgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBsYQog
I2VuZGlmCiB9CiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00o
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShjb250ZXh0
LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0
Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7
CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJs
LCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29udGV4dCwg
Zmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJh
d0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCBy
YXdDb29raWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tp
ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVy
bCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJp
bmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
Y29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJD
b3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hh
cmVkRGF0YWJhc2VdIHJlZnJlc2hdOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Z2V0UGx1Z2luSW5mbyhjb25zdCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+JiBwbHVnaW5zKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdpbklu
Zm8oY29uc3QgUGFnZSosIFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEyOCw3ICsxNzQsNyBAQCB2b2lkIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjCiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5nZXRUeXBlcyh0eXBlcyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1Bh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5i
dWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzU5NDYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBO
ZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAg
IChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNRdDo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJh
dGVnaWVzUXQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0
ZWdpZXNRdDo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVB
bGxDb29raWVzKToKKwogMjAxMi0xMS0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTc4Ni4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxh
dGZvcm1TdHJhdGVnaWVzUXQuY3BwCShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPE5vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVk
ZSA8UGFnZS5oPgogI2luY2x1ZGUgPFBhZ2VHcm91cC5oPgorI2luY2x1ZGUgPFBsYXRmb3JtQ29v
a2llSmFyLmg+CiAjaW5jbHVkZSA8UGx1Z2luRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgogI2luY2x1ZGUgPFFMb2NhbGU+CkBAIC05Myw2ICs5NCw1MSBAQCB2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0Ojpub3RpZnlDb29raWVzCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9y
bVN0cmF0ZWdpZXNRdDo6Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3Zv
aWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9t
RE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsK
K30KKworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVzKGNv
bnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzUXQ6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6
ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBXZWJDb3JlOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb250ZXh0LCBob3N0bmFtZXMpOworfQorCit2b2lkIFBs
YXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgV2ViQ29yZTo6
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3RuYW1lKTsKK30KKwordm9pZCBQ
bGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQor
CiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpyZWZyZXNoUGx1Z2lucygpCiB7CiAgICAgUGx1
Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwpJbmRleDogU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
UXQuaAkocmV2aXNpb24gMTM1OTA5KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBA
QCBwcml2YXRlOgogICAgIAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGNv
b2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCB2b2lk
IHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5n
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6
OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmF3Q29v
a2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNTk0NikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0
byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6ZGVsZXRlQWxsQ29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIxMzU3ODYuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEzNTkwOSkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2ll
SmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhYmFzZS5oPgogI2lmIFVTRShDRk5F
VFdPUkspCiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgpAQCAtOTAsNiArOTEsNTEgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IFdlYlBsYQogfQogI2VuZGlmCiAKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFBsdWdpbkRhdGFi
YXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CShyZXZpc2lvbiAxMzU5MDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTUgQEAg
cHJpdmF0ZToKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlKCk7CiAjZW5kaWYKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVzRm9yRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktV
UkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVh
bCBib29sIGdldFJhd0Nvb2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqKTsKIAogICAgIC8vIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbmNlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM1OTQ2KQorKysgU291cmNlL1dlYktpdC93aW5j
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0xMS0yNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3
YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0UuY3BwOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNv
b2tpZXNGb3JET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tp
ZXNGcm9tRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRW5h
YmxlZCk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldFJh
d0Nvb2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tp
ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQWxs
Q29va2llcyk6CisKIDIwMTItMTEtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3ODYuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2ll
c1dpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAkocmV2aXNpb24gMTM1OTA5KQorKysgU291
cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Nyw2ICs3OCw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRl
Z2llc1dpbkNFOjpub3RpZnlDb29rCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNX
aW5DRTo6Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpj
b29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgY29va2llU3RyaW5nKQoreworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKGNv
bnRleHQsIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBQbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1
cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30K
KworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitib29sIFBs
YXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVz
KGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2Vi
Q29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAgICBX
ZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb250ZXh0LCBob3N0bmFtZXMpOworfQor
Cit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7Cisg
ICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3RuYW1lKTsK
K30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6ZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVz
KGNvbnRleHQpOworfQorCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpyZWZyZXNoUGx1
Z2lucygpCiB7CiAgICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVz
aCgpOwpJbmRleDogU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0
cmF0ZWdpZXNXaW5DRS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuaAkocmV2aXNpb24gMTM1OTA5KQorKysg
U291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8g
V2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvb2tpZXND
aGFuZ2VkKCk7CisgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdl
YkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29va2llc0Zyb21ET00oV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGNv
b2tpZXNFbmFibGVkKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1YWwgU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VS
TCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUNvb2tpZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwm
LCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cyk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpO
ZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVBbGxDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kik7CiAKICAg
ICAvLyBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1
Z2lucygpOwo=
</data>
<flag name="commit-queue"
          id="192466"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176752</attachid>
            <date>2012-11-29 10:17:59 -0800</date>
            <delta_ts>2012-11-29 18:33:43 -0800</delta_ts>
            <desc>more build fixes</desc>
            <filename>CookieStrategy.txt</filename>
            <type>text/plain</type>
            <size>63319</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTI3ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQgY29v
a2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFBsYXRmb3JtQ29va2llSmFy
LmggZnVuY3Rpb25zIGFyZSBub3cgdXNlZCBpbiBXZWJLaXQyLgorCisgICAgICAgICogbG9hZGVy
L0Nvb2tpZUphci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICBVc2UgYSBzdHJhdGVneSBpbnN0ZWFkIG9mIGdv
aW5nIHRvIFBsYXRmb3JtQ29va2llSmFyIGRpcmVjdGx5LgorCisgICAgICAgICogcGxhdGZvcm0v
Q29va2llLmg6IChDb29raWUpOiBBZGRlZCBhIGRlZmF1bHQgY29uc3RydWN0b3IsIHNvIHRoYXQg
Q29va2llIGNvdWxkIGJlCisgICAgICAgIHNlbnQgb3ZlciBJUEMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZnVuY3Rpb25zIGZvciBjb29raWUgamFyLgor
CiAyMDEyLTExLTI5ICBUaWFuY2hlbmcgSmlhbmcgIDx0aWppYW5nQHJpbS5jb20+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIFVwZGF0ZSBCQjEwIGZvcm0gdGhlbWUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkocmV2aXNpb24gMTM2MTM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYsNyBAQCBfX1pON1dlYkNvcmUxMlRleHRJ
dGVyYXRvckQxRXYKIF9fWk43V2ViQ29yZTEyY2FjaGVTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTEy
Y3JlYXRlTWFya3VwRVBLTlNfNE5vZGVFTlNfMTNFQ2hpbGRyZW5Pbmx5RVBOM1dURjZWZWN0b3JJ
UFMwX0xtMEVFRU5TXzEzRUFic29sdXRlVVJMc0VQTlM1X0lOU18xM1F1YWxpZmllZE5hbWVFTG0w
RUVFCiBfX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVjdG9y
SVBOU180Tm9kZUVMbTBFRUVOU18yM0VBbm5vdGF0ZUZvckludGVyY2hhbmdlRWJOU18xM0VBYnNv
bHV0ZVVSTHNFCitfX1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tpZUVQTlNfMTdOZXR3b3JraW5nQ29u
dGV4dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xs
ZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgogX19aTjdXZWJDb3JlMTNBWE9iamVj
dENhY2hlMTByb290T2JqZWN0RXYKQEAgLTIzMSw4ICsyMzIsMTAgQEAgX19aTjdXZWJDb3JlMTNS
ZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQ
OV9fQ0ZFcnJvcgogX19aTjdXZWJDb3JlMTNTdHlsZWRFbGVtZW50MjJzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5RU5TXzEzQ1NTUHJvcGVydHlJREVSS04zV1RGNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUx
M1N0eWxlZEVsZW1lbnQyMnNldElubGluZVN0eWxlUHJvcGVydHlFTlNfMTNDU1NQcm9wZXJ0eUlE
RWROU18xN0NTU1ByaW1pdGl2ZVZhbHVlOVVuaXRUeXBlc0ViCitfX1pON1dlYkNvcmUxM2Nvb2tp
ZXNGb3JET01FUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktOU180S1VSTEVTNF8KIF9fWk43V2Vi
Q29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2Jq
ZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmlu
Z0UKK19fWk43V2ViQ29yZTEzZ2V0UmF3Q29va2llc0VQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVS
S05TXzRLVVJMRVM0X1JOM1dURjZWZWN0b3JJTlNfNkNvb2tpZUVMbTBFRUUKIF9fWk43V2ViQ29y
ZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTN0b0hUTUxFbGVt
ZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdp
bmRvd0VOM0pTQzdKU1ZhbHVlRQpAQCAtMjc5LDYgKzI4Miw3IEBAIF9fWk43V2ViQ29yZTE0RnJh
bWVTZWxlY3Rpb245c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb25DMUVQ
TlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTRMb2FkZXJTdHJhdGVneTIxcmVzb3VyY2VMb2FkU2No
ZWR1bGVyRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1lbnQxMHBsdWdpbk5vZGVFdgorX19a
TjdXZWJDb3JlMTRjb29raWVzRW5hYmxlZEVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRL
VVJMRVM0XwogX19aTks3V2ViQ29yZTVGcmFtZTI1dHJhY2tlZFJlcGFpbnRSZWN0c0FzVGV4dEV2
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdzZXRUcmFja3NSZXBhaW50c0ViCiBfX1pON1dlYkNv
cmU5RnJhbWVWaWV3MjByZXNldFRyYWNrZWRSZXBhaW50c0V2CkBAIC00ODAsNiArNDg0LDcgQEAg
X19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNQogX19aTjdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkViCiBfX1pON1dlYkNvcmUx
NmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1h
cmt1cEVQS05TXzVSYW5nZUUKK19fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0VQTlNfMTdO
ZXR3b3JraW5nQ29udGV4dEUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pO
N1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185RmxvYXRSZWN0RQogX19aTjdXZWJDb3Jl
MTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGVFCkBAIC01MDMsNiArNTA4LDcgQEAgX19aTjdXZWJDb3JlMTdTdWJy
ZXNvdXJjZUxvYWRlcjZjcmVhdGVFUAogX19aTjdXZWJDb3JlMTdWaWV3cG9ydEFyZ3VtZW50czE5
ZGVwcmVjYXRlZFRhcmdldERQSUUKIF9fWk43V2ViQ29yZTE3Y2FjaGVET01TdHJ1Y3R1cmVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVyZUVQS05TMl85Q2xhc3NJbmZvRQog
X19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQorX19aTjdX
ZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRL
VVJMRVM0X1JLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTd1c2VyVmlzaWJsZVN0cmluZ0VQ
NU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBOU181RnJhbWVFUE5T
XzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThIVE1MQ29udGVudEVsZW1lbnQ2Y3Jl
YXRlRVBOU184RG9jdW1lbnRFCkBAIC02NDIsNiArNjQ4LDcgQEAgX19aTjdXZWJDb3JlMjNjcmVh
dGVGcmFnbWVudEZyb21Ob2Rlc0VQTgogX19aTjdXZWJDb3JlMjNkYXRhRm9yVVJMQ29tcG9uZW50
VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVIb3N0TmFtZVdpdGhSYW5nZUVQOE5T
U3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4
TlNTdHJpbmc4X05TUmFuZ2UKK19fWk43V2ViQ29yZTIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNF
UE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUk4zV1RGN0hhc2hTZXRJTlMyXzZTdHJpbmdFTlMyXzEw
U3RyaW5nSGFzaEVOUzJfMTBIYXNoVHJhaXRzSVM0X0VFRUUKIF9fWk43V2ViQ29yZTIzZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMwXzZTdHJpbmdFTlMwXzEwU3RyaW5n
SGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43V2ViQ29yZTI0QmluYXJ5UHJvcGVy
dHlMaXN0V3JpdGVyMTd3cml0ZVByb3BlcnR5TGlzdEV2CiBfX1pON1dlYkNvcmUyNENhY2hlZFJl
c291cmNlSGFuZGxlQmFzZTExc2V0UmVzb3VyY2VFUE5TXzE0Q2FjaGVkUmVzb3VyY2VFCkBAIC02
NjEsNiArNjY4LDcgQEAgX19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJDMgog
X19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJEMkV2CiBfX1pON1dlYkNvcmUy
NGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3VtZW50RVJLTjNXVEY2U3RyaW5nRVM1
X05TXzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQogX19aTjdXZWJDb3JlMjRkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUyNGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS04zV1RGNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lRVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKQEAgLTY5MCw2ICs2OTgsNyBA
QCBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlCiBfX1pON1dlYkNvcmUy
NmRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTI4ZW5jb2RlV2l0aFVS
TEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4cmVtb3ZlTGFu
Z3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgorX19aTjdXZWJDb3JlMjljb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZUVQTlNfMTdOZXR3b3JraW5nQ29udGV4dEVSS05TXzRLVVJMRVM0XwogX19aTjdX
ZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdEVpYgogX19aTjdXZWJDb3JlMzBo
b3N0TmFtZU5lZWRzRGVjb2RpbmdXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQogX19aTjdX
ZWJDb3JlMzBob3N0TmFtZU5lZWRzRW5jb2RpbmdXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5n
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTM2MTM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MDc1LDcgKzYwNzUsNyBA
QAogCQlFMTM5ODY2MzE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MTE1NDc4NDc0
MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5jcHAgKi87IH07CiAJCUUxMzk4NjY0MTU0Nzg0NzQw
MDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTM5ODY2MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZl
ci5oICovOyB9OwogCQlFMTNGMDFGMTEyNzBFMTkwMDBERkJBNzEgLyogQ29va2llU3RvcmFnZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxM0Yw
MUYwMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1tICovOyB9OwotCQlFMTQy
NEM4QTE2NEIzQjRFMDBGMzJENDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0
MCAvKiBQbGF0Zm9ybUNvb2tpZUphci5oICovOyB9OworCQlFMTQyNEM4QTE2NEIzQjRFMDBGMzJE
NDAgLyogUGxhdGZvcm1Db29raWVKYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNDI0Qzg5MTY0QjNCNEUwMEYzMkQ0MCAvKiBQbGF0Zm9ybUNvb2tp
ZUphci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxNDI0QzkwMTY0QjQ2MEIwMEYzMkQ0MCAvKiBDb29raWVKYXJNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM4RjE2NEI0NjBCMDBGMzJE
NDAgLyogQ29va2llSmFyTWFjLm1tICovOyB9OwogCQlFMTQyNEM5MzE2NEI1MkM4MDBGMzJENDAg
LyogQ29va2llSmFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNDI0QzkxMTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuY3BwICovOyB9Owog
CQlFMTQyNEM5NDE2NEI1MkM4MDBGMzJENDAgLyogQ29va2llSmFyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTQyNEM5MjE2NEI1MkM4MDBGMzJENDAg
LyogQ29va2llSmFyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAxMzYx
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29va2llSmFyLmgiCiAKKyNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKyNpbmNsdWRl
ICJDb29raWVzU3RyYXRlZ3kuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKKyNl
bmRpZgorCiAjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICNlcnJvciBCbGFja2JlcnJ5IGN1cnJl
bnRseSB1c2VzIGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRp
b25zCiAjZW5kaWYKQEAgLTUxLDQ3ICs1Niw4MyBAQCBzdGF0aWMgTmV0d29ya2luZ0NvbnRleHQq
IG5ldHdvcmtpbmdDb250CiAKIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAg
IHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCktPmNvb2tpZXNG
b3JET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgdXJsKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNvb2tpZXNGb3JET00obmV0d29y
a2luZ0NvbnRleHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwg
dXJsKTsKKyNlbmRpZgogfQogCiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogeworI2lmIFVTRShQ
TEFURk9STV9TVFJBVEVHSUVTKQorICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3Ry
YXRlZ3koKS0+c2V0Q29va2llc0Zyb21ET00obmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsLCBjb29raWVTdHJpbmcpOworI2Vs
c2UKICAgICBzZXRDb29raWVzRnJvbURPTShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmwsIGNvb2tpZVN0cmluZyk7CisjZW5k
aWYKIH0KIAogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCiB7
CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+Y29va2llc0VuYWJsZWQobmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnQt
PmNvb2tpZVVSTCgpKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNvb2tpZXNFbmFibGVkKG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGRv
Y3VtZW50LT5jb29raWVVUkwoKSk7CisjZW5kaWYKIH0KIAogU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
KQogeworI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorICAgIHJldHVybiBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+Y29va2llc1N0cmF0ZWd5KCktPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHVybCk7CisjZWxzZQogICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCB1cmwpOworI2VuZGlmCiB9CiAKIGJvb2wgZ2V0UmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIGNv
b2tpZXMpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcmV0dXJuIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5jb29raWVzU3RyYXRlZ3koKS0+Z2V0UmF3Q29va2llcyhuZXR3b3Jr
aW5nQ29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1
cmwsIGNvb2tpZXMpOworI2Vsc2UKICAgICByZXR1cm4gZ2V0UmF3Q29va2llcyhuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB1cmws
IGNvb2tpZXMpOworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7
CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29raWUobmV0d29ya2luZ0NvbnRleHQoZG9jdW1l
bnQpLCB1cmwsIGNvb2tpZU5hbWUpOworI2Vsc2UKICAgICBkZWxldGVDb29raWUobmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpLCB1cmwsIGNvb2tpZU5hbWUpOworI2VuZGlmCiB9CiAKIHZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Cisj
aWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNv
b2tpZXNTdHJhdGVneSgpLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcygwLCBob3N0bmFtZXMpOwor
I2Vsc2UKICAgICBnZXRIb3N0bmFtZXNXaXRoQ29va2llcygwLCBob3N0bmFtZXMpOworI2VuZGlm
CiB9CiAKIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5h
bWUpCiB7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoMCwgaG9z
dG5hbWUpOworI2Vsc2UKICAgICBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoMCwgaG9zdG5hbWUp
OworI2VuZGlmCiB9CiAKIHZvaWQgZGVsZXRlQWxsQ29va2llcygpCiB7CisjaWYgVVNFKFBMQVRG
T1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVn
eSgpLT5kZWxldGVBbGxDb29raWVzKDApOworI2Vsc2UKICAgICBkZWxldGVBbGxDb29raWVzKDAp
OworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oCShyZXZpc2lv
biAxMzYxMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gdG8gdGhl
IFdlYiBJbnNwZWN0b3IuCiAKICAgICBzdHJ1Y3QgQ29va2llIHsKKyAgICAgICAgQ29va2llKCkg
eyB9CisKICAgICAgICAgQ29va2llKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBwYXRoLCBkb3VibGUgZXhwaXJlcywgYm9vbCBodHRwT25seSwgYm9vbCBzZWN1cmUsCiAgICAg
ICAgICAgICAgICAgYm9vbCBzZXNzaW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llc1N0cmF0ZWd5LmgJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCwxMCBA
QAogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShNQUMpIHx8
IFVTRShDRk5FVFdPUkspCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdl
KiAgQ0ZIVFRQQ29va2llU3RvcmFnZVJlZjsKQEAgLTM2LDYgKzM5LDEwIEBAIHR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBLVVJMOworY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7CitzdHJ1Y3QgQ29va2llOworCiBj
bGFzcyBDb29raWVzU3RyYXRlZ3kgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlD
b29raWVzQ2hhbmdlZCgpID0gMDsKQEAgLTQ0LDYgKzUxLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFn
ZSgpID0gMDsKICNlbmRpZgogCisgICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYpID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqKSA9IDA7CisKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5Db29raWVzU3RyYXRlZ3koKSB7IH0KIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0xMS0yNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbV0syXSBGb3J3YXJkIGNvb2tpZSBqYXIgY2FsbHMg
dG8gTmV0d29ya1Byb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzQ1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW46CisgICAgICAgIEFkZGVkIG1lc3NhZ2VzIHRvIG1hbmlwdXRhdGUgQ29va2ll
SmFyIGluIG5ldHdvcmsgcHJvY2Vzcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOiBSZW1vdmVkIHVubmVjZXNzYXJ5IFdlYkNv
cmU6OiBwcmVmaXhlcywKKyAgICAgICAgdGhpcyBmaWxlIGhhcyBhIHVzaW5nIGRpcmVjaXZlLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llc0Zv
ckRPTSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpz
ZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBQbGF0Zm9ybUNvb2tpZUph
ciBpbiB0aGUgbmV0d29yayBwcm9jZXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21l
c3NhZ2VzLnB5OiAoc3RydWN0X29yX2NsYXNzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDOjo6OmRl
Y29kZSk6CisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIENvb2tpZS4KKyAgICAgICAgCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0Zv
ckRPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2ll
c0Zyb21ET00pOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgV2hlbiB1c2luZyB0aGUgbmV0d29yayBwcm9jZXNzLCBmb3J3YXJkIGNvb2tpZSBjYWxscyB0
byBpdC4KKwogMjAxMi0xMS0yOSAgTWlraGFpbCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlh
a292QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXSBUaWxlZEJhY2tpbmdTdG9yZTogVXNlciBl
dmVudHMgYXJlIHNlbnQgdG8gd2ViIHBhZ2UgYmVmb3JlIGl0IGlzIHNob3duCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJDb25uZWN0aW9uU3RhY2su
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJj
ZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KQEAgLTEyMiw3ICsxMjQsNyBAQCB2b2lkIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzY2hlCiAgICAgcmVzb3VyY2VMb2FkSWRlbnRp
ZmllciA9IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkuc2NoZWR1bGVSZXNvdXJjZUxvYWQobG9hZFBhcmFtZXRlcnMsIHRoaXMpOwogfQogCi12
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjphZGRMb2FkSW5Qcm9ncmVzcyhjb25z
dCBXZWJDb3JlOjpLVVJMJiB1cmwsIFJlc291cmNlTG9hZElkZW50aWZpZXImIGlkZW50aWZpZXIp
Cit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjphZGRMb2FkSW5Qcm9ncmVzcyhj
b25zdCBLVVJMJiB1cmwsIFJlc291cmNlTG9hZElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAg
ICAgaWRlbnRpZmllciA9IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCkuYWRkTG9hZEluUHJvZ3Jlc3ModXJsKTsKIH0KQEAgLTE1Miw2ICsxNTQs
NjIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0UwogICAgIG1fc2Vy
aWFsTG9hZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCit2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpjb29raWVzRm9yRE9NKGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0
IEtVUkwmIHVybCwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9j
ZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgcmVzdWx0ID0gV2ViQ29y
ZTo6Y29va2llc0ZvckRPTShSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBm
YWxzZSkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IEtVUkwmIGZpcnN0UGFydHks
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7CisgICAgLy8g
RklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisg
ICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNy
ZWF0ZShmYWxzZSwgZmFsc2UpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyk7
Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgYm9vbCYgcmVzdWx0KQor
eworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBhIGNvcnJlY3Qgc3RvcmFnZSBz
ZXNzaW9uLgorICAgIHJlc3VsdCA9IFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2UsIGZhbHNlKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJs
KTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJs
LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2Ug
YSBjb3JyZWN0IHN0b3JhZ2Ugc2Vzc2lvbi4KKyAgICByZXN1bHQgPSBXZWJDb3JlOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSgwLCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJlc3VsdCkKK3sKKyAg
ICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0IHN0b3JhZ2Ugc2Vzc2lv
bi4KKyAgICBXZWJDb3JlOjpnZXRSYXdDb29raWVzKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojpj
cmVhdGUoZmFsc2UsIGZhbHNlKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsLCByZXN1bHQpOworfQor
Cit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkZWxldGVDb29raWUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgLy8gRklYTUUgKE5l
dHdvcmtQcm9jZXNzKTogVXNlIGEgY29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgV2ViQ29y
ZTo6ZGVsZXRlQ29va2llKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoZmFsc2UsIGZh
bHNlKS5nZXQoKSwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoVmVjdG9yPFN0cmluZz4mIGhv
c3RuYW1lcykKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBVc2UgYSBjb3JyZWN0
IHN0b3JhZ2Ugc2Vzc2lvbi4KKyAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzU2V0OworICAg
IFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjpjcmVhdGUoZmFsc2UsIGZhbHNlKS5nZXQoKSwgaG9zdG5hbWVzU2V0KTsKKyAgICBXVEY6OmNv
cHlUb1ZlY3Rvcihob3N0bmFtZXNTZXQsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFVzZSBhIGNv
cnJlY3Qgc3RvcmFnZSBzZXNzaW9uLgorICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCks
IGhvc3RuYW1lKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGVs
ZXRlQWxsQ29va2llcygpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVXNlIGEg
Y29ycmVjdCBzdG9yYWdlIHNlc3Npb24uCisgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyhS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSkuZ2V0KCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDEzNjEzOCkKKysr
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDE2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKTsKICAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wpOwotICAgIAorICAg
IHZvaWQgY29va2llc0ZvckRPTShjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBXZWJDb3JlOjpLVVJMJiwgU3RyaW5nJiByZXN1bHQpOworICAgIHZvaWQgc2V0Q29va2llc0Zy
b21ET00oY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VS
TCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY29va2llc0VuYWJsZWQoY29uc3QgV2ViQ29y
ZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGJvb2wmIHJlc3VsdCk7
CisgICAgdm9pZCBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBXZWJDb3JlOjpL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgU3RyaW5nJiByZXN1bHQpOwor
ICAgIHZvaWQgZ2V0UmF3Q29va2llcyhjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBXZWJDb3JlOjpLVVJMJiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKTsKKyAgICB2b2lk
IGRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lKTsKKyAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFZlY3RvcjxTdHJpbmc+JiBo
b3N0bmFtZXMpOworICAgIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUpOworICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOworCiAgICAgUmVmUHRy
PENvcmVJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICAKICAgICBIYXNoU2V0PE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAx
MzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTYg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2NlcwogICAgIFJlc3VtZVBl
bmRpbmdSZXF1ZXN0cygpIC0+ICgpCiAgICAgCiAgICAgU2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKSAtPiAoKQorCisgICAgQ29va2llc0ZvckRPTShXZWJDb3JlOjpLVVJMIGZp
cnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsKSAtPiAoV1RGOjpTdHJpbmcgcmVzdWx0KQorICAg
IFNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6OktVUkwgZmlyc3RQYXJ0eSwgV2ViQ29yZTo6S1VS
TCB1cmwsIFdURjo6U3RyaW5nIGNvb2tpZVN0cmluZykKKyAgICBDb29raWVzRW5hYmxlZChXZWJD
b3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsKSAtPiAoYm9vbCBlbmFibGVk
KQorICAgIENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFdlYkNvcmU6OktVUkwgZmlyc3RQ
YXJ0eSwgV2ViQ29yZTo6S1VSTCB1cmwpIC0+IChXVEY6OlN0cmluZyByZXN1bHQpCisgICAgR2V0
UmF3Q29va2llcyhXZWJDb3JlOjpLVVJMIGZpcnN0UGFydHksIFdlYkNvcmU6OktVUkwgdXJsKSAt
PiAoV1RGOjpWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzKQorICAgIERlbGV0ZUNvb2tp
ZShXZWJDb3JlOjpLVVJMIHVybCwgV1RGOjpTdHJpbmcgY29va2llTmFtZSkKKyAgICBHZXRIb3N0
bmFtZXNXaXRoQ29va2llcygpIC0+IChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4gaG9zdG5hbWVz
KQorICAgIERlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXVEY6OlN0cmluZyBob3N0bmFtZSkKKyAg
ICBEZWxldGVBbGxDb29raWVzKCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CShy
ZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2Fn
ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCBkZWYgc3RydWN0X29yX2Ns
YXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpBbmltYXRpb24nLAogICAg
ICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCcsCiAgICAgICAgICdXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCisgICAgICAgICdXZWJDb3JlOjpDb29raWUnLAog
ICAgICAgICAnV2ViQ29yZTo6RHJhZ1Nlc3Npb24nLAogICAgICAgICAnV2ViQ29yZTo6RmxvYXRQ
b2ludDNEJywKICAgICAgICAgJ1dlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MnLApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJl
dmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29raWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Ny
ZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRGF0YWJhc2VEZXRhaWxzLmg+CkBAIC02ODYsNiArNjg3LDQyIEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxDb21wb3NpdGlvblVuZGVybGluZT4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorCit2b2lk
IEFyZ3VtZW50Q29kZXI8Q29va2llPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgQ29va2llJiBjb29raWUpCit7CisgICAgZW5jb2RlciA8PCBjb29raWUubmFtZTsKKyAg
ICBlbmNvZGVyIDw8IGNvb2tpZS52YWx1ZTsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5kb21haW47
CisgICAgZW5jb2RlciA8PCBjb29raWUucGF0aDsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5leHBp
cmVzOworICAgIGVuY29kZXIgPDwgY29va2llLmh0dHBPbmx5OworICAgIGVuY29kZXIgPDwgY29v
a2llLnNlY3VyZTsKKyAgICBlbmNvZGVyIDw8IGNvb2tpZS5zZXNzaW9uOworfQorCitib29sIEFy
Z3VtZW50Q29kZXI8Q29va2llPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQ29v
a2llJiBjb29raWUpCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLm5hbWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLnZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNv
b2tpZS5kb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoY29va2llLnBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUoY29va2llLmV4cGlyZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLmh0dHBPbmx5KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvb2tpZS5zZWN1cmUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29va2llLnNlc3Npb24pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiAjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKIHZvaWQgQXJndW1lbnRDb2RlcjxEYXRhYmFzZURldGFpbHM+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEYXRhYmFzZURldGFpbHMmIGRl
dGFpbHMpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFVzZXJTdHlsZVNoZWV0OwogICAgIGNsYXNzIFVz
ZXJTY3JpcHQ7CiAgICAgc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOworICAgIHN0cnVjdCBD
b29raWU7CiAgICAgc3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZlOwogICAgIHN0cnVjdCBEcmFn
U2Vzc2lvbjsKICAgICBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKQEAgLTIwNyw2ICsyMDgs
MTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVy
bGluZSYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpD
b29raWU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6Q29va2llJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFdlYkNvcmU6OkNvb2tpZSYpOworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpEYXRhYmFzZURldGFpbHM+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzJik7CiAgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkRhdGFiYXNlRGV0
YWlscyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNp
b24gMTM2MTM4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOCArMzksMjAg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0tVUkwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclN0
cmF0ZWd5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAorI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2VuZGlmCisKICNpZiBQTEFU
Rk9STShXSU4pICYmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KICNlbmRpZgogCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC0xMTMsNiArMTE1LDEyNCBAQCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gV2ViUGxhCiB9CiAjZW5kaWYKIAorU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
CisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Cisg
ICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9N
OjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBXZWJDb3JlOjpj
b29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK3ZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZVN0cmluZykKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlm
IChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRDb29raWVzRnJv
bURPTShmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyksIDApOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTShjb250ZXh0
LCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyk7Cit9CisKK2Jvb2wgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJv
Y2VzcygpKSB7CisgICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZChmaXJz
dFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNv
b2tpZXNFbmFibGVkOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBX
ZWJDb3JlOjpjb29raWVzRW5hYmxlZChjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitT
dHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgS1VSTCYgdXJsKQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFN0cmlu
ZyByZXN1bHQ7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGZpcnN0UGFydHks
IHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorCisg
ICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnRleHQs
IGZpcnN0UGFydHksIHVybCk7Cit9CisKK2Jvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRS
YXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVz
ZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVz
OjpSZXBseShyYXdDb29raWVzKSwgMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFdlYkNvcmU6Omdl
dFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwor
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7
CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSksIDAp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBXZWJDb3JlOjpkZWxldGVD
b29raWUoY29udGV4dCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3Mo
KSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBob3N0bmFtZXNWZWN0b3I7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRIb3N0bmFt
ZXNXaXRoQ29va2llcygpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzOjpSZXBseShob3N0bmFtZXNWZWN0b3IpLCAwKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBob3N0bmFtZXNWZWN0b3Iuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBob3N0bmFtZXMuYWRkKGhvc3RuYW1lc1ZlY3RvcltpXSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKGNvbnRleHQsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
KyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb250
ZXh0LCBob3N0bmFtZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVB
bGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQoreworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJv
Y2VzcygpKSB7CisgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OkRlbGV0ZUFsbENvb2tpZXMoKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoY29udGV4dCk7Cit9CisKIC8v
IExvYWRlclN0cmF0ZWd5CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxNSBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KE1BQykgfHwgVVNFKENGTkVUV09SSykKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOwogI2VuZGlmCisg
ICAgdmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29va2llc0Zyb21ET00oV2ViQ29yZTo6
TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25z
dCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGNvb2tpZXNFbmFibGVkKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgV2ViQ29yZTo6S1VSTCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29r
aWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShXZWJDb3JlOjpOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoV2ViQ29yZTo6TmV0
d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpOZXR3b3Jr
aW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVBbGxDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KikgT1ZF
UlJJREU7CiAKICAgICAvLyBXZWJDb3JlOjpMb2FkZXJTdHJhdGVneQogI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzYxMzgpCisrKyBT
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBA
QAorMjAxMi0xMS0yNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAg
ICAgICBbV0syXSBGb3J3YXJkIGNvb2tpZSBqYXIgY2FsbHMgdG8gTmV0d29ya1Byb2Nlc3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzQ1NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc0VmbDo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6
OnNldENvb2tpZXNGcm9tRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6Omdl
dFJhd0Nvb2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorCiAyMDEyLTExLTI5ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXSBCcm9rZW4gcmVuZGVyaW5nIG9jY3VycyB3aGVuIHNjcm9sbGluZyBp
biBld2tfdmlld19zaW5nbGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5jcHAJKHJldmlzaW9uIDEz
NjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvb2tpZUphci5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCkBAIC04MCw2ICs4MSw1MSBAQCB2
b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6bm90aWZ5Q29va2llCiB7CiB9CiAKK1N0cmluZyBQ
bGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOwor
fQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6c2V0Q29va2llc0Zyb21ET00oTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29v
a2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQor
Citib29sIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0
eSwgdXJsKTsKK30KKworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwm
IGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30K
KworYm9vbCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwg
VmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJh
d0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9p
ZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7Cisg
ICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzRWZsOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7Cisg
ICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsK
K30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNFZmw6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUp
OworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6ZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVz
KGNvbnRleHQpOworfQorCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0VmbDo6cmVmcmVzaFBsdWdp
bnMoKQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpJbmRleDogU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzRWZsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVz
RWZsLmgJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L1BsYXRmb3JtU3RyYXRlZ2llc0VmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwx
NSBAQCBwcml2YXRlOgogCiAgICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUNvb2tpZXNDaGFuZ2VkKCk7CisgICAgdmlydHVhbCBTdHJpbmcgY29v
a2llc0ZvckRPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29va2llc0Zyb21ET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCBib29sIGNvb2tpZXNFbmFibGVkKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYpOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRSYXdDb29r
aWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmly
c3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVBbGxDb29raWVzKFdlYkNvcmU6Ok5l
dHdvcmtpbmdDb250ZXh0Kik7CiAKICAgICAvLyBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneQogICAg
IHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOwpJbmRleDogU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2
aXNpb24gMTM2MTM4KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEtMjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gRm9yd2FyZCBjb29raWUgamFyIGNhbGxzIHRv
IE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM0NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHA6CisgICAg
ICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoUGxh
dGZvcm1TdHJhdGVnaWVzR3RrOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChQbGF0Zm9y
bVN0cmF0ZWdpZXNHdGs6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoUGxhdGZv
cm1TdHJhdGVnaWVzR3RrOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc0d0azo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzR3Rr
OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVz
R3RrOjpkZWxldGVBbGxDb29raWVzKToKKwogMjAxMi0xMS0yNyAgSmFtZXMgU2ltb25zZW4gIDxz
aW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ29uc29saWRhdGUgRnJhbWVMb2FkZXI6
OmxvYWQoKSBpbnRvIG9uZSBmdW5jdGlvbiB0YWtpbmcgYSBGcmFtZUxvYWRSZXF1ZXN0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc0d0ay5jcHAJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
b2tpZUphci5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgogCkBAIC03NCw2ICs3NSw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc0d0
azo6bm90aWZ5Q29va2llCiB7CiB9CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OmNv
b2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRl
Z2llc0d0azo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmly
c3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRlZ2ll
c0d0azo6Y29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFBs
YXRmb3JtU3RyYXRlZ2llc0d0azo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKworYm9vbCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNHdGs6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6
OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVz
R3RrOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwg
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0
ZWdpZXNHdGs6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFBsYXRmb3JtU3Ry
YXRlZ2llc0d0azo6ZGVsZXRlQWxsQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKGNvbnRleHQpOworfQorCiAvLyBQbHVn
aW5TdHJhdGVneQogdm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNHdGs6OnJlZnJlc2hQbHVnaW5zKCkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRl
Z2llc0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1BsYXRmb3JtU3RyYXRlZ2llc0d0ay5oCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNHdGsuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFdlYkNvcmU6OkNvb2tp
ZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOworICAg
IHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7
CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChX
ZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5l
dHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxs
Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29yZTo6
UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTExLTI3ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQg
Y29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llcyk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgorICAgICAgICAoV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRl
bGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdpbklu
Zm8pOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKToKKyAg
ICAgICAgV2ViS2l0MSBzdHJhdGVneSBqdXN0IHVzZXMgUGxhdGZvcm1Db29raWVKYXIuCisKIDIw
MTItMTEtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI5NzAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIs
MTUgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJD
b3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9N
KFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdl
YkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsQ29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29u
dGV4dCopIE9WRVJSSURFOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2
aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMubW0JKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bUNvb2tpZUphci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KICNp
bXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCkBAIC05NCwxMiArOTUsNTcgQEAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBsYQogI2VuZGlmCiB9CiAKK1N0cmlu
ZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0ZvckRPTShjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwp
OworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCit7CisgICAgV2ViQ29yZTo6c2V0
Q29va2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpOwor
fQorCitib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVy
bCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsK
K30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6Omdl
dFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwor
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7
CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7Cit9
CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7
CisgICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY29udGV4dCwgaG9zdG5hbWVz
KTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkK
K3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5h
bWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29r
aWVzKGNvbnRleHQpOworfQorCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVmcmVzaFBs
dWdpbnMoKQogewogICAgIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHJlZnJl
c2hdOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGx1Z2luSW5mbyhjb25z
dCBXZWJDb3JlOjpQYWdlKiwgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+JiBwbHVnaW5zKQor
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBsdWdpbkluZm8oY29uc3QgUGFnZSosIFZl
Y3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAKQEAgLTEyOCw3ICsxNzQsNyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Z2V0VHlwZXMoVmVjCiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5nZXRU
eXBlcyh0eXBlcyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1Bhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICByZXR1
cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3Rl
Ym9hcmRUeXBlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzYxMzgpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTExLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAg
ICAgIFtXSzJdIEZvcndhcmQgY29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHA6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdp
ZXNRdDo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6c2V0
Q29va2llc0Zyb21ET00pOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmNvb2tpZXNF
bmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Z2V0UmF3Q29v
a2llcyk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6Cisg
ICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToK
KyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVBbGxDb29raWVzKToKKwogMjAx
Mi0xMS0yOCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAg
ICAgICBbVGV4bWFwXSBSRUdSRVNTSU9OKHIxMzU2MjApIFF0VGVzdEJyb3dzZXIgY3Jhc2hlcyBv
biBHb29nbGUtZ3Jhdml0eS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwCShyZXZpc2lvbiAxMzYxMzgp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPE5vdEltcGxl
bWVudGVkLmg+CiAjaW5jbHVkZSA8UGFnZS5oPgogI2luY2x1ZGUgPFBhZ2VHcm91cC5oPgorI2lu
Y2x1ZGUgPFBsYXRmb3JtQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8UGx1Z2luRGF0YWJhc2UuaD4K
ICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFMb2NhbGU+CkBAIC05Myw2
ICs5NCw1MSBAQCB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpub3RpZnlDb29raWVzCiB7CiB9
CiAKK1N0cmluZyBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0ZvckRPTShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJs
KQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRm9yRE9NKGNvbnRleHQsIGZpcnN0UGFy
dHksIHVybCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OnNldENvb2tpZXNGcm9t
RE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQoreworICAgIFdlYkNv
cmU6OnNldENvb2tpZXNGcm9tRE9NKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgY29va2llU3Ry
aW5nKTsKK30KKworYm9vbCBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6Y29va2llc0VuYWJsZWQoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHksIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoY29udGV4dCwg
Zmlyc3RQYXJ0eSwgdXJsKTsKK30KKworU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJD
b3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb250ZXh0LCBmaXJzdFBhcnR5LCB1
cmwpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpnZXRSYXdDb29raWVzKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJldHVybiBXZWJDb3Jl
OjpnZXRSYXdDb29raWVzKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Cit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGNvbnRleHQsIHVybCwgY29va2llTmFtZSk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzUXQ6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
K3sKKyAgICBXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb250ZXh0LCBob3N0bmFt
ZXMpOworfQorCit2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
Cit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3Ru
YW1lKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNRdDo6ZGVsZXRlQWxsQ29va2llcyhO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29r
aWVzKGNvbnRleHQpOworfQorCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0OjpyZWZyZXNoUGx1
Z2lucygpCiB7CiAgICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVz
aCgpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGxhdGZvcm1TdHJhdGVnaWVzUXQuaAkocmV2aXNpb24gMTM2MTM4KQorKysgU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw2ICs1NiwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIFdlYkNvcmU6OkNvb2tp
ZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpOworICAg
IHZpcnR1YWwgU3RyaW5nIGNvb2tpZXNGb3JET00oV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7
CisgICAgdmlydHVhbCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6
S1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBjb29raWVzRW5hYmxlZChX
ZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmF3Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb29raWUoV2ViQ29y
ZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6Ok5l
dHdvcmtpbmdDb250ZXh0KiwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxs
Q29va2llcyhXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCopOwogCiAgICAgLy8gV2ViQ29yZTo6
UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTI3ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEZvcndhcmQg
Y29va2llIGphciBjYWxscyB0byBOZXR3b3JrUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00p
OgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAg
KFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQWxsQ29va2llcyk6CisKIDIwMTItMTEtMjcg
IEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENvbnNv
bGlkYXRlIEZyYW1lTG9hZGVyOjpsb2FkKCkgaW50byBvbmUgZnVuY3Rpb24gdGFraW5nIGEgRnJh
bWVMb2FkUmVxdWVzdApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxMzYxMzgp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tp
ZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YWJhc2UuaD4KICNpZiBVU0UoQ0ZO
RVRXT1JLKQogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KQEAgLTkwLDYgKzkxLDUxIEBAIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBXZWJQbGEKIH0KICNlbmRpZgogCitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
b29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJz
dFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNG
b3JET00oY29udGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29v
a2llU3RyaW5nKQoreworICAgIFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKGNvbnRleHQsIGZp
cnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKK30KKworYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNvb2tpZXNFbmFibGVkKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OmNvb2tpZXNFbmFibGVkKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK1N0cmluZyBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJM
JiB1cmwpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK2Jvb2wgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBL
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdDb29raWVzKGNvbnRleHQsIGZpcnN0
UGFydHksIHVybCwgcmF3Q29va2llcyk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpkZWxldGVDb29raWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tp
ZShjb250ZXh0LCB1cmwsIGNvb2tpZU5hbWUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFdlYkNvcmU6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKGNvbnRleHQsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnRleHQsIGhvc3RuYW1lKTsKK30KKwordm9pZCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyhjb250ZXh0KTsKK30KKwogdm9pZCBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKIHsKICAgICBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aAkocmV2aXNpb24gMTM2MTM4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDE1IEBA
IHByaXZhdGU6CiAjaWYgVVNFKENGTkVUV09SSykKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpOwogI2VuZGlmCisgICAg
dmlydHVhbCBTdHJpbmcgY29va2llc0ZvckRPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktVUkwmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29va2llc0Zyb21ET00oV2ViQ29yZTo6TmV0d29ya2luZ0Nv
bnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpL
VVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGNvb2tpZXNFbmFibGVkKFdl
YkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1YWwgU3RyaW5nIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRSYXdDb29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+Jik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShXZWJDb3Jl
OjpOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoV2ViQ29yZTo6TmV0
d29ya2luZ0NvbnRleHQqLCBIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVBbGxD
b29raWVzKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kik7CiAKICAgICAvLyBXZWJDb3JlOjpQ
bHVnaW5TdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOwpJbmRleDog
U291cmNlL1dlYktpdC93aW5jZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC93aW5jZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjEzOCkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
Y2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEtMjcg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gRm9y
d2FyZCBjb29raWUgamFyIGNhbGxzIHRvIE5ldHdvcmtQcm9jZXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM0NTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3Jt
U3RyYXRlZ2llc1dpbkNFLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpj
b29raWVzRm9yRE9NKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpzZXRDb29r
aWVzRnJvbURPTSk6CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5DRTo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpnZXRS
YXdDb29raWVzKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVDb29r
aWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUFs
bENvb2tpZXMpOgorCiAyMDEyLTExLTI3ICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBDb25zb2xpZGF0ZSBGcmFtZUxvYWRlcjo6bG9hZCgpIGludG8g
b25lIGZ1bmN0aW9uIHRha2luZyBhIEZyYW1lTG9hZFJlcXVlc3QKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJh
dGVnaWVzV2luQ0UuY3BwCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbmNl
L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVKYXIu
aCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTc3LDYgKzc4LDUxIEBAIHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6Om5vdGlm
eUNvb2sKIHsKIH0KIAorU3RyaW5nIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNFOjpjb29raWVzRm9y
RE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oY29u
dGV4dCwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6c2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJp
bmcpCit7CisgICAgV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00oY29udGV4dCwgZmlyc3RQYXJ0
eSwgdXJsLCBjb29raWVTdHJpbmcpOworfQorCitib29sIFBsYXRmb3JtU3RyYXRlZ2llc1dpbkNF
Ojpjb29raWVzRW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjb29r
aWVzRW5hYmxlZChjb250ZXh0LCBmaXJzdFBhcnR5LCB1cmwpOworfQorCitTdHJpbmcgUGxhdGZv
cm1TdHJhdGVnaWVzV2luQ0U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnRleHQsIGZpcnN0UGFydHksIHVybCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1TdHJhdGVnaWVz
V2luQ0U6OmdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHksIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoY29udGV4dCwgZmlyc3RQ
YXJ0eSwgdXJsLCByYXdDb29raWVzKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdpZXNXaW5D
RTo6ZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWUoY29udGV4dCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBQbGF0Zm9ybVN0cmF0ZWdp
ZXNXaW5DRTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFdlYkNvcmU6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKGNvbnRleHQsIGhvc3RuYW1lcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1T
dHJhdGVnaWVzV2luQ0U6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBXZWJDb3JlOjpkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29udGV4dCwgaG9zdG5hbWUpOworfQorCit2b2lkIFBsYXRm
b3JtU3RyYXRlZ2llc1dpbkNFOjpkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoY29udGV4dCk7Cit9CisK
IHZvaWQgUGxhdGZvcm1TdHJhdGVnaWVzV2luQ0U6OnJlZnJlc2hQbHVnaW5zKCkKIHsKICAgICBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9y
bVN0cmF0ZWdpZXNXaW5DRS5oCShyZXZpc2lvbiAxMzYxMzgpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bmNlL1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1dpbkNFLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVz
U3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBjb29raWVzRm9yRE9NKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb29raWVzRnJvbURPTShXZWJDb3JlOjpOZXR3b3JraW5nQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGZpcnN0UGFydHksIGNvbnN0IFdlYkNvcmU6OktV
UkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29va2llc0VuYWJsZWQoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVhbCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAgdmlydHVh
bCBib29sIGdldFJhd0Nvb2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29va2llKFdlYkNvcmU6
Ok5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpOZXR3
b3JraW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqKTsKIAogICAgIC8vIFdlYkNvcmU6OlBs
dWdpblN0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>