<?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>28303</bug_id>
          
          <creation_ts>2009-08-14 06:49:24 -0700</creation_ts>
          <short_desc>[Qt] XSLT support with QtXmlPatterns</short_desc>
          <delta_ts>2009-10-01 05:09:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jakub Wieczorek">jwieczorek</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>marcus</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>140221</commentid>
    <comment_count>0</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 06:49:24 -0700</bug_when>
    <thetext>Since the 4.5 release, QtXmlPatterns has supported XSLT 2.0 so it seems to be a good idea for QtWebKit to use that rather than libxslt (which in fact doesn&apos;t build now with the Qt port).

http://doc.trolltech.com/4.6-snapshot/qtxmlpatterns.html#xslt-2-0
Here is an overview of how much complete the XSLT 2.0 support in QtXmlPatterns is. It&apos;s lacking some important features but making QtWebKit use that should help improve it.

There is some libxml2/libxslt specific code laying around, not only in the implementations of XSLTProcessor and XSLStyleSheet but also in e.g. Document. For the former, we should provide our own separate implementations, for the latter we would need some #ifdefs.

The other files/classes the Qt port doesn&apos;t need at all:
- XSLImportRule: QtXmlPatterns currently doesn&apos;t support xsl:import/xsl:include but even when it does, it will most likely import documents internally (of course we would need to hook that so that we can take care of security and caching), so the XSLImportRule class we don&apos;t need.
- XSLTExtensions - this is completely a libxslt specific thing, we can&apos;t add extra functionality to the QtXmlPatterns module so we don&apos;t need it either.
- XSLTUnicodeSort - as above, we can&apos;t extend QXmlQuery with our own sorting functionality. If we wanted to add missing bits to the xsl:import implementation, we would have to patch QtXmlPatterns.

The Qtish implementation of XSLStyleSheet would be pretty basic, we don&apos;t support child stylesheets and pre-compiling stylesheets so really there is not much what XSLStyleSheet could do apart from actually holding a stylesheet source.

Currently I managed to achieve a result of ~35% passing layout tests. The rest can be skipped with notes about why they fail so they can be investigated in QtXmlPatterns. I&apos;ll post the exact results when submitting the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140251</commentid>
    <comment_count>1</comment_count>
      <attachid>34848</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 09:48:26 -0700</bug_when>
    <thetext>Created attachment 34848
Move the libxslt specific part of XSLTProcessor to a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140252</commentid>
    <comment_count>2</comment_count>
      <attachid>34849</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 09:55:36 -0700</bug_when>
    <thetext>Created attachment 34849
Move the libxslt specific part of XSLTProcessor to a separate file.

This one actually fixes the whitespace errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140258</commentid>
    <comment_count>3</comment_count>
      <attachid>34852</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 10:07:21 -0700</bug_when>
    <thetext>Created attachment 34852
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140260</commentid>
    <comment_count>4</comment_count>
      <attachid>34854</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 10:12:31 -0700</bug_when>
    <thetext>Created attachment 34854
[Qt] Implement XSLT support with QtXmlPatterns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140261</commentid>
    <comment_count>5</comment_count>
      <attachid>34855</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 10:25:01 -0700</bug_when>
    <thetext>Created attachment 34855
[Qt] Add expected result for fast/xsl/document-function.xml.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140265</commentid>
    <comment_count>6</comment_count>
      <attachid>34858</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 10:41:08 -0700</bug_when>
    <thetext>Created attachment 34858
[Qt] Update expected result for fast/xsl/xslt_unicode.xml.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140275</commentid>
    <comment_count>7</comment_count>
      <attachid>34860</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 11:05:48 -0700</bug_when>
    <thetext>Created attachment 34860
Remove the encoding attribute from xsl:stylesheet element in
resources/unicode.xsl.

This one will have no effect on other ports, it is needed to make Qtish XSLT processor happy: currently it stops evaluating the stylesheet after encountering the misplaced attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140277</commentid>
    <comment_count>8</comment_count>
      <attachid>34861</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-14 11:10:29 -0700</bug_when>
    <thetext>Created attachment 34861
[Qt] Update the Skipped list.

The numbers:

13 test cases (37%) succeeded
19 test cases (54%) had incorrect layout
2 test cases (5%) were new
1 test case (2%) crashed

We&apos;re passing 13 test cases within the fast/xsl directory and 5 more outside it. They all have been unskipped and the rest skipped with notes about why they&apos;re failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140906</commentid>
    <comment_count>9</comment_count>
      <attachid>34849</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:24:48 -0700</bug_when>
    <thetext>Comment on attachment 34849
Move the libxslt specific part of XSLTProcessor to a separate file.

This looks like an OK first step.  Thank you for breaking this into pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140920</commentid>
    <comment_count>10</comment_count>
      <attachid>34855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:39:53 -0700</bug_when>
    <thetext>Comment on attachment 34855
[Qt] Add expected result for fast/xsl/document-function.xml.

This seems unrelated, but looks fine.  the commit-queue can&apos;t handle this due to dependancies on other patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140921</commentid>
    <comment_count>11</comment_count>
      <attachid>34858</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:40:39 -0700</bug_when>
    <thetext>Comment on attachment 34858
[Qt] Update expected result for fast/xsl/xslt_unicode.xml.

Also unrelated to the rest.  ChangeLog is malformed, so will need manual landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140922</commentid>
    <comment_count>12</comment_count>
      <attachid>34860</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:41:58 -0700</bug_when>
    <thetext>Comment on attachment 34860
Remove the encoding attribute from xsl:stylesheet element in
resources/unicode.xsl.

Why?  Do we need a test to make sure that we fail with the encoding attribute?  If so, this needs a test.  We don&apos;t really want some versions of WebKit to behave differently  with XSLT content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140923</commentid>
    <comment_count>13</comment_count>
      <attachid>34849</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:42:01 -0700</bug_when>
    <thetext>Comment on attachment 34849
Move the libxslt specific part of XSLTProcessor to a separate file.

Rejecting patch 34849 from commit-queue.  This patch will require manual commit.

Patch https://bugs.webkit.org/attachment.cgi?id=34849 from bug 28303 failed to download and apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140926</commentid>
    <comment_count>14</comment_count>
      <attachid>34861</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:42:30 -0700</bug_when>
    <thetext>Comment on attachment 34861
[Qt] Update the Skipped list.

Looks OK.  Depends on others, so cq-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140929</commentid>
    <comment_count>15</comment_count>
      <attachid>34854</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:45:21 -0700</bug_when>
    <thetext>Comment on attachment 34854
[Qt] Implement XSLT support with QtXmlPatterns.

Seems we could have a better abstraction here:
#if ENABLE(XSLT)
 310 #if ENABLE(XSLT) &amp;&amp; !USE(QXMLQUERY)
311311     , m_transformSource(0)
312312 #endif

Style.  Likewise, we need a better abstraction:
 #if USE(QXMLQUERY)
 3757 void Document::setTransformSource(const String &amp;source)
 3758 {
 3759     m_transformSource = source;
 3760 }
 3761 #else

If that means having a TransformSource class which is opaque to document, that&apos;s fine.

Abstraction/cleanup needed:
 #if ENABLE(XSLT)
 183 #if ENABLE(XSLT) &amp;&amp; !USE(QXMLQUERY)
184184 void* xmlDocPtrForString(DocLoader*, const String&amp; source, const String&amp; url);
185185 #endif

Yeah, basically all of the:
 44 #if ENABLE(XSLT) &amp;&amp; !USE(QXMLQUERY)
look wrong.  Or at least they could be done better with just a little bit of abstraction work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140931</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:47:03 -0700</bug_when>
    <thetext>cq failure:
Hunk #5 FAILED at 111.
1 out of 8 hunks FAILED -- saving rejects to file WebCore/xml/XSLTProcessor.cpp.rej
patch -p0 &quot;WebCore/xml/XSLTProcessor.cpp&quot; returned 1.  Pass --force to ignore patch failures.
Logging in as eric@webkit.org...

Again, generally we try to avoid so many patches on a bug, as the comment threads get confusing. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141039</commentid>
    <comment_count>17</comment_count>
      <attachid>35024</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 00:14:37 -0700</bug_when>
    <thetext>Created attachment 35024
Move the libxslt specific part of XSLTProcessor to a separate file.

Rebased against ToT. It should apply cleanly now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141042</commentid>
    <comment_count>18</comment_count>
      <attachid>35024</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 00:16:42 -0700</bug_when>
    <thetext>Comment on attachment 35024
Move the libxslt specific part of XSLTProcessor to a separate file.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141046</commentid>
    <comment_count>19</comment_count>
      <attachid>35024</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 00:26:42 -0700</bug_when>
    <thetext>Comment on attachment 35024
Move the libxslt specific part of XSLTProcessor to a separate file.

Rejecting patch 35024 from commit-queue.  This patch will require manual commit.

Patch https://bugs.webkit.org/attachment.cgi?id=35024 from bug 28303 failed to download and apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141052</commentid>
    <comment_count>20</comment_count>
      <attachid>35027</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 01:25:14 -0700</bug_when>
    <thetext>Created attachment 35027
Move the libxslt specific part of XSLTProcessor to a separate file.

Sorry for that, whitespace differences got messed up when editing the patch by hand. This one should hopefully be fine.

Also noticed that I&apos;m missing an update to the xcode project file. Is there any guideline on how to update that file by hand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141066</commentid>
    <comment_count>21</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 04:03:48 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 34860 [details])
&gt; Why?  Do we need a test to make sure that we fail with the encoding attribute? 
&gt; If so, this needs a test.  We don&apos;t really want some versions of WebKit to
&gt; behave differently  with XSLT content.

Well, for now QtWebKit _will_ behave differently comparing to libxslt-based equivalents, as QtXmlPatterns&apos; processor is quite strict, doesn&apos;t have XSLT 1.0 compatibility mode yet and still lacks some features. So while some sites may not work properly in QtWebKit, it should help us track down the relevant issues and get them fixed upstream.

On the other hand you&apos;re right, this layout test can be left as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141090</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 08:40:57 -0700</bug_when>
    <thetext>I am super-entertained that you found that 6-year-expired address of mine. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141153</commentid>
    <comment_count>23</comment_count>
      <attachid>35058</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 11:57:32 -0700</bug_when>
    <thetext>Created attachment 35058
Move the libxslt specific part of XSLTProcessor to a separate file.

Removed some redundant #includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141155</commentid>
    <comment_count>24</comment_count>
      <attachid>35060</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 12:01:59 -0700</bug_when>
    <thetext>Created attachment 35060
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

Fixed one typo in GNUMakefile.am.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141166</commentid>
    <comment_count>25</comment_count>
      <attachid>35061</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-18 12:21:27 -0700</bug_when>
    <thetext>Created attachment 35061
[Qt] Implement XSLT support with QtXmlPatterns.

I got rid of most of the #ifdefs:
- Qt doesn&apos;t use the XMLTokenizerScope class so I excluded it from the Qt build.
- I made a TransformSource typedef in Document, which for Qt is String and for others xmlDocPtr. This simplified the code a bit but we still need to free m_transformSource for libxslt.

Not sure what else I could do. I was thinking of moving the definition of XSLTProcessor::MessageHandler to the XSLTProcessorQt.cpp file but was not sure if that is okay with the coding guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141438</commentid>
    <comment_count>26</comment_count>
      <attachid>35107</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-19 01:00:59 -0700</bug_when>
    <thetext>Created attachment 35107
Move the libxslt specific part of XSLTProcessor to a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141440</commentid>
    <comment_count>27</comment_count>
      <attachid>35108</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-19 01:03:19 -0700</bug_when>
    <thetext>Created attachment 35108
[Qt] Implement XSLT support with QtXmlPatterns.

Removed an accidental hunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141491</commentid>
    <comment_count>28</comment_count>
      <attachid>35107</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 09:25:09 -0700</bug_when>
    <thetext>Comment on attachment 35107
Move the libxslt specific part of XSLTProcessor to a separate file.

Looks OK.

You don&apos;t generally want to fill in the requestee field.  That just tends to make reviews go slower. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141492</commentid>
    <comment_count>29</comment_count>
      <attachid>35108</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 09:26:53 -0700</bug_when>
    <thetext>Comment on attachment 35108
[Qt] Implement XSLT support with QtXmlPatterns.

You missed the point.  I meant making TransformSource a real class with two separate implementations.  Not just a typedef.  That way all the logic can be kept in the qt vs. libxml files instead of in Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141493</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 09:27:28 -0700</bug_when>
    <thetext>(My last comment was not intended to sound as rude as it may have.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141496</commentid>
    <comment_count>31</comment_count>
      <attachid>35060</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 09:31:03 -0700</bug_when>
    <thetext>Comment on attachment 35060
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

It seems that we will need an XSLStyleSheet.h file anyway.  There is code to be shared here.

-bool XSLStyleSheet::isLoading()
certainly should be shared.

As should:
-void XSLStyleSheet::checkLoaded()

Possibly:
-void XSLStyleSheet::clearDocuments()

So before you add hte qt version, I think we need to add back an XSLStyleSheet.h and .cpp file and move a bunch of this code into a shared baseclass.

The ChangeLog diff is bad, so this will have to be applied manually.  I don&apos;t trust svn-apply to get this right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141499</commentid>
    <comment_count>32</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-19 09:50:26 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 35060 [details])
&gt; It seems that we will need an XSLStyleSheet.h file anyway.  There is code to be
&gt; shared here.
&gt; 
&gt; -bool XSLStyleSheet::isLoading()
&gt; certainly should be shared.
&gt; 
&gt; As should:
&gt; -void XSLStyleSheet::checkLoaded()
&gt; 
&gt; Possibly:
&gt; -void XSLStyleSheet::clearDocuments()

Unfortunately none of these can be shared. Qtish XSLTProcessor doesn&apos;t make use of the XSLImportRule class as it does not support xsl:import and xsl:include. At some point it will but even then the whole logic would most likely take place in QXmlQuery (with necessary caching and security bits in WebKit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141508</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 10:12:46 -0700</bug_when>
    <thetext>Why would Qt want to invent their own XSLT processor?  And why would a qt-based webkit want to use a less-functioning XSLT processor?  I take it qt webkit doesn&apos;t currently build with any xslt support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141517</commentid>
    <comment_count>34</comment_count>
      <attachid>35107</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 10:30:36 -0700</bug_when>
    <thetext>Comment on attachment 35107
Move the libxslt specific part of XSLTProcessor to a separate file.

Rejecting patch 35107 from commit-queue.  This patch will require manual commit.

WebKitTools/Scripts/build-webkit failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141519</commentid>
    <comment_count>35</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-08-19 10:34:40 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; Why would Qt want to invent their own XSLT processor?  And why would a qt-based
&gt; webkit want to use a less-functioning XSLT processor?  I take it qt webkit
&gt; doesn&apos;t currently build with any xslt support?

Yes, QtWebKit currently does not build with the libxslt based implementation.

I agree that our XSLT processor is currently less-functioning but the main reason behind using it in QtWebKit is to change that. :) When it&apos;s utilised in QtWebKit, we will be getting more user input and thus can get things fixed upstream sooner.

Another point is that libxslt is just another dependency for Qt (if it was to ship QtWebKit with libxslt enabled by default). :) That is also why Qt has its own XMLTokenizer implementation using QXmlStreamReader rather than libxml2, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145467</commentid>
    <comment_count>36</comment_count>
      <attachid>39198</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-08 11:41:42 -0700</bug_when>
    <thetext>Created attachment 39198
Move the libxslt specific part of XSLTProcessor to a separate file.

This one should hopefully build fine on mac. I checked the libxslt-based build with the gtk port and updated the xcode project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145505</commentid>
    <comment_count>37</comment_count>
      <attachid>39207</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-08 12:54:59 -0700</bug_when>
    <thetext>Created attachment 39207
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

Updated the xcode project file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146358</commentid>
    <comment_count>38</comment_count>
      <attachid>39384</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-10 14:58:08 -0700</bug_when>
    <thetext>Created attachment 39384
[Qt] Implement XSLT support with QtXmlPatterns.

- Add the TransformSource class.
- Fix build with Qt &lt; 4.5 (disable xslt by default for older versions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146433</commentid>
    <comment_count>39</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-09-10 18:51:05 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=39384) [details]
&gt; [Qt] Implement XSLT support with QtXmlPatterns.
&gt; 
&gt; - Add the TransformSource class.
&gt; - Fix build with Qt &lt; 4.5 (disable xslt by default for older versions).

Hi Jakub, as far as I know QtXmlPatterns module is only build when Qt is built with exception support. How does this patch affect QtWebKit inside Qt, when Qt is compiled without exception support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146542</commentid>
    <comment_count>40</comment_count>
      <attachid>39427</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-11 06:59:56 -0700</bug_when>
    <thetext>Created attachment 39427
[Qt] Implement XSLT support with QtXmlPatterns.

(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; Created an attachment (id=39384) [details] [details]
&gt; &gt; [Qt] Implement XSLT support with QtXmlPatterns.
&gt; &gt; 
&gt; &gt; - Add the TransformSource class.
&gt; &gt; - Fix build with Qt &lt; 4.5 (disable xslt by default for older versions).
&gt; 
&gt; Hi Jakub, as far as I know QtXmlPatterns module is only build when Qt is built
&gt; with exception support. How does this patch affect QtWebKit inside Qt, when Qt
&gt; is compiled without exception support?

Indeed, the patch assumed that Qt has been built with the QtXmlPatterns module.
This one fixes that by enabling XSLT support only with Qt &gt;= 4.5 _and_ when QtXmlPatterns is available.

Apart from that, fixed libxslt-based build breakage and some compiler warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148296</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-18 12:13:00 -0700</bug_when>
    <thetext>Can we do this in small pieces on individual bugs?  Trying to do 6 patches at once just tends to overwhelm the process...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148873</commentid>
    <comment_count>42</comment_count>
      <attachid>39887</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-21 15:41:03 -0700</bug_when>
    <thetext>Created attachment 39887
Move the libxslt specific part of XSLTProcessor to a separate file.

According to the suggestions on IRC, I prepared an svn version of the patch so that it will properly preserve the file history when landing in the repository.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148874</commentid>
    <comment_count>43</comment_count>
      <attachid>39888</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-21 15:43:20 -0700</bug_when>
    <thetext>Created attachment 39888
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

A patch generated on an svn checkout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150274</commentid>
    <comment_count>44</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-26 05:06:34 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Can we do this in small pieces on individual bugs?  Trying to do 6 patches at
&gt; once just tends to overwhelm the process...

Ok, fine. I&apos;ll submit the unrelated patches (the Skipped list update and the test results) in seperate bugs once the main patches land, especially that the Skipped patch does no longer apply against ToT and one of the results has outdated metrics.

The rest should be easy to go through in this bug, as two of them have already been r+&apos;ed, they just didn&apos;t compile on mac. I fixed them afterwards and Tor Arne checked that they are okay now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150406</commentid>
    <comment_count>45</comment_count>
      <attachid>39888</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-27 12:41:22 -0700</bug_when>
    <thetext>Comment on attachment 39888
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

r=me, but when landing I think the XSLStyleSheet.h change should not be landed. Even though the current coding guidlines on the web say it should be indented, the recent discussion on webkit-dev indicates a change of this policy in the near future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150410</commentid>
    <comment_count>46</comment_count>
      <attachid>39887</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-27 12:50:18 -0700</bug_when>
    <thetext>Comment on attachment 39887
Move the libxslt specific part of XSLTProcessor to a separate file.

r=me, but see also my comment earlier regarding indentation (affects XSLTProcessor.h hunk).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150416</commentid>
    <comment_count>47</comment_count>
      <attachid>39427</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-27 13:26:52 -0700</bug_when>
    <thetext>Comment on attachment 39427
[Qt] Implement XSLT support with QtXmlPatterns.


From what I can see this is very good, except for a tiny TransformSource buglet:

&gt; -void Document::setTransformSource(void* doc)
&gt; +void Document::setTransformSource(TransformSource* source)
&gt;  {
&gt; -    if (doc == m_transformSource)
&gt; -        return;
&gt; -
&gt; -    xmlFreeDoc((xmlDocPtr)m_transformSource);
&gt; -    m_transformSource = doc;
&gt; +    m_transformSource = source;
&gt;  }

Technically this function was protected against self-assignment and isn&apos;t anymore. One could
argue it&apos;s a bug in OwnPtr perhaps?

&gt; +    void setTransformSource(TransformSource*);
&gt; +    TransformSource* transformSource() const { return m_transformSource.get(); }
&gt;  #endif

I believe the setter should take a PassOwnPtr&lt;TransformSource&gt;, to make it safe and clear that ownership is passed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150510</commentid>
    <comment_count>48</comment_count>
      <attachid>39887</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-28 07:50:39 -0700</bug_when>
    <thetext>Comment on attachment 39887
Move the libxslt specific part of XSLTProcessor to a separate file.

Clearing review after landing http://trac.webkit.org/changeset/48812 and http://trac.webkit.org/changeset/48814 (oops :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150512</commentid>
    <comment_count>49</comment_count>
      <attachid>39888</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-28 08:12:22 -0700</bug_when>
    <thetext>Comment on attachment 39888
Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.

Clearing review after landing http://trac.webkit.org/changeset/48815</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150557</commentid>
    <comment_count>50</comment_count>
      <attachid>40244</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-09-28 10:49:28 -0700</bug_when>
    <thetext>Created attachment 40244
[Qt] Implement XSLT support with QtXmlPatterns.

(In reply to comment #47)
&gt; (From update of attachment 39427 [details])
&gt; 
&gt; From what I can see this is very good, except for a tiny TransformSource
&gt; buglet:
&gt; 
&gt; &gt; -void Document::setTransformSource(void* doc)
&gt; &gt; +void Document::setTransformSource(TransformSource* source)
&gt; &gt;  {
&gt; &gt; -    if (doc == m_transformSource)
&gt; &gt; -        return;
&gt; &gt; -
&gt; &gt; -    xmlFreeDoc((xmlDocPtr)m_transformSource);
&gt; &gt; -    m_transformSource = doc;
&gt; &gt; +    m_transformSource = source;
&gt; &gt;  }
&gt; 
&gt; Technically this function was protected against self-assignment and isn&apos;t
&gt; anymore. One could
&gt; argue it&apos;s a bug in OwnPtr perhaps?
&gt; 
&gt; &gt; +    void setTransformSource(TransformSource*);
&gt; &gt; +    TransformSource* transformSource() const { return m_transformSource.get(); }
&gt; &gt;  #endif
&gt; 
&gt; I believe the setter should take a PassOwnPtr&lt;TransformSource&gt;, to make it safe
&gt; and clear that ownership is passed here.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150618</commentid>
    <comment_count>51</comment_count>
      <attachid>40244</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-28 13:10:51 -0700</bug_when>
    <thetext>Comment on attachment 40244
[Qt] Implement XSLT support with QtXmlPatterns.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150620</commentid>
    <comment_count>52</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-09-28 13:21:38 -0700</bug_when>
    <thetext>Committed r48826: &lt;http://trac.webkit.org/changeset/48826&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151512</commentid>
    <comment_count>53</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-10-01 05:09:37 -0700</bug_when>
    <thetext>*** Bug 29882 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34848</attachid>
            <date>2009-08-14 09:48:26 -0700</date>
            <delta_ts>2009-08-14 09:55:36 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>34095</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSA4NzkwN2Y5NWU5Yjk4YzE2YjFmZTllMDdiM2IxYTUzYjA3YWFiZjJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTQ6NTM6MzggKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKCklu
IHByZXBhcmF0aW9uIGZvciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0
byB0aGUgUXQKcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29y
IGltcGxlbWVudGF0aW9uIGludG8KYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0aGF0
IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KCkFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5n
IHN0eWxlIGlzc3Vlcy4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
IHwgICAzNyArKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIHwgICAgNCArCiBXZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbCAgICAgICAgICAgIHwgICAgMSArCiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yLmNwcCAgICAgICAgIHwgIDI5MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmggICAgICAgICAgIHwgICA2MCArKystLS0KIFdlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCAgfCAgMzQyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MjMgaW5zZXJ0aW9ucygrKSwgMzEzIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JM
aWJ4c2x0LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggNzU3MzdiNi4uMTJhMjQyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0wOC0xNCAg
SmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBh
cnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRlIGZpbGUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisgICAgICAgIEluIHByZXBh
cmF0aW9uIGZvciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0byB0aGUg
UXQKKyAgICAgICAgcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vz
c29yIGltcGxlbWVudGF0aW9uIGludG8KKyAgICAgICAgYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0
aGUgcGFydCB0aGF0IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KKworICAgICAgICBBZGRpdGlv
bmFsbHksIGZpeCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAg
ICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDogRml4IHN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6
WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRyYWlsaW5n
IHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tU291cmNl
KTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLi4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQ
cm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQpOiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFj
ZXMuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpyZXNldCk6IE1vdmUgb3V0IG9m
IHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6IEZp
eCBpbmRlbnRhdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMp
OiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5j
KTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzZXRYU0xUTG9hZENhbGxCYWNrKTogTW92ZWQuCisgICAgICAgIChXZWJD
b3JlOjp3cml0ZVRvVmVjdG9yKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXZlUmVzdWx0
VG9TdHJpbmcpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBh
cmFtZXRlck1hcCk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVhzbHRQYXJhbUFycmF5
KTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIpOiBNb3Zl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCisgICAgICAg
IChXZWJDb3JlOjpyZXN1bHRNSU1FVHlwZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6WFNM
VFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3ZlZC4KKwogMjAwOS0wOC0xNCAgWWFl
bCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkYTllYjRhLi4xOTc5ZGZhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIz
MzIsNiArMjMzMiw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWFNMVEV4
dGVuc2lvbnMuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5zaW9ucy5oIFwKIAlXZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmNwcCBcCisJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggXAogCVdlYkNvcmUveG1sL1hT
TFRVbmljb2RlU29ydC5jcHAgXAogCVdlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGFkNjYxZjcuLjQ4YzA5NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDEyLDYgKzM0MTIsNyBAQAogICAgICAgICAgICAg
J3htbC9YU0xURXh0ZW5zaW9ucy5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xURXh0ZW5zaW9u
cy5oJywKICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAg
J3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xUUHJv
Y2Vzc29yLmgnLAogICAgICAgICAgICAgJ3htbC9YU0xUVW5pY29kZVNvcnQuY3BwJywKICAgICAg
ICAgICAgICd4bWwvWFNMVFVuaWNvZGVTb3J0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKaW5kZXggNzRlMTZjMi4uNWIyYzdkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCkBAIC0yMzU2MCw2ICsyMzU2MCwxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3NvckxpYnhz
bHQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCmluZGV4IDc3YTAzZmYuLmRiMTc3ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xMDY5LDYgKzEw
NjksNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1
aWxkIFdlYkNvcmUuCiAgICAgICAgIHhtbC9YU0xURXh0ZW5zaW9ucy5jcHAKICAgICAgICAgeG1s
L1hTTFRVbmljb2RlU29ydC5jcHAKICAgICAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCisgICAg
ICAgIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKICAgICA8L3NldD4KIAogPC9tYWtlZmls
ZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAKaW5kZXggYTI2ZmU3Ny4uZjMxZGM0YyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAKQEAgLTQ5LDE1NSArNDksMTIgQEAKICNpbmNsdWRlICJYU0xUVW5pY29kZVNvcnQu
aCIKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxs
aWJ4c2x0L2ltcG9ydHMuaD4KLSNpbmNsdWRlIDxsaWJ4c2x0L3ZhcmlhYmxlcy5oPgotI2luY2x1
ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLQotU09GVF9MSU5LX0xJQlJB
UlkobGlieHNsdCk7Ci1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2b2lk
LCAoeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpLCAoc2hlZXQpKQotU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCwgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRy
IGN0eHQpLCAoY3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRl
eHQsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHht
bERvY1B0ciBkb2MpLCAoc3R5bGUsIGRvYykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5
U3R5bGVzaGVldFVzZXIsIHhtbERvY1B0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxE
b2NQdHIgZG9jLCBjb25zdCBjaGFyKiogcGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUq
IHByb2ZpbGUsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2Ms
IHBhcmFtcywgb3V0cHV0LCBwcm9maWxlLCB1c2VyQ3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwg
eHNsdFF1b3RlVXNlclBhcmFtcywgaW50LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwg
Y29uc3QgY2hhcioqIHBhcmFtcyksIChjdHh0LCBwYXJhbXMpKQotU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRTZXRDdHh0U29ydEZ1bmMsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0
LCB4c2x0U29ydEZ1bmMgaGFuZGxlciksIChjdHh0LCBoYW5kbGVyKSkKLVNPRlRfTElOSyhsaWJ4
c2x0LCB4c2x0U2V0TG9hZGVyRnVuYywgdm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikp
Ci1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVm
ZmVyUHRyIGJ1ZiwgeG1sRG9jUHRyIHJlc3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAo
YnVmLCByZXN1bHQsIHN0eWxlKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwg
eHNsdFN0eWxlc2hlZXRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkpCi0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVy
aWNFcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCi17Ci0gICAgLy8gSXQgd291bGQg
YmUgbmljZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCi19Ci0gICAg
Ci12b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxF
cnJvciogZXJyb3IpCi17Ci0gICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNv
bGUqPih1c2VyRGF0YSk7Ci0gICAgaWYgKCFjb25zb2xlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Ci0gICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKLSAgICAg
ICAgY2FzZSBYTUxfRVJSX05PTkU6Ci0gICAgICAgICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VMZXZl
bDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfV0FSTklORzoKLSAg
ICAgICAgICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFhNTF9FUlJfRVJST1I6Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9GQVRB
TDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2
ZWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb25zb2xlLT5hZGRNZXNzYWdl
KFhNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZXJyb3ItPm1lc3NhZ2Us
IGVycm9yLT5saW5lLCBlcnJvci0+ZmlsZSk7Ci19Ci0KLS8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0
byBiZSBubyB3YXkgdG8gY29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUs
IHRodXMgd2UgaGF2ZSBnbG9iYWxzLgotc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nl
c3NvciA9IDA7Ci1zdGF0aWMgRG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOwotc3RhdGlj
IHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbENoYXIqIHVyaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhtbERpY3RQdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqIGN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4c2x0TG9hZFR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgWFNM
VF9MT0FEX0RPQ1VNRU5UOiB7Ci0gICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBj
b250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7Ci0gICAgICAgICAgICB4bWxD
aGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4
dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybChLVVJMKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7Ci0g
ICAgICAgICAgICB4bWxGcmVlKGJhc2UpOwotICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJv
cjsKLSAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0g
Z2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0QWxs
b3dlZCkgewotICAgICAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVy
KCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgICAgIHJlcXVlc3RBbGxvd2Vk
ID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
ZXNwb25zZS51cmwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3RB
bGxvd2VkKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS5jbGVhcigpOwotICAgICAgICAgICAgICAg
IGdsb2JhbERvY0xvYWRlci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIENvbnNvbGUqIGNvbnNvbGUgPSAwOwotICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25l
ckRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY29uc29sZSA9IGZyYW1lLT5k
b21XaW5kb3coKS0+Y29uc29sZSgpOwotICAgICAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9y
RnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyk7Ci0gICAgICAgICAg
ICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNF
cnJvckZ1bmMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBzcGVjaWZ5
IGFuIGVuY29kaW5nIGhlcmUuIE5laXRoZXIgR2Vja28gbm9yIFdpbklFIHJlc3BlY3RzCi0gICAg
ICAgICAgICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCi0g
ICAgICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCksIChjb25zdCBjaGFyKil1cmksIDAsIG9wdGlvbnMpOwotCi0gICAgICAgICAgICB4
bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKDAsIDApOwotICAgICAgICAgICAgeG1sU2V0R2VuZXJp
Y0Vycm9yRnVuYygwLCAwKTsKLQotICAgICAgICAgICAgcmV0dXJuIGRvYzsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNIRUVUOgotICAgICAgICAgICAgcmV0dXJuIGds
b2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5sb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3Vy
Y2UoKCh4c2x0U3R5bGVzaGVldFB0ciljdHh0KS0+ZG9jLCB1cmkpOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4c2x0RG9jTG9hZGVyRnVuYyBm
dW5jLCBYU0xUUHJvY2Vzc29yKiBwcm9jZXNzb3IsIERvY0xvYWRlciogbG9hZGVyKQotewotICAg
IHhzbHRTZXRMb2FkZXJGdW5jKGZ1bmMpOwotICAgIGdsb2JhbFByb2Nlc3NvciA9IHByb2Nlc3Nv
cjsKLSAgICBnbG9iYWxEb2NMb2FkZXIgPSBsb2FkZXI7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVU
b1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCi17Ci0g
ICAgVmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hh
cj4qPihjb250ZXh0KTsKLSAgICBTdHJpbmcgZGVjb2RlZENodW5rID0gU3RyaW5nOjpmcm9tVVRG
OChidWZmZXIsIGxlbik7Ci0gICAgcmVzdWx0T3V0cHV0LmFwcGVuZChkZWNvZGVkQ2h1bmsuY2hh
cmFjdGVycygpLCBkZWNvZGVkQ2h1bmsubGVuZ3RoKCkpOwotICAgIHJldHVybiBsZW47Ci19Ci0K
LXN0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0
U3R5bGVzaGVldFB0ciBzaGVldCwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgeG1sT3V0
cHV0QnVmZmVyUHRyIG91dHB1dEJ1ZiA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKDApOwotICAgIGlm
ICghb3V0cHV0QnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8VUNoYXI+
IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwot
ICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7Ci0gICAgCi0gICAg
aW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0
KTsKLSAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwotICAgIGlmIChyZXR2YWwg
PCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0
cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBh
cHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRW
ZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFd
ID09ICdcbicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7Ci0KLSAgICByZXN1
bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZm9ybVRleHRTdHJpbmdUb1hIVE1MRG9j
dW1lbnRTdHJpbmcoU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIE1vZGlmeSB0aGUgb3V0cHV0IHNv
IHRoYXQgaXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRNTCBkb2N1bWVudCB3aXRoIGEgPHByZT4gdGFn
IGVuY2xvc2luZyB0aGUgdGV4dC4KQEAgLTIxMywzOCArNzAsNiBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQp
CiAgICAgICAgICI8L2h0bWw+XG4iOwogfQogCi1zdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJh
bUFycmF5RnJvbVBhcmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmIHBhcmFt
ZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGNvbnN0IGNoYXIqKiBwYXJhbWV0ZXJBcnJheSA9IChjb25zdCBjaGFyKiopZmFz
dE1hbGxvYygoKHBhcmFtZXRlcnMuc2l6ZSgpICogMikgKyAxKSAqIHNpemVvZihjaGFyKikpOwot
Ci0gICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0
ZXJzLmVuZCgpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBmb3IgKFhTTFRQcm9jZXNz
b3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChp
dC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4Kytd
ID0gc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotICAgIHBhcmFtZXRl
ckFycmF5W2luZGV4XSA9IDA7Ci0KLSAgICByZXR1cm4gcGFyYW1ldGVyQXJyYXk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZyZWVYc2x0UGFyYW1BcnJheShjb25zdCBjaGFyKiogcGFyYW1zKQotewotICAg
IGNvbnN0IGNoYXIqKiB0ZW1wID0gcGFyYW1zOwotICAgIGlmICghcGFyYW1zKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgd2hpbGUgKCp0ZW1wKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKSoo
dGVtcCsrKSk7IC8vIHN0cmR1cCByZXR1cm5zIG1hbGxvYydkIGJsb2Nrcywgc28gd2UgaGF2ZSB0
byB1c2UgZnJlZSgpIGhlcmUKLSAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsKLSAgICB9
Ci0gICAgZmFzdEZyZWUocGFyYW1zKTsKLX0KLQotCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xU
UHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VT
dHJpbmcsCiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBz
b3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMzAy
LDExNCArMTI3LDYgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3Jl
YXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc28KICAgICByZXR1cm4gZnJhZ21l
bnQ7CiB9CiAKLXN0YXRpYyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIo
UmVmUHRyPFhTTFN0eWxlU2hlZXQ+JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0
Um9vdE5vZGUpCi17Ci0gICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290
Tm9kZSkgewotICAgICAgICBjYWNoZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRl
KHN0eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVu
dCgpIDogc3R5bGVzaGVldFJvb3ROb2RlLAotICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2Rl
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQt
PnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1
bWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gY2FjaGVkU3R5bGVz
aGVldC0+Y29tcGlsZVN0eWxlU2hlZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSB4bWxEb2NQdHIg
eG1sRG9jUHRyRnJvbU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRlKQot
ewotICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3Vt
ZW50KCk7Ci0gICAgYm9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJE
b2N1bWVudC5nZXQoKSk7Ci0gICAgCi0gICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7Ci0gICAg
aWYgKHNvdXJjZUlzRG9jdW1lbnQpCi0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpb3du
ZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCk7Ci0gICAgaWYgKCFzb3VyY2VEb2MpIHsKLSAg
ICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1
bWVudC0+ZG9jTG9hZGVyKCksIGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKLSAgICAgICAgICAg
IHNvdXJjZUlzRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmlu
ZygpKTsKLSAgICAgICAgc2hvdWxkRGVsZXRlID0gKHNvdXJjZURvYyAhPSAwKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNvdXJjZURvYzsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlN
RVR5cGUoeG1sRG9jUHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpCi17Ci0g
ICAgLy8gVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG91dHB1dCB3ZSBuZWVkIHRvIGJlIGFibGUg
dG8gZGVhbCB3aXRoOgotICAgIC8vIEhUTUwgKGNyZWF0ZSBhbiBIVE1MIGRvY3VtZW50KSwgWE1M
IChjcmVhdGUgYW4gWE1MIGRvY3VtZW50KSwKLSAgICAvLyBhbmQgdGV4dCAod3JhcCBpbiBhIDxw
cmU+IGFuZCBjcmVhdGUgYW4gWE1MIGRvY3VtZW50KS4KLQotICAgIGNvbnN0IHhtbENoYXIqIHJl
c3VsdFR5cGUgPSAwOwotICAgIFhTTFRfR0VUX0lNUE9SVF9QVFIocmVzdWx0VHlwZSwgc2hlZXQs
IG1ldGhvZCk7Ci0gICAgaWYgKHJlc3VsdFR5cGUgPT0gMCAmJiByZXN1bHREb2MtPnR5cGUgPT0g
WE1MX0hUTUxfRE9DVU1FTlRfTk9ERSkKLSAgICAgICAgcmVzdWx0VHlwZSA9IChjb25zdCB4bWxD
aGFyKikiaHRtbCI7Ci0gICAgCi0gICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25z
dCB4bWxDaGFyKikiaHRtbCIpKQotICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7Ci0gICAgZWxz
ZSBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJ0ZXh0IikpCi0g
ICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7Ci0gICAgICAgIAotICAgIHJldHVybiAiYXBwbGlj
YXRpb24veG1sIjsKLX0KLQotYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhO
b2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywg
U3RyaW5nJiByZXN1bHRFbmNvZGluZykKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9j
dW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOwotICAgIAotICAgIHNldFhTTFRMb2FkQ2Fs
bEJhY2soZG9jTG9hZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOwot
ICAgIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5
bGVzaGVldCwgbV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOwotICAgIGlmICghc2hlZXQpIHsK
LSAgICAgICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBtX3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7Ci0KLSAgICB4
bWxDaGFyKiBvcmlnTWV0aG9kID0gc2hlZXQtPm1ldGhvZDsKLSAgICBpZiAoIW9yaWdNZXRob2Qg
JiYgbWltZVR5cGUgPT0gInRleHQvaHRtbCIpCi0gICAgICAgIHNoZWV0LT5tZXRob2QgPSAoeG1s
Q2hhciopImh0bWwiOwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91
bGRGcmVlU291cmNlRG9jID0gZmFsc2U7Ci0gICAgaWYgKHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4
bWxEb2NQdHJGcm9tTm9kZShzb3VyY2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9jKSkgewotICAg
ICAgICAvLyBUaGUgWE1MIGRlY2xhcmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2luZyB0aGUgcmVz
dWx0IGFzIGEgZnJhZ21lbnQsIGFuZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3IgZG9jdW1lbnRz
LCAKLSAgICAgICAgLy8gYXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBp
bW1lZGlhdGVseSBwYXJzZWQuCi0gICAgICAgIHNoZWV0LT5vbWl0WG1sRGVjbGFyYXRpb24gPSB0
cnVlOwotCi0gICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5zZm9ybUNvbnRleHQg
PSB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dChzaGVldCwgc291cmNlRG9jKTsKLSAgICAgICAgcmVn
aXN0ZXJYU0xURXh0ZW5zaW9ucyh0cmFuc2Zvcm1Db250ZXh0KTsKLQotICAgICAgICAvLyA8aHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3Nv
ciA8eHNsOnNvcnQ+IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKLSAgICAg
ICAgeHNsdFNldEN0eHRTb3J0RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRG
dW5jdGlvbik7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGlu
IGxpYnhzbHQuIAotICAgICAgICAvLyBUaGUgYnVnIGhhcyBiZWVuIGZpeGVkIGluIHZlcnNpb24g
MS4xLjEzLCBzbyBvbmNlIHdlIHNoaXAgdGhhdCB0aGlzIGNhbiBiZSByZW1vdmVkLgotICAgICAg
ICBpZiAodHJhbnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9PSBOVUxMKQotICAgICAgICAgICB0
cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJzID0geG1sSGFzaENyZWF0ZSgyMCk7Ci0KLSAgICAg
ICAgY29uc3QgY2hhcioqIHBhcmFtcyA9IHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcCht
X3BhcmFtZXRlcnMpOwotICAgICAgICB4c2x0UXVvdGVVc2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRl
eHQsIHBhcmFtcyk7Ci0gICAgICAgIHhtbERvY1B0ciByZXN1bHREb2MgPSB4c2x0QXBwbHlTdHls
ZXNoZWV0VXNlcihzaGVldCwgc291cmNlRG9jLCAwLCAwLCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsK
LSAgICAgICAgCi0gICAgICAgIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1Db250
ZXh0KTsgICAgICAgIAotICAgICAgICBmcmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChzaG91bGRGcmVlU291cmNlRG9jKQotICAgICAgICAgICAgeG1sRnJl
ZURvYyhzb3VyY2VEb2MpOwotICAgICAgICAKLSAgICAgICAgaWYgKHN1Y2Nlc3MgPSBzYXZlUmVz
dWx0VG9TdHJpbmcocmVzdWx0RG9jLCBzaGVldCwgcmVzdWx0U3RyaW5nKSkgewotICAgICAgICAg
ICAgbWltZVR5cGUgPSByZXN1bHRNSU1FVHlwZShyZXN1bHREb2MsIHNoZWV0KTsKLSAgICAgICAg
ICAgIHJlc3VsdEVuY29kaW5nID0gKGNoYXIqKXJlc3VsdERvYy0+ZW5jb2Rpbmc7Ci0gICAgICAg
IH0KLSAgICAgICAgeG1sRnJlZURvYyhyZXN1bHREb2MpOwotICAgIH0KLSAgICAKLSAgICBzaGVl
dC0+bWV0aG9kID0gb3JpZ01ldGhvZDsKLSAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDAp
OwotICAgIHhzbHRGcmVlU3R5bGVzaGVldChzaGVldCk7Ci0gICAgbV9zdHlsZXNoZWV0ID0gMDsK
LQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJv
Y2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZU5vZGUpCiB7CiAgICAgU3Ry
aW5nIHJlc3VsdE1JTUVUeXBlOwpAQCAtNDU1LDYgKzE3MiwxMyBAQCB2b2lkIFhTTFRQcm9jZXNz
b3I6OnJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0
IFN0cmluZwogICAgIG1fcGFyYW1ldGVycy5yZW1vdmUobG9jYWxOYW1lKTsKIH0KIAordm9pZCBY
U0xUUHJvY2Vzc29yOjpyZXNldCgpCit7CisgICAgbV9zdHlsZXNoZWV0LmNsZWFyKCk7CisgICAg
bV9zdHlsZXNoZWV0Um9vdE5vZGUuY2xlYXIoKTsKKyAgICBtX3BhcmFtZXRlcnMuY2xlYXIoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggYi9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmgKaW5kZXggOWVlMmFhZC4uNDVmNWNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaApAQCAt
MzQsNDYgKzM0LDQ2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7Ci1j
bGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CisgICAgY2xhc3MgRnJhbWU7
CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAotY2xh
c3MgWFNMVFByb2Nlc3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KKyAgICBjbGFzcyBYU0xUUHJvY2Vz
c29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNMVFByb2Nlc3Nvcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nlc3Nvcj4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3IpOyB9CiAKLSAgICB2b2lkIHNldFhTTFN0eWxlU2hl
ZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9
IHN0eWxlU2hlZXQ7IH0KLSAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwg
U3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVz
dWx0RW5jb2RpbmcpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJv
bVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUq
IGZyYW1lKTsKKyAgICAgICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5
bGVTaGVldD4gc3R5bGVTaGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CisgICAg
ICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1J
TUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25z
dCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3Ry
aW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKTsKICAg
ICAKLSAgICAvLyBET00gbWV0aG9kcwotICAgIHZvaWQgaW1wb3J0U3R5bGVzaGVldChQYXNzUmVm
UHRyPE5vZGU+IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJvb3ROb2RlID0gc3R5bGU7IH0KLSAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291
cmNlLCBEb2N1bWVudCogb3VwdXREb2MpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5z
Zm9ybVRvRG9jdW1lbnQoTm9kZSogc291cmNlKTsKKyAgICAgICAgLy8gRE9NIG1ldGhvZHMKKyAg
ICAgICAgdm9pZCBpbXBvcnRTdHlsZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9z
dHlsZXNoZWV0Um9vdE5vZGUgPSBzdHlsZTsgfQorICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3Vw
dXREb2MpOworICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50
KE5vZGUqIHNvdXJjZSk7CiAgICAgCi0gICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBTdHJpbmcgZ2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJ
LCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsK
LSAgICB2b2lkIGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KKyAg
ICAgICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAgU3RyaW5n
IGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOworICAgICAgICB2b2lk
IGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KIAotICAgIHZvaWQg
cmVzZXQoKSB7IG1fc3R5bGVzaGVldC5jbGVhcigpOyBtX3N0eWxlc2hlZXRSb290Tm9kZS5jbGVh
cigpOyAgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KKyAgICAgICAgdm9pZCByZXNldCgpOwogCi0g
ICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKik7
Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgY29uc3Qg
Y2hhciogbXNnLCAuLi4pOworICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZUVycm9yRnVuYyh2b2lk
KiB1c2VyRGF0YSwgeG1sRXJyb3IqKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9y
RnVuYyh2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhciogbXNnLCAuLi4pOwogICAgIAotcHVibGlj
OgotICAgIC8vIE9ubHkgZm9yIGxpYlhTTFQgY2FsbGJhY2tzCi0gICAgWFNMU3R5bGVTaGVldCog
eHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQoKTsgfQorICAg
IHB1YmxpYzoKKyAgICAgICAgLy8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKKyAgICAgICAg
WFNMU3R5bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVl
dC5nZXQoKTsgfQogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0
ZXJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVy
TWFwOwogCi1wcml2YXRlOgotICAgIFhTTFRQcm9jZXNzb3IoKSB7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBYU0xUUHJvY2Vzc29yKCkgeyB9CiAKLSAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4g
bV9zdHlsZXNoZWV0OwotICAgIFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKLSAg
ICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOwotfTsKKyAgICAgICAgUmVmUHRyPFhTTFN0eWxl
U2hlZXQ+IG1fc3R5bGVzaGVldDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJv
b3ROb2RlOworICAgICAgICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOworICAgIH07CiAKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjdiYTljNmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHAKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShYU0xUKQorCisj
aW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFRva2VuaXplci5oIiAvLyBmb3IgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudAor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRS
ZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJY
U0xURXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgorI2luY2x1ZGUg
ImxvYWRlci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0
cy5oPgorI2luY2x1ZGUgPGxpYnhzbHQvdmFyaWFibGVzLmg+CisjaW5jbHVkZSA8bGlieHNsdC94
c2x0dXRpbHMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKE1BQykK
KyNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgorCitTT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KTsK
K1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVN0eWxlc2hlZXQsIHZvaWQsICh4c2x0U3R5bGVz
aGVldFB0ciBzaGVldCksIChzaGVldCkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVUcmFu
c2Zvcm1Db250ZXh0LCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCksIChjdHh0
KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dCwgeHNsdFRyYW5z
Zm9ybUNvbnRleHRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYyks
IChzdHlsZSwgZG9jKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0QXBwbHlTdHlsZXNoZWV0VXNl
ciwgeG1sRG9jUHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MsIGNv
bnN0IGNoYXIqKiBwYXJhbXMsIGNvbnN0IGNoYXIqIG91dHB1dCwgRklMRSogcHJvZmlsZSwgeHNs
dFRyYW5zZm9ybUNvbnRleHRQdHIgdXNlckN0eHQpLCAoc3R5bGUsIGRvYywgcGFyYW1zLCBvdXRw
dXQsIHByb2ZpbGUsIHVzZXJDdHh0KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UXVvdGVVc2Vy
UGFyYW1zLCBpbnQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCBjb25zdCBjaGFyKiog
cGFyYW1zKSwgKGN0eHQsIHBhcmFtcykpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldEN0eHRT
b3J0RnVuYywgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhzbHRTb3J0RnVu
YyBoYW5kbGVyKSwgKGN0eHQsIGhhbmRsZXIpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRM
b2FkZXJGdW5jLCB2b2lkLCAoeHNsdERvY0xvYWRlckZ1bmMgZiksIChmKSkKK1NPRlRfTElOSyhs
aWJ4c2x0LCB4c2x0U2F2ZVJlc3VsdFRvLCBpbnQsICh4bWxPdXRwdXRCdWZmZXJQdHIgYnVmLCB4
bWxEb2NQdHIgcmVzdWx0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChidWYsIHJlc3VsdCwg
c3R5bGUpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0U3R5bGVzaGVl
dFB0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKHN0eWxlKSkKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyh2
b2lkKiwgY29uc3QgY2hhciosIC4uLikKK3sKKyAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGRv
IHNvbWV0aGluZyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KK30KKwordm9pZCBYU0xUUHJvY2Vz
c29yOjpwYXJzZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgeG1sRXJyb3IqIGVycm9yKQorewor
ICAgIENvbnNvbGUqIGNvbnNvbGUgPSBzdGF0aWNfY2FzdDxDb25zb2xlKj4odXNlckRhdGEpOwor
ICAgIGlmICghY29uc29sZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVzc2FnZUxldmVsIGxl
dmVsOworICAgIHN3aXRjaCAoZXJyb3ItPmxldmVsKSB7CisgICAgY2FzZSBYTUxfRVJSX05PTkU6
CisgICAgICAgIGxldmVsID0gVGlwTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFhNTF9FUlJfV0FSTklORzoKKyAgICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVs
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9FUlJfRVJST1I6CisgICAgY2FzZSBYTUxf
RVJSX0ZBVEFMOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2
ZWw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1M
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJy
b3ItPmxpbmUsIGVycm9yLT5maWxlKTsKK30KKworLy8gRklYTUU6IFRoZXJlIHNlZW1zIHRvIGJl
IG5vIHdheSB0byBjb250cm9sIHRoZSBjdHh0IHBvaW50ZXIgZm9yIGxvYWRpbmcgaGVyZSwgdGh1
cyB3ZSBoYXZlIGdsb2JhbHMuCitzdGF0aWMgWFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29y
ID0gMDsKK3N0YXRpYyBEb2NMb2FkZXIqIGdsb2JhbERvY0xvYWRlciA9IDA7CitzdGF0aWMgeG1s
RG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sQ2hhciogdXJpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeG1sRGljdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCogY3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhz
bHRMb2FkVHlwZSB0eXBlKQoreworICAgIGlmICghZ2xvYmFsUHJvY2Vzc29yKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgWFNMVF9MT0FEX0RPQ1VN
RU5UOiB7CisgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRy
YW5zZm9ybUNvbnRleHRQdHIpY3R4dDsKKyAgICAgICAgeG1sQ2hhciogYmFzZSA9IHhtbE5vZGVH
ZXRCYXNlKGNvbnRleHQtPmRvY3VtZW50LT5kb2MsIGNvbnRleHQtPm5vZGUpOworICAgICAgICBL
VVJMIHVybChLVVJMKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7CisgICAgICAgIHhtbEZyZWUoYmFzZSk7Cisg
ICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICAgICAgYm9vbCByZXF1
ZXN0QWxsb3dlZCA9IGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxEb2NMb2FkZXIt
PmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgICAgIGlmIChy
ZXF1ZXN0QWxsb3dlZCkgeworICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5s
b2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dl
ZCA9IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVzcG9uc2UudXJsKCkpOworICAgICAgICB9CisgICAgICAgIGlmICghcmVxdWVzdEFsbG93ZWQp
IHsKKyAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAgIGdsb2JhbERvY0xvYWRl
ci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgIH0KKworICAgICAgICBD
b25zb2xlKiBjb25zb2xlID0gMDsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGdsb2JhbFBy
b2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkpCisgICAg
ICAgICAgICBjb25zb2xlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7CisgICAgICAg
IHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6cGFyc2VF
cnJvckZ1bmMpOworICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQ
cm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMpOworCisgICAgICAgIC8vIFdlIGRvbid0IHNwZWNp
ZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKKyAg
ICAgICAgLy8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgorICAg
ICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCksIChjb25zdCBjaGFyKil1cmksIDAsIG9wdGlvbnMpOworCisgICAgICAgIHhtbFNldFN0cnVj
dHVyZWRFcnJvckZ1bmMoMCwgMCk7CisgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwg
MCk7CisKKyAgICAgICAgcmV0dXJuIGRvYzsKKyAgICB9CisgICAgY2FzZSBYU0xUX0xPQURfU1RZ
TEVTSEVFVDoKKyAgICAgICAgcmV0dXJuIGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgp
LT5sb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoKCh4c2x0U3R5bGVzaGVldFB0ciljdHh0KS0+
ZG9jLCB1cmkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4c2x0
RG9jTG9hZGVyRnVuYyBmdW5jLCBYU0xUUHJvY2Vzc29yKiBwcm9jZXNzb3IsIERvY0xvYWRlciog
bG9hZGVyKQoreworICAgIHhzbHRTZXRMb2FkZXJGdW5jKGZ1bmMpOworICAgIGdsb2JhbFByb2Nl
c3NvciA9IHByb2Nlc3NvcjsKKyAgICBnbG9iYWxEb2NMb2FkZXIgPSBsb2FkZXI7Cit9CisKK3N0
YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIs
IGludCBsZW4pCit7CisgICAgVmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19j
YXN0PFZlY3RvcjxVQ2hhcj4qPihjb250ZXh0KTsKKyAgICBTdHJpbmcgZGVjb2RlZENodW5rID0g
U3RyaW5nOjpmcm9tVVRGOChidWZmZXIsIGxlbik7CisgICAgcmVzdWx0T3V0cHV0LmFwcGVuZChk
ZWNvZGVkQ2h1bmsuY2hhcmFjdGVycygpLCBkZWNvZGVkQ2h1bmsubGVuZ3RoKCkpOworICAgIHJl
dHVybiBsZW47Cit9CisKK3N0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIg
cmVzdWx0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCwgU3RyaW5nJiByZXN1bHRTdHJpbmcp
Cit7CisgICAgeG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dEJ1ZiA9IHhtbEFsbG9jT3V0cHV0QnVm
ZmVyKDApOworICAgIGlmICghb3V0cHV0QnVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKKyAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAm
cmVzdWx0VmVjdG9yOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0
b3I7CisKKyAgICBpbnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3Vs
dERvYywgc2hlZXQpOworICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7CisgICAg
aWYgKHJldHZhbCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdvcmthcm91
bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+
OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCisgICAg
aWYgKHJlc3VsdFZlY3Rvci5zaXplKCkgPiAwICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iu
c2l6ZSgpIC0gMV0gPT0gJ1xuJykKKyAgICAgICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsK
KworICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5RnJv
bVBhcmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmIHBhcmFtZXRlcnMpCit7
CisgICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGNvbnN0IGNoYXIqKiBwYXJhbWV0ZXJBcnJheSA9IChjb25zdCBjaGFyKiopZmFzdE1hbGxvYygo
KHBhcmFtZXRlcnMuc2l6ZSgpICogMikgKyAxKSAqIHNpemVvZihjaGFyKikpOworCisgICAgWFNM
VFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVuZCgp
OworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFt
ZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+Zmlyc3Qu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVw
KGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorICAgIHBhcmFtZXRlckFycmF5W2lu
ZGV4XSA9IDA7CisKKyAgICByZXR1cm4gcGFyYW1ldGVyQXJyYXk7Cit9CisKK3N0YXRpYyB2b2lk
IGZyZWVYc2x0UGFyYW1BcnJheShjb25zdCBjaGFyKiogcGFyYW1zKQoreworICAgIGNvbnN0IGNo
YXIqKiB0ZW1wID0gcGFyYW1zOworICAgIGlmICghcGFyYW1zKQorICAgICAgICByZXR1cm47CisK
KyAgICB3aGlsZSAoKnRlbXApIHsKKyAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsgLy8g
c3RyZHVwIHJldHVybnMgbWFsbG9jJ2QgYmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVzZSBmcmVlKCkg
aGVyZQorICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOworICAgIH0KKyAgICBmYXN0RnJl
ZShwYXJhbXMpOworfQorCitzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQ
b2ludGVyKFJlZlB0cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5
bGVzaGVldFJvb3ROb2RlKQoreworICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNo
ZWV0Um9vdE5vZGUpIHsKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6
OmNyZWF0ZShzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2Rl
LT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRSb290Tm9kZSwKKyAgICAgICAgICAgIHN0eWxlc2hlZXRS
b290Tm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBjYWNoZWRTdHls
ZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7Cisg
ICAgfQorCisgICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjYWNoZWRTdHlsZXNo
ZWV0LT5jb21waWxlU3R5bGVTaGVldCgpOworfQorCitzdGF0aWMgaW5saW5lIHhtbERvY1B0ciB4
bWxEb2NQdHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGREZWxldGUpCit7
CisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1l
bnQoKTsKKyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBvd25lckRv
Y3VtZW50LmdldCgpKTsKKworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOworICAgIGlmIChz
b3VyY2VJc0RvY3VtZW50KQorICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVyRG9j
dW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOworICAgIGlmICghc291cmNlRG9jKSB7CisgICAgICAg
IHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1lbnQt
PmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCisgICAgICAgICAgICBzb3Vy
Y2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmcoKSk7
CisgICAgICAgIHNob3VsZERlbGV0ZSA9IHNvdXJjZURvYzsKKyAgICB9CisgICAgcmV0dXJuIHNv
dXJjZURvYzsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRG9j
UHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpCit7CisgICAgLy8gVGhlcmUg
YXJlIHRocmVlIHR5cGVzIG9mIG91dHB1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRo
OgorICAgIC8vIEhUTUwgKGNyZWF0ZSBhbiBIVE1MIGRvY3VtZW50KSwgWE1MIChjcmVhdGUgYW4g
WE1MIGRvY3VtZW50KSwKKyAgICAvLyBhbmQgdGV4dCAod3JhcCBpbiBhIDxwcmU+IGFuZCBjcmVh
dGUgYW4gWE1MIGRvY3VtZW50KS4KKworICAgIGNvbnN0IHhtbENoYXIqIHJlc3VsdFR5cGUgPSAw
OworICAgIFhTTFRfR0VUX0lNUE9SVF9QVFIocmVzdWx0VHlwZSwgc2hlZXQsIG1ldGhvZCk7Cisg
ICAgaWYgKCFyZXN1bHRUeXBlICYmIHJlc3VsdERvYy0+dHlwZSA9PSBYTUxfSFRNTF9ET0NVTUVO
VF9OT0RFKQorICAgICAgICByZXN1bHRUeXBlID0gKGNvbnN0IHhtbENoYXIqKSJodG1sIjsKKwor
ICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1sQ2hhciopImh0bWwiKSkK
KyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRU
eXBlLCAoY29uc3QgeG1sQ2hhciopInRleHQiKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWlu
IjsKKworICAgIHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKK30KKworYm9vbCBYU0xUUHJvY2Vz
c29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBl
LCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZykKK3sKKyAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOwor
CisgICAgc2V0WFNMVExvYWRDYWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3Vt
ZW50LT5kb2NMb2FkZXIoKSk7CisgICAgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQgPSB4c2x0U3R5
bGVzaGVldFBvaW50ZXIobV9zdHlsZXNoZWV0LCBtX3N0eWxlc2hlZXRSb290Tm9kZS5nZXQoKSk7
CisgICAgaWYgKCFzaGVldCkgeworICAgICAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDAp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJE
b2N1bWVudHMoKTsKKworICAgIHhtbENoYXIqIG9yaWdNZXRob2QgPSBzaGVldC0+bWV0aG9kOwor
ICAgIGlmICghb3JpZ01ldGhvZCAmJiBtaW1lVHlwZSA9PSAidGV4dC9odG1sIikKKyAgICAgICAg
c2hlZXQtPm1ldGhvZCA9ICh4bWxDaGFyKikiaHRtbCI7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICBib29sIHNob3VsZEZyZWVTb3VyY2VEb2MgPSBmYWxzZTsKKyAgICBpZiAoeG1s
RG9jUHRyIHNvdXJjZURvYyA9IHhtbERvY1B0ckZyb21Ob2RlKHNvdXJjZU5vZGUsIHNob3VsZEZy
ZWVTb3VyY2VEb2MpKSB7CisgICAgICAgIC8vIFRoZSBYTUwgZGVjbGFyYXRpb24gd291bGQgcHJl
dmVudCBwYXJzaW5nIHRoZSByZXN1bHQgYXMgYSBmcmFnbWVudCwgYW5kIGl0J3Mgbm90IG5lZWRl
ZCBldmVuIGZvciBkb2N1bWVudHMsCisgICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBm
dW5jdGlvbiBpcyBhbHdheXMgaW1tZWRpYXRlbHkgcGFyc2VkLgorICAgICAgICBzaGVldC0+b21p
dFhtbERlY2xhcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0
ciB0cmFuc2Zvcm1Db250ZXh0ID0geHNsdE5ld1RyYW5zZm9ybUNvbnRleHQoc2hlZXQsIHNvdXJj
ZURvYyk7CisgICAgICAgIHJlZ2lzdGVyWFNMVEV4dGVuc2lvbnModHJhbnNmb3JtQ29udGV4dCk7
CisKKyAgICAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDc3PjogWFNMVCBwcm9jZXNzb3IgPHhzbDpzb3J0PiBhbGdvcml0aG0gb25seSBjb21wYXJlcyBi
eSBjb2RlIHBvaW50CisgICAgICAgIHhzbHRTZXRDdHh0U29ydEZ1bmModHJhbnNmb3JtQ29udGV4
dCwgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24pOworCisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGZvciBhIGJ1ZyBpbiBsaWJ4c2x0LgorICAgICAgICAvLyBUaGUgYnVnIGhhcyBiZWVu
IGZpeGVkIGluIHZlcnNpb24gMS4xLjEzLCBzbyBvbmNlIHdlIHNoaXAgdGhhdCB0aGlzIGNhbiBi
ZSByZW1vdmVkLgorICAgICAgICBpZiAoIXRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMpCisg
ICAgICAgICAgIHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPSB4bWxIYXNoQ3JlYXRlKDIw
KTsKKworICAgICAgICBjb25zdCBjaGFyKiogcGFyYW1zID0geHNsdFBhcmFtQXJyYXlGcm9tUGFy
YW1ldGVyTWFwKG1fcGFyYW1ldGVycyk7CisgICAgICAgIHhzbHRRdW90ZVVzZXJQYXJhbXModHJh
bnNmb3JtQ29udGV4dCwgcGFyYW1zKTsKKyAgICAgICAgeG1sRG9jUHRyIHJlc3VsdERvYyA9IHhz
bHRBcHBseVN0eWxlc2hlZXRVc2VyKHNoZWV0LCBzb3VyY2VEb2MsIDAsIDAsIDAsIHRyYW5zZm9y
bUNvbnRleHQpOworCisgICAgICAgIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1D
b250ZXh0KTsKKyAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFtcyk7CisKKyAgICAgICAg
aWYgKHNob3VsZEZyZWVTb3VyY2VEb2MpCisgICAgICAgICAgICB4bWxGcmVlRG9jKHNvdXJjZURv
Yyk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgPSBzYXZlUmVzdWx0VG9TdHJpbmcocmVzdWx0RG9j
LCBzaGVldCwgcmVzdWx0U3RyaW5nKSkgeworICAgICAgICAgICAgbWltZVR5cGUgPSByZXN1bHRN
SU1FVHlwZShyZXN1bHREb2MsIHNoZWV0KTsKKyAgICAgICAgICAgIHJlc3VsdEVuY29kaW5nID0g
KGNoYXIqKXJlc3VsdERvYy0+ZW5jb2Rpbmc7CisgICAgICAgIH0KKyAgICAgICAgeG1sRnJlZURv
YyhyZXN1bHREb2MpOworICAgIH0KKworICAgIHNoZWV0LT5tZXRob2QgPSBvcmlnTWV0aG9kOwor
ICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAgeHNsdEZyZWVTdHlsZXNoZWV0
KHNoZWV0KTsKKyAgICBtX3N0eWxlc2hlZXQgPSAwOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShYU0xUKQotLSAK
MS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34849</attachid>
            <date>2009-08-14 09:55:36 -0700</date>
            <delta_ts>2009-08-18 00:14:37 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>39045</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAzOWZmZTgyMzkzOGNjNGViN2UyYzMzZTNhZGJhMWI3YmZkMzJkMDFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTQ6NTM6MzggKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKCklu
IHByZXBhcmF0aW9uIGZvciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0
byB0aGUgUXQKcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29y
IGltcGxlbWVudGF0aW9uIGludG8KYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0aGF0
IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KCkFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5n
IHN0eWxlIGlzc3Vlcy4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
IHwgICAzNyArKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIHwgICAgNCArCiBXZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbCAgICAgICAgICAgIHwgICAxOSArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAgICAgICAgICB8ICAzMDYgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBX
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggICAgICAgICAgIHwgICA4MCArKysrLS0tLQogV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICB8ICAzNDIgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ1MCBpbnNlcnRpb25zKCspLCAz
NDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3NvckxpYnhzbHQuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA3NTczN2I2Li41YjU2NzhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDA5LTA4
LTE0ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIGxpYnhzbHQgc3BlY2lm
aWMgcGFydCBvZiBYU0xUUHJvY2Vzc29yIHRvIGEgc2VwYXJhdGUgZmlsZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zIHRv
IHRoZSBRdAorICAgICAgICBwb3J0LCBtb3ZlIHRoZSBsaWJ4c2x0IHBhcnQgb2YgdGhlIFhTTFRQ
cm9jZXNzb3IgaW1wbGVtZW50YXRpb24gaW50bworICAgICAgICBhbm90aGVyIGZpbGUgYW5kIGxl
YXZlIHRoZSBwYXJ0IHRoYXQgY2FuIGJlIHJldXNlZCBhbmQgc2hhcmVkLgorCisgICAgICAgIEFk
ZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6Cisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRl
c3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKTogUmVt
b3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nv
cjo6dHJhbnNmb3JtVG9GcmFnbWVudCk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnJlc2V0KTogTW92ZWQgb3V0IG9mIHRoZSBj
bGFzcyBkZWZpbml0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6IEZpeCBpbmRl
bnRhdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMpOiBNb3Zl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRYU0xUTG9hZENhbGxCYWNrKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp3
cml0ZVRvVmVjdG9yKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXZlUmVzdWx0VG9TdHJp
bmcpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRl
ck1hcCk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVhzbHRQYXJhbUFycmF5KTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIpOiBNb3ZlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZXN1bHRNSU1FVHlwZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3ZlZC4KKwogMjAwOS0wOC0xNCAgWWFlbCBBaGFy
b24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBkYTllYjRhLi4xOTc5ZGZhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIzMzIsNiAr
MjMzMiw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWFNMVEV4dGVuc2lv
bnMuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5zaW9ucy5oIFwKIAlXZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcCBcCisJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IFwKIAlXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggXAogCVdlYkNvcmUveG1sL1hTTFRVbmlj
b2RlU29ydC5jcHAgXAogCVdlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGFkNjYx
ZjcuLjQ4YzA5NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNDEyLDYgKzM0MTIsNyBAQAogICAgICAgICAgICAgJ3htbC9Y
U0xURXh0ZW5zaW9ucy5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xURXh0ZW5zaW9ucy5oJywK
ICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAgJ3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xUUHJvY2Vzc29y
LmgnLAogICAgICAgICAgICAgJ3htbC9YU0xUVW5pY29kZVNvcnQuY3BwJywKICAgICAgICAgICAg
ICd4bWwvWFNMVFVuaWNvZGVTb3J0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggNzRlMTZjMi4uNWIyYzdkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0yMzU2MCw2ICsyMzU2MCwxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
eG1sXFhTTFRQcm9jZXNzb3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmlu
ZGV4IDc3YTAzZmYuLmRiMTc3ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xLDUgKzEsNSBAQAogPD94
bWwgdmVyc2lvbj0iMS4wIiA/PgotPCEtLSAKKzwhLS0KIAogQ29weXJpZ2h0IChDKSAyMDA3IEtl
dmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtOCwxMyArOCwxMyBAQCBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKIGFyZSBtZXQ6CiAKIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
IAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTUwLDcgKzUwLDcgQEAgVGhp
cyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3Jl
LgogICAgICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKICAgICAg
ICAgYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAogICAgIDwvc2V0PgotICAgIAorCiAg
ICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0pTIj4KICAgICAgICAgYmlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0
b20uY3BwCkBAIC00OTAsNyArNDkwLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9m
IGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBkb20vUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcAogICAgICAgICBk
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKLSAgICAgICAgZG9tL1NlbGVjdEVsZW1lbnQu
Y3BwIAorICAgICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAKICAgICAgICAgZG9tL1NlbGVjdG9y
Tm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAKICAgICAgICAgZG9t
L1N0eWxlRWxlbWVudC5jcHAKQEAgLTU1OSw3ICs1NTksNyBAQCBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGVkaXRp
bmcvbWFya3VwLmNwcAogICAgICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCiAgICAgPC9z
ZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSElT
VE9SWSI+CiAgICAgICAgIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAogICAgICAgICBoaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtNTY3LDcgKzU2Nyw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwCiAgICAgICAgIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCiAgICAg
PC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
SFRNTCI+CiAgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAogICAgICAgICBo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcApAQCAtNzI1LDcgKzcyNSw3IEBAIFRoaXMgZmls
ZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAg
ICAgICAgbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCiAgICAgICAgIGxvYWRlci9s
b2FkZXIuY3BwCiAgICAgPC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJX
RUJDT1JFX1NPVVJDRVNfSUNPTiI+CiAgICAgICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5j
cHAKICAgICAgICAgbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKQEAgLTEwNjksNiArMTA2OSw3
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQg
V2ViQ29yZS4KICAgICAgICAgeG1sL1hTTFRFeHRlbnNpb25zLmNwcAogICAgICAgICB4bWwvWFNM
VFVuaWNvZGVTb3J0LmNwcAogICAgICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKKyAgICAgICAg
eG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAogICAgIDwvc2V0PgogCiA8L21ha2VmaWxlPgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAgYi9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcAppbmRleCBhMjZmZTc3Li5mMzFkYzRjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcApAQCAtNDksMTU1ICs0OSwxMiBAQAogI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgog
I2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGxpYnhz
bHQvaW1wb3J0cy5oPgotI2luY2x1ZGUgPGxpYnhzbHQvdmFyaWFibGVzLmg+Ci0jaW5jbHVkZSA8
bGlieHNsdC94c2x0dXRpbHMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRG
T1JNKE1BQykKLSNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgotCi1TT0ZUX0xJTktfTElCUkFSWShs
aWJ4c2x0KTsKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVN0eWxlc2hlZXQsIHZvaWQsICh4
c2x0U3R5bGVzaGVldFB0ciBzaGVldCksIChzaGVldCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNs
dEZyZWVUcmFuc2Zvcm1Db250ZXh0LCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4
dCksIChjdHh0KSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dCwg
eHNsdFRyYW5zZm9ybUNvbnRleHRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9j
UHRyIGRvYyksIChzdHlsZSwgZG9jKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0QXBwbHlTdHls
ZXNoZWV0VXNlciwgeG1sRG9jUHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0
ciBkb2MsIGNvbnN0IGNoYXIqKiBwYXJhbXMsIGNvbnN0IGNoYXIqIG91dHB1dCwgRklMRSogcHJv
ZmlsZSwgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgdXNlckN0eHQpLCAoc3R5bGUsIGRvYywgcGFy
YW1zLCBvdXRwdXQsIHByb2ZpbGUsIHVzZXJDdHh0KSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0
UXVvdGVVc2VyUGFyYW1zLCBpbnQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCBjb25z
dCBjaGFyKiogcGFyYW1zKSwgKGN0eHQsIHBhcmFtcykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNs
dFNldEN0eHRTb3J0RnVuYywgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhz
bHRTb3J0RnVuYyBoYW5kbGVyKSwgKGN0eHQsIGhhbmRsZXIpKQotU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRTZXRMb2FkZXJGdW5jLCB2b2lkLCAoeHNsdERvY0xvYWRlckZ1bmMgZiksIChmKSkKLVNP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0U2F2ZVJlc3VsdFRvLCBpbnQsICh4bWxPdXRwdXRCdWZmZXJQ
dHIgYnVmLCB4bWxEb2NQdHIgcmVzdWx0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChidWYs
IHJlc3VsdCwgc3R5bGUpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0
U3R5bGVzaGVldFB0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKHN0eWxlKSkKLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vy
cm9yRnVuYyh2b2lkKiwgY29uc3QgY2hhciosIC4uLikKLXsKLSAgICAvLyBJdCB3b3VsZCBiZSBu
aWNlIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KLX0KLSAgICAKLXZv
aWQgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9y
KiBlcnJvcikKLXsKLSAgICBDb25zb2xlKiBjb25zb2xlID0gc3RhdGljX2Nhc3Q8Q29uc29sZSo+
KHVzZXJEYXRhKTsKLSAgICBpZiAoIWNvbnNvbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1l
c3NhZ2VMZXZlbCBsZXZlbDsKLSAgICBzd2l0Y2ggKGVycm9yLT5sZXZlbCkgewotICAgICAgICBj
YXNlIFhNTF9FUlJfTk9ORToKLSAgICAgICAgICAgIGxldmVsID0gVGlwTWVzc2FnZUxldmVsOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9XQVJOSU5HOgotICAgICAg
ICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgWE1MX0VSUl9FUlJPUjoKLSAgICAgICAgY2FzZSBYTUxfRVJSX0ZBVEFMOgot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1M
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJy
b3ItPmxpbmUsIGVycm9yLT5maWxlKTsKLX0KLQotLy8gRklYTUU6IFRoZXJlIHNlZW1zIHRvIGJl
IG5vIHdheSB0byBjb250cm9sIHRoZSBjdHh0IHBvaW50ZXIgZm9yIGxvYWRpbmcgaGVyZSwgdGh1
cyB3ZSBoYXZlIGdsb2JhbHMuCi1zdGF0aWMgWFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29y
ID0gMDsKLXN0YXRpYyBEb2NMb2FkZXIqIGdsb2JhbERvY0xvYWRlciA9IDA7Ci1zdGF0aWMgeG1s
RG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sQ2hhciogdXJpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeG1sRGljdFB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCogY3R4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhz
bHRMb2FkVHlwZSB0eXBlKQotewotICAgIGlmICghZ2xvYmFsUHJvY2Vzc29yKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBYU0xUX0xP
QURfRE9DVU1FTlQ6IHsKLSAgICAgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRl
eHQgPSAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIpY3R4dDsKLSAgICAgICAgICAgIHhtbENoYXIq
IGJhc2UgPSB4bWxOb2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5u
b2RlKTsKLSAgICAgICAgICAgIEtVUkwgdXJsKEtVUkwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmkpKTsKLSAgICAg
ICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yOwot
ICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKLQotICAgICAgICAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7Ci0KLSAgICAgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9i
YWxEb2NMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwotICAgICAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2Vk
KSB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+
bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBn
bG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3Bv
bnNlLnVybCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcmVxdWVzdEFsbG93
ZWQpIHsKLSAgICAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZ2xv
YmFsRG9jTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQ29uc29sZSogY29uc29sZSA9IDA7Ci0gICAgICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPm93bmVyRG9j
dW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBjb25zb2xlID0gZnJhbWUtPmRvbVdp
bmRvdygpLT5jb25zb2xlKCk7Ci0gICAgICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5j
KGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTsKLSAgICAgICAgICAgIHht
bFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9y
RnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHNwZWNpZnkgYW4g
ZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKLSAgICAgICAg
ICAgIC8vIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIEhUVFAgaGVhZGVycy4KLSAgICAg
ICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9ucyk7Ci0KLSAgICAgICAgICAgIHhtbFNl
dFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwgMCk7Ci0gICAgICAgICAgICB4bWxTZXRHZW5lcmljRXJy
b3JGdW5jKDAsIDApOwotCi0gICAgICAgICAgICByZXR1cm4gZG9jOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgWFNMVF9MT0FEX1NUWUxFU0hFRVQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFs
UHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSgo
KHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVyaSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9hZENhbGxCYWNrKHhzbHREb2NMb2FkZXJGdW5jIGZ1bmMs
IFhTTFRQcm9jZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgeHNs
dFNldExvYWRlckZ1bmMoZnVuYyk7Ci0gICAgZ2xvYmFsUHJvY2Vzc29yID0gcHJvY2Vzc29yOwot
ICAgIGdsb2JhbERvY0xvYWRlciA9IGxvYWRlcjsKLX0KLQotc3RhdGljIGludCB3cml0ZVRvVmVj
dG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICBW
ZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+
KGNvbnRleHQpOwotICAgIFN0cmluZyBkZWNvZGVkQ2h1bmsgPSBTdHJpbmc6OmZyb21VVEY4KGJ1
ZmZlciwgbGVuKTsKLSAgICByZXN1bHRPdXRwdXQuYXBwZW5kKGRlY29kZWRDaHVuay5jaGFyYWN0
ZXJzKCksIGRlY29kZWRDaHVuay5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotc3Rh
dGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHls
ZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICB4bWxPdXRwdXRC
dWZmZXJQdHIgb3V0cHV0QnVmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoMCk7Ci0gICAgaWYgKCFv
dXRwdXRCdWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRWZWN0b3I7Ci0gICAg
b3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsKLSAgICAKLSAgICBpbnQg
cmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hlZXQpOwot
ICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7Ci0gICAgaWYgKHJldHZhbCA8IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxodHRwOi8v
YnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVu
ZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCi0gICAgaWYgKHJlc3VsdFZlY3Rv
ci5zaXplKCkgPiAwICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iuc2l6ZSgpIC0gMV0gPT0g
J1xuJykKLSAgICAgICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsKLQotICAgIHJlc3VsdFN0
cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVu
dFN0cmluZyhTdHJpbmcmIHRleHQpCiB7CiAgICAgLy8gTW9kaWZ5IHRoZSBvdXRwdXQgc28gdGhh
dCBpdCBpcyBhIHdlbGwtZm9ybWVkIFhIVE1MIGRvY3VtZW50IHdpdGggYSA8cHJlPiB0YWcgZW5j
bG9zaW5nIHRoZSB0ZXh0LgpAQCAtMjEzLDM4ICs3MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0
cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKFN0cmluZyYgdGV4dCkKICAg
ICAgICAgIjwvaHRtbD5cbiI7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJy
YXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVy
cykKLXsKLSAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY29uc3QgY2hhcioqIHBhcmFtZXRlckFycmF5ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFs
bG9jKCgocGFyYW1ldGVycy5zaXplKCkgKiAyKSArIDEpICogc2l6ZW9mKGNoYXIqKSk7Ci0KLSAg
ICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMu
ZW5kKCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6
UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5m
aXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBz
dHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0gICAgcGFyYW1ldGVyQXJy
YXlbaW5kZXhdID0gMDsKLQotICAgIHJldHVybiBwYXJhbWV0ZXJBcnJheTsKLX0KLQotc3RhdGlj
IHZvaWQgZnJlZVhzbHRQYXJhbUFycmF5KGNvbnN0IGNoYXIqKiBwYXJhbXMpCi17Ci0gICAgY29u
c3QgY2hhcioqIHRlbXAgPSBwYXJhbXM7Ci0gICAgaWYgKCFwYXJhbXMpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICB3aGlsZSAoKnRlbXApIHsKLSAgICAgICAgZnJlZSgodm9pZCopKih0ZW1w
KyspKTsgLy8gc3RyZHVwIHJldHVybnMgbWFsbG9jJ2QgYmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVz
ZSBmcmVlKCkgaGVyZQotICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOwotICAgIH0KLSAg
ICBmYXN0RnJlZShwYXJhbXMpOwotfQotCi0KIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9j
ZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmlu
ZywKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUpCiB7CkBAIC0yNTgsNyAr
ODMsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVu
dEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogICAgICAgICB0cmFuc2Zvcm1UZXh0U3Ry
aW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKGRvY3VtZW50U291cmNlKTsKICAgICB9IGVsc2UKICAg
ICAgICAgcmVzdWx0ID0gb3duZXJEb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9j
dW1lbnQoc291cmNlTUlNRVR5cGUsIGZyYW1lLCBmYWxzZSk7Ci0gICAgCisKICAgICAvLyBCZWZv
cmUgcGFyc2luZywgd2UgbmVlZCB0byBzYXZlICYgZGV0YWNoIHRoZSBvbGQgZG9jdW1lbnQgYW5k
IGdldCB0aGUgbmV3IGRvY3VtZW50CiAgICAgLy8gaW4gcGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhp
cyBvbmx5IGlmIHdlJ3JlIHJlbmRlcmluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgogICAgIGlmIChm
cmFtZSkgewpAQCAtMjY3LDE1ICs5MiwxNSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogICAg
ICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KGZyYW1lLT5kb2N1bWVudCgp
KTsKICAgICAgICAgZnJhbWUtPnNldERvY3VtZW50KHJlc3VsdCk7CiAgICAgfQotICAgIAorCiAg
ICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCiAgICAgICAgIHJlc3VsdC0+c2V0VVJMKG93bmVyRG9j
dW1lbnQtPnVybCgpKTsKICAgICByZXN1bHQtPm9wZW4oKTsKLSAgICAKKwogICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KHNvdXJjZU1JTUVUeXBlKTsKICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhzb3VyY2VFbmNvZGlu
Zy5pc0VtcHR5KCkgPyBVVEY4RW5jb2RpbmcoKSA6IFRleHRFbmNvZGluZyhzb3VyY2VFbmNvZGlu
ZyksIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbVhNTEhlYWRlcik7CiAgICAgcmVz
dWx0LT5zZXREZWNvZGVyKGRlY29kZXIucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIHJlc3VsdC0+
d3JpdGUoZG9jdW1lbnRTb3VyY2UpOwogICAgIHJlc3VsdC0+ZmluaXNoUGFyc2luZygpOwogICAg
IHJlc3VsdC0+Y2xvc2UoKTsKQEAgLTI4Niw3ICsxMTEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50
PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBz
b3VyYwogc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21l
bnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNv
dXJjZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0RG9jKQogewogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50KG91dHB1dERvYyk7Ci0g
ICAgCisKICAgICBpZiAoc291cmNlTUlNRVR5cGUgPT0gInRleHQvaHRtbCIpCiAgICAgICAgIHBh
cnNlSFRNTERvY3VtZW50RnJhZ21lbnQoc291cmNlU3RyaW5nLCBmcmFnbWVudC5nZXQoKSk7CiAg
ICAgZWxzZSBpZiAoc291cmNlTUlNRVR5cGUgPT0gInRleHQvcGxhaW4iKQpAQCAtMjk2LDExOCAr
MTIxLDEwIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZy
YWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvCiAgICAgICAgIGlmICghc3VjY2Vzc2Z1
bFBhcnNlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIG1lc3Mgd2l0aCBVUkxzIGhlcmU/Ci0gICAgICAgIAotICAgIHJldHVy
biBmcmFnbWVudDsKLX0KLQotc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0
UG9pbnRlcihSZWZQdHI8WFNMU3R5bGVTaGVldD4mIGNhY2hlZFN0eWxlc2hlZXQsIE5vZGUqIHN0
eWxlc2hlZXRSb290Tm9kZSkKLXsKLSAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgJiYgc3R5bGVz
aGVldFJvb3ROb2RlKSB7Ci0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBYU0xTdHlsZVNoZWV0
OjpjcmVhdGUoc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA/IHN0eWxlc2hlZXRSb290Tm9k
ZS0+cGFyZW50KCkgOiBzdHlsZXNoZWV0Um9vdE5vZGUsCi0gICAgICAgICAgICBzdHlsZXNoZWV0
Um9vdE5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgY2FjaGVkU3R5
bGVzaGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hlZXRSb290Tm9kZSkpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hl
ZXQtPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBjYWNo
ZWRTdHlsZXNoZWV0LT5jb21waWxlU3R5bGVTaGVldCgpOwotfQogCi1zdGF0aWMgaW5saW5lIHht
bERvY1B0ciB4bWxEb2NQdHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGRE
ZWxldGUpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9k
ZS0+ZG9jdW1lbnQoKTsKLSAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9
PSBvd25lckRvY3VtZW50LmdldCgpKTsKLSAgICAKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0g
MDsKLSAgICBpZiAoc291cmNlSXNEb2N1bWVudCkKLSAgICAgICAgc291cmNlRG9jID0gKHhtbERv
Y1B0cilvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKTsKLSAgICBpZiAoIXNvdXJjZURv
YykgewotICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmluZyhv
d25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLAotICAg
ICAgICAgICAgc291cmNlSXNEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQtPnVybCgpLnN0cmluZygp
IDogU3RyaW5nKCkpOwotICAgICAgICBzaG91bGREZWxldGUgPSAoc291cmNlRG9jICE9IDApOwot
ICAgIH0KLSAgICByZXR1cm4gc291cmNlRG9jOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBy
ZXN1bHRNSU1FVHlwZSh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciBzaGVl
dCkKLXsKLSAgICAvLyBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Ygb3V0cHV0IHdlIG5lZWQgdG8g
YmUgYWJsZSB0byBkZWFsIHdpdGg6Ci0gICAgLy8gSFRNTCAoY3JlYXRlIGFuIEhUTUwgZG9jdW1l
bnQpLCBYTUwgKGNyZWF0ZSBhbiBYTUwgZG9jdW1lbnQpLAotICAgIC8vIGFuZCB0ZXh0ICh3cmFw
IGluIGEgPHByZT4gYW5kIGNyZWF0ZSBhbiBYTUwgZG9jdW1lbnQpLgotCi0gICAgY29uc3QgeG1s
Q2hhciogcmVzdWx0VHlwZSA9IDA7Ci0gICAgWFNMVF9HRVRfSU1QT1JUX1BUUihyZXN1bHRUeXBl
LCBzaGVldCwgbWV0aG9kKTsKLSAgICBpZiAocmVzdWx0VHlwZSA9PSAwICYmIHJlc3VsdERvYy0+
dHlwZSA9PSBYTUxfSFRNTF9ET0NVTUVOVF9OT0RFKQotICAgICAgICByZXN1bHRUeXBlID0gKGNv
bnN0IHhtbENoYXIqKSJodG1sIjsKLSAgICAKLSAgICBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlw
ZSwgKGNvbnN0IHhtbENoYXIqKSJodG1sIikpCi0gICAgICAgIHJldHVybiAidGV4dC9odG1sIjsK
LSAgICBlbHNlIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1sQ2hhciopInRl
eHQiKSkKLSAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKLSAgICAgICAgCi0gICAgcmV0dXJu
ICJhcHBsaWNhdGlvbi94bWwiOwotfQotCi1ib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRv
U3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVzdWx0
U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQotewotICAgIFJlZlB0cjxEb2N1bWVudD4g
b3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAgCi0gICAgc2V0WFNM
VExvYWRDYWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3VtZW50LT5kb2NMb2Fk
ZXIoKSk7Ci0gICAgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQgPSB4c2x0U3R5bGVzaGVldFBvaW50
ZXIobV9zdHlsZXNoZWV0LCBtX3N0eWxlc2hlZXRSb290Tm9kZS5nZXQoKSk7Ci0gICAgaWYgKCFz
aGVldCkgewotICAgICAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDApOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsK
LQotICAgIHhtbENoYXIqIG9yaWdNZXRob2QgPSBzaGVldC0+bWV0aG9kOwotICAgIGlmICghb3Jp
Z01ldGhvZCAmJiBtaW1lVHlwZSA9PSAidGV4dC9odG1sIikKLSAgICAgICAgc2hlZXQtPm1ldGhv
ZCA9ICh4bWxDaGFyKikiaHRtbCI7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBi
b29sIHNob3VsZEZyZWVTb3VyY2VEb2MgPSBmYWxzZTsKLSAgICBpZiAoeG1sRG9jUHRyIHNvdXJj
ZURvYyA9IHhtbERvY1B0ckZyb21Ob2RlKHNvdXJjZU5vZGUsIHNob3VsZEZyZWVTb3VyY2VEb2Mp
KSB7Ci0gICAgICAgIC8vIFRoZSBYTUwgZGVjbGFyYXRpb24gd291bGQgcHJldmVudCBwYXJzaW5n
IHRoZSByZXN1bHQgYXMgYSBmcmFnbWVudCwgYW5kIGl0J3Mgbm90IG5lZWRlZCBldmVuIGZvciBk
b2N1bWVudHMsIAotICAgICAgICAvLyBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMg
YWx3YXlzIGltbWVkaWF0ZWx5IHBhcnNlZC4KLSAgICAgICAgc2hlZXQtPm9taXRYbWxEZWNsYXJh
dGlvbiA9IHRydWU7Ci0KLSAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgdHJhbnNmb3Jt
Q29udGV4dCA9IHhzbHROZXdUcmFuc2Zvcm1Db250ZXh0KHNoZWV0LCBzb3VyY2VEb2MpOwotICAg
ICAgICByZWdpc3RlclhTTFRFeHRlbnNpb25zKHRyYW5zZm9ybUNvbnRleHQpOwotCi0gICAgICAg
IC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA3Nz46IFhTTFQg
cHJvY2Vzc29yIDx4c2w6c29ydD4gYWxnb3JpdGhtIG9ubHkgY29tcGFyZXMgYnkgY29kZSBwb2lu
dAotICAgICAgICB4c2x0U2V0Q3R4dFNvcnRGdW5jKHRyYW5zZm9ybUNvbnRleHQsIHhzbHRVbmlj
b2RlU29ydEZ1bmN0aW9uKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBidWcgaW4gbGlieHNsdC4gCi0gICAgICAgIC8vIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgaW4g
dmVyc2lvbiAxLjEuMTMsIHNvIG9uY2Ugd2Ugc2hpcCB0aGF0IHRoaXMgY2FuIGJlIHJlbW92ZWQu
Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJzID09IE5VTEwpCi0gICAg
ICAgICAgIHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPSB4bWxIYXNoQ3JlYXRlKDIwKTsK
LQotICAgICAgICBjb25zdCBjaGFyKiogcGFyYW1zID0geHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1l
dGVyTWFwKG1fcGFyYW1ldGVycyk7Ci0gICAgICAgIHhzbHRRdW90ZVVzZXJQYXJhbXModHJhbnNm
b3JtQ29udGV4dCwgcGFyYW1zKTsKLSAgICAgICAgeG1sRG9jUHRyIHJlc3VsdERvYyA9IHhzbHRB
cHBseVN0eWxlc2hlZXRVc2VyKHNoZWV0LCBzb3VyY2VEb2MsIDAsIDAsIDAsIHRyYW5zZm9ybUNv
bnRleHQpOwotICAgICAgICAKLSAgICAgICAgeHNsdEZyZWVUcmFuc2Zvcm1Db250ZXh0KHRyYW5z
Zm9ybUNvbnRleHQpOyAgICAgICAgCi0gICAgICAgIGZyZWVYc2x0UGFyYW1BcnJheShwYXJhbXMp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZEZyZWVTb3VyY2VEb2MpCi0gICAgICAgICAg
ICB4bWxGcmVlRG9jKHNvdXJjZURvYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc3VjY2VzcyA9
IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0LCByZXN1bHRTdHJpbmcpKSB7Ci0g
ICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBlKHJlc3VsdERvYywgc2hlZXQpOwot
ICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciopcmVzdWx0RG9jLT5lbmNvZGluZzsK
LSAgICAgICAgfQotICAgICAgICB4bWxGcmVlRG9jKHJlc3VsdERvYyk7Ci0gICAgfQotICAgIAot
ICAgIHNoZWV0LT5tZXRob2QgPSBvcmlnTWV0aG9kOwotICAgIHNldFhTTFRMb2FkQ2FsbEJhY2so
MCwgMCwgMCk7Ci0gICAgeHNsdEZyZWVTdHlsZXNoZWV0KHNoZWV0KTsKLSAgICBtX3N0eWxlc2hl
ZXQgPSAwOworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIG1lc3Mgd2l0aCBVUkxzIGhlcmU/
CiAKLSAgICByZXR1cm4gc3VjY2VzczsKKyAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKIFBhc3NS
ZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoTm9kZSog
c291cmNlTm9kZSkKQEAgLTQyOSw3ICsxNDYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlTm9kZQog
ICAgIC8vIElmIHRoZSBvdXRwdXQgZG9jdW1lbnQgaXMgSFRNTCwgZGVmYXVsdCB0byBIVE1MIG1l
dGhvZC4KICAgICBpZiAob3V0cHV0RG9jLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXN1
bHRNSU1FVHlwZSA9ICJ0ZXh0L2h0bWwiOwotICAgIAorCiAgICAgaWYgKCF0cmFuc2Zvcm1Ub1N0
cmluZyhzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3RyaW5nLCByZXN1bHRFbmNv
ZGluZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21T
b3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRNSU1FVHlwZSwgb3V0cHV0RG9jKTsKQEAgLTQ1NSw2
ICsxNzIsMTMgQEAgdm9pZCBYU0xUUHJvY2Vzc29yOjpyZW1vdmVQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiAvKm5hbWVzcGFjZVVSSSovLCBjb25zdCBTdHJpbmcKICAgICBtX3BhcmFtZXRlcnMucmVt
b3ZlKGxvY2FsTmFtZSk7CiB9CiAKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6cmVzZXQoKQoreworICAg
IG1fc3R5bGVzaGVldC5jbGVhcigpOworICAgIG1fc3R5bGVzaGVldFJvb3ROb2RlLmNsZWFyKCk7
CisgICAgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5oIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCmluZGV4IDllZTJhYWQuLjQ1
ZjVjYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAorKysgYi9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKQEAgLTM0LDQ2ICszNCw0NiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEZyYW1lOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVu
dEZyYWdtZW50OwotCi1jbGFzcyBYU0xUUHJvY2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNM
VFByb2Nlc3Nvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNz
b3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQotCi0g
ICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVT
aGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9Ci0gICAgYm9vbCB0cmFuc2Zvcm1U
b1N0cmluZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVz
dWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKLSAgICBQYXNzUmVmUHRyPERvY3Vt
ZW50PiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5v
ZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7Ci0gICAgCi0gICAgLy8gRE9NIG1ldGhvZHMK
LSAgICB2b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBzdHlsZSkgeyBtX3N0
eWxlc2hlZXRSb290Tm9kZSA9IHN0eWxlOyB9Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiB0cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0RG9j
KTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNv
dXJjZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAg
ICBTdHJpbmcgZ2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKLSAgICB2b2lk
IGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KLQotICAgIHZvaWQg
cmVzZXQoKSB7IG1fc3R5bGVzaGVldC5jbGVhcigpOyBtX3N0eWxlc2hlZXRSb290Tm9kZS5jbGVh
cigpOyAgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KLQotICAgIHN0YXRpYyB2b2lkIHBhcnNlRXJy
b3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciopOwotICAgIHN0YXRpYyB2b2lkIGdlbmVy
aWNFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKLSAgICAK
LXB1YmxpYzoKLSAgICAvLyBPbmx5IGZvciBsaWJYU0xUIGNhbGxiYWNrcwotICAgIFhTTFN0eWxl
U2hlZXQqIHhzbFN0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlc2hlZXQuZ2V0KCk7
IH0KLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVyTWFwOwot
Ci1wcml2YXRlOgotICAgIFhTTFRQcm9jZXNzb3IoKSB7IH0KLQotICAgIFJlZlB0cjxYU0xTdHls
ZVNoZWV0PiBtX3N0eWxlc2hlZXQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJvb3RO
b2RlOwotICAgIFBhcmFtZXRlck1hcCBtX3BhcmFtZXRlcnM7Ci19OworICAgIGNsYXNzIEZyYW1l
OworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CisKKyAg
ICBjbGFzcyBYU0xUUHJvY2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNMVFByb2Nlc3Nvcj4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nlc3Nvcj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3IpOyB9CisKKyAgICAg
ICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVT
aGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CisgICAgICAgIGJvb2wgdHJhbnNm
b3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcm
IHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7CisgICAgICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1F
VHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKTsKKworICAgICAgICAvLyBET00g
bWV0aG9kcworICAgICAgICB2b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBz
dHlsZSkgeyBtX3N0eWxlc2hlZXRSb290Tm9kZSA9IHN0eWxlOyB9CisgICAgICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gdHJhbnNmb3JtVG9GcmFnbWVudChOb2RlKiBzb3VyY2UsIERv
Y3VtZW50KiBvdXB1dERvYyk7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9y
bVRvRG9jdW1lbnQoTm9kZSogc291cmNlKTsKKworICAgICAgICB2b2lkIHNldFBhcmFtZXRlcihj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpOworICAgICAgICBTdHJpbmcgZ2V0UGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CisgICAgICAg
IHZvaWQgcmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSk7CisgICAgICAgIHZvaWQgY2xlYXJQYXJhbWV0ZXJzKCkgeyBtX3Bh
cmFtZXRlcnMuY2xlYXIoKTsgfQorCisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgICAgICBz
dGF0aWMgdm9pZCBwYXJzZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgeG1sRXJyb3IqKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgY29uc3Qg
Y2hhciogbXNnLCAuLi4pOworCisgICAgcHVibGljOgorICAgICAgICAvLyBPbmx5IGZvciBsaWJY
U0xUIGNhbGxiYWNrcworICAgICAgICBYU0xTdHlsZVNoZWV0KiB4c2xTdHlsZXNoZWV0KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZXNoZWV0LmdldCgpOyB9CisKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJNYXA7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBYU0xUUHJvY2Vzc29yKCkgeyB9CisKKyAgICAgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1f
c3R5bGVzaGVldDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJvb3ROb2RlOwor
ICAgICAgICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOworICAgIH07CiAKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjdiYTljNmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAi
WFNMVFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNvbnNv
bGUuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIiAvLyBmb3IgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudAorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJYU0xURXh0ZW5z
aW9ucy5oIgorI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgorI2luY2x1ZGUgImxvYWRlci5o
IgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0cy5oPgorI2lu
Y2x1ZGUgPGxpYnhzbHQvdmFyaWFibGVzLmg+CisjaW5jbHVkZSA8bGlieHNsdC94c2x0dXRpbHMu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRl
ICJTb2Z0TGlua2luZy5oIgorCitTT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KTsKK1NPRlRfTElO
SyhsaWJ4c2x0LCB4c2x0RnJlZVN0eWxlc2hlZXQsIHZvaWQsICh4c2x0U3R5bGVzaGVldFB0ciBz
aGVldCksIChzaGVldCkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVUcmFuc2Zvcm1Db250
ZXh0LCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCksIChjdHh0KSkKK1NPRlRf
TElOSyhsaWJ4c2x0LCB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dCwgeHNsdFRyYW5zZm9ybUNvbnRl
eHRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYyksIChzdHlsZSwg
ZG9jKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlciwgeG1sRG9j
UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MsIGNvbnN0IGNoYXIq
KiBwYXJhbXMsIGNvbnN0IGNoYXIqIG91dHB1dCwgRklMRSogcHJvZmlsZSwgeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgdXNlckN0eHQpLCAoc3R5bGUsIGRvYywgcGFyYW1zLCBvdXRwdXQsIHByb2Zp
bGUsIHVzZXJDdHh0KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UXVvdGVVc2VyUGFyYW1zLCBp
bnQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCBjb25zdCBjaGFyKiogcGFyYW1zKSwg
KGN0eHQsIHBhcmFtcykpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldEN0eHRTb3J0RnVuYywg
dm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhzbHRTb3J0RnVuYyBoYW5kbGVy
KSwgKGN0eHQsIGhhbmRsZXIpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRMb2FkZXJGdW5j
LCB2b2lkLCAoeHNsdERvY0xvYWRlckZ1bmMgZiksIChmKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4
c2x0U2F2ZVJlc3VsdFRvLCBpbnQsICh4bWxPdXRwdXRCdWZmZXJQdHIgYnVmLCB4bWxEb2NQdHIg
cmVzdWx0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChidWYsIHJlc3VsdCwgc3R5bGUpKQor
U09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0U3R5bGVzaGVldFB0ciwgKHhz
bHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKHN0eWxlKSkKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyh2b2lkKiwgY29u
c3QgY2hhciosIC4uLikKK3sKKyAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIHNvbWV0aGlu
ZyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KK30KKwordm9pZCBYU0xUUHJvY2Vzc29yOjpwYXJz
ZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgeG1sRXJyb3IqIGVycm9yKQoreworICAgIENvbnNv
bGUqIGNvbnNvbGUgPSBzdGF0aWNfY2FzdDxDb25zb2xlKj4odXNlckRhdGEpOworICAgIGlmICgh
Y29uc29sZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVzc2FnZUxldmVsIGxldmVsOworICAg
IHN3aXRjaCAoZXJyb3ItPmxldmVsKSB7CisgICAgY2FzZSBYTUxfRVJSX05PTkU6CisgICAgICAg
IGxldmVsID0gVGlwTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9F
UlJfV0FSTklORzoKKyAgICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFhNTF9FUlJfRVJST1I6CisgICAgY2FzZSBYTUxfRVJSX0ZBVEFM
OgorICAgIGRlZmF1bHQ6CisgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUs
IGVycm9yLT5maWxlKTsKK30KKworLy8gRklYTUU6IFRoZXJlIHNlZW1zIHRvIGJlIG5vIHdheSB0
byBjb250cm9sIHRoZSBjdHh0IHBvaW50ZXIgZm9yIGxvYWRpbmcgaGVyZSwgdGh1cyB3ZSBoYXZl
IGdsb2JhbHMuCitzdGF0aWMgWFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29yID0gMDsKK3N0
YXRpYyBEb2NMb2FkZXIqIGdsb2JhbERvY0xvYWRlciA9IDA7CitzdGF0aWMgeG1sRG9jUHRyIGRv
Y0xvYWRlckZ1bmMoY29uc3QgeG1sQ2hhciogdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG1sRGljdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCogY3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzbHRMb2FkVHlw
ZSB0eXBlKQoreworICAgIGlmICghZ2xvYmFsUHJvY2Vzc29yKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgWFNMVF9MT0FEX0RPQ1VNRU5UOiB7Cisg
ICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRyYW5zZm9ybUNv
bnRleHRQdHIpY3R4dDsKKyAgICAgICAgeG1sQ2hhciogYmFzZSA9IHhtbE5vZGVHZXRCYXNlKGNv
bnRleHQtPmRvY3VtZW50LT5kb2MsIGNvbnRleHQtPm5vZGUpOworICAgICAgICBLVVJMIHVybChL
VVJMKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4odXJpKSk7CisgICAgICAgIHhtbEZyZWUoYmFzZSk7CisgICAgICAgIFJl
c291cmNlRXJyb3IgZXJyb3I7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisK
KyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICAgICAgYm9vbCByZXF1ZXN0QWxsb3dl
ZCA9IGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7CisgICAgICAgIGlmIChyZXF1ZXN0QWxs
b3dlZCkgeworICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+
bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGdsb2Jh
bERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2Uu
dXJsKCkpOworICAgICAgICB9CisgICAgICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKKyAgICAg
ICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+cHJpbnRB
Y2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgIH0KKworICAgICAgICBDb25zb2xlKiBj
b25zb2xlID0gMDsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGdsb2JhbFByb2Nlc3Nvci0+
eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBj
b25zb2xlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7CisgICAgICAgIHhtbFNldFN0
cnVjdHVyZWRFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMp
OworICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6
OmdlbmVyaWNFcnJvckZ1bmMpOworCisgICAgICAgIC8vIFdlIGRvbid0IHNwZWNpZnkgYW4gZW5j
b2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKKyAgICAgICAgLy8g
dGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgorICAgICAgICB4bWxE
b2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIChjb25z
dCBjaGFyKil1cmksIDAsIG9wdGlvbnMpOworCisgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJv
ckZ1bmMoMCwgMCk7CisgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgMCk7CisKKyAg
ICAgICAgcmV0dXJuIGRvYzsKKyAgICB9CisgICAgY2FzZSBYU0xUX0xPQURfU1RZTEVTSEVFVDoK
KyAgICAgICAgcmV0dXJuIGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5sb2NhdGVT
dHlsZXNoZWV0U3ViUmVzb3VyY2UoKCh4c2x0U3R5bGVzaGVldFB0ciljdHh0KS0+ZG9jLCB1cmkp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4c2x0RG9jTG9hZGVy
RnVuYyBmdW5jLCBYU0xUUHJvY2Vzc29yKiBwcm9jZXNzb3IsIERvY0xvYWRlciogbG9hZGVyKQor
eworICAgIHhzbHRTZXRMb2FkZXJGdW5jKGZ1bmMpOworICAgIGdsb2JhbFByb2Nlc3NvciA9IHBy
b2Nlc3NvcjsKKyAgICBnbG9iYWxEb2NMb2FkZXIgPSBsb2FkZXI7Cit9CisKK3N0YXRpYyBpbnQg
d3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4p
Cit7CisgICAgVmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3Rv
cjxVQ2hhcj4qPihjb250ZXh0KTsKKyAgICBTdHJpbmcgZGVjb2RlZENodW5rID0gU3RyaW5nOjpm
cm9tVVRGOChidWZmZXIsIGxlbik7CisgICAgcmVzdWx0T3V0cHV0LmFwcGVuZChkZWNvZGVkQ2h1
bmsuY2hhcmFjdGVycygpLCBkZWNvZGVkQ2h1bmsubGVuZ3RoKCkpOworICAgIHJldHVybiBsZW47
Cit9CisKK3N0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIgcmVzdWx0RG9j
LCB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAg
eG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dEJ1ZiA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKDApOwor
ICAgIGlmICghb3V0cHV0QnVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdFZlY3RvcjsKKyAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVj
dG9yOworICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7CisKKyAg
ICBpbnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hl
ZXQpOworICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7CisgICAgaWYgKHJldHZh
bCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIDxo
dHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+OiBsaWJ4c2x0
IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCisgICAgaWYgKHJlc3Vs
dFZlY3Rvci5zaXplKCkgPiAwICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iuc2l6ZSgpIC0g
MV0gPT0gJ1xuJykKKyAgICAgICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsKKworICAgIHJl
c3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRl
ck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmIHBhcmFtZXRlcnMpCit7CisgICAgaWYg
KHBhcmFtZXRlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGNo
YXIqKiBwYXJhbWV0ZXJBcnJheSA9IChjb25zdCBjaGFyKiopZmFzdE1hbGxvYygoKHBhcmFtZXRl
cnMuc2l6ZSgpICogMikgKyAxKSAqIHNpemVvZihjaGFyKikpOworCisgICAgWFNMVFByb2Nlc3Nv
cjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVuZCgpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKKyAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6
aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5zZWNv
bmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorICAgIHBhcmFtZXRlckFycmF5W2luZGV4XSA9IDA7
CisKKyAgICByZXR1cm4gcGFyYW1ldGVyQXJyYXk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVYc2x0
UGFyYW1BcnJheShjb25zdCBjaGFyKiogcGFyYW1zKQoreworICAgIGNvbnN0IGNoYXIqKiB0ZW1w
ID0gcGFyYW1zOworICAgIGlmICghcGFyYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGls
ZSAoKnRlbXApIHsKKyAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsgLy8gc3RyZHVwIHJl
dHVybnMgbWFsbG9jJ2QgYmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVzZSBmcmVlKCkgaGVyZQorICAg
ICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOworICAgIH0KKyAgICBmYXN0RnJlZShwYXJhbXMp
OworfQorCitzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVyKFJl
ZlB0cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5bGVzaGVldFJv
b3ROb2RlKQoreworICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9vdE5v
ZGUpIHsKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0ZShz
dHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQo
KSA6IHN0eWxlc2hlZXRSb290Tm9kZSwKKyAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9kZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5w
YXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7CisgICAgfQorCisg
ICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjYWNoZWRTdHlsZXNoZWV0LT5jb21w
aWxlU3R5bGVTaGVldCgpOworfQorCitzdGF0aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQdHJG
cm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGREZWxldGUpCit7CisgICAgUmVm
UHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKKyAg
ICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBvd25lckRvY3VtZW50Lmdl
dCgpKTsKKworICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOworICAgIGlmIChzb3VyY2VJc0Rv
Y3VtZW50KQorICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQtPnRy
YW5zZm9ybVNvdXJjZSgpOworICAgIGlmICghc291cmNlRG9jKSB7CisgICAgICAgIHNvdXJjZURv
YyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1lbnQtPmRvY0xvYWRl
cigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCisgICAgICAgICAgICBzb3VyY2VJc0RvY3Vt
ZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmcoKSk7CisgICAgICAg
IHNob3VsZERlbGV0ZSA9IHNvdXJjZURvYzsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJjZURvYzsK
K30KKworc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRG9jUHRyIHJlc3Vs
dERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpCit7CisgICAgLy8gVGhlcmUgYXJlIHRocmVl
IHR5cGVzIG9mIG91dHB1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoOgorICAgIC8v
IEhUTUwgKGNyZWF0ZSBhbiBIVE1MIGRvY3VtZW50KSwgWE1MIChjcmVhdGUgYW4gWE1MIGRvY3Vt
ZW50KSwKKyAgICAvLyBhbmQgdGV4dCAod3JhcCBpbiBhIDxwcmU+IGFuZCBjcmVhdGUgYW4gWE1M
IGRvY3VtZW50KS4KKworICAgIGNvbnN0IHhtbENoYXIqIHJlc3VsdFR5cGUgPSAwOworICAgIFhT
TFRfR0VUX0lNUE9SVF9QVFIocmVzdWx0VHlwZSwgc2hlZXQsIG1ldGhvZCk7CisgICAgaWYgKCFy
ZXN1bHRUeXBlICYmIHJlc3VsdERvYy0+dHlwZSA9PSBYTUxfSFRNTF9ET0NVTUVOVF9OT0RFKQor
ICAgICAgICByZXN1bHRUeXBlID0gKGNvbnN0IHhtbENoYXIqKSJodG1sIjsKKworICAgIGlmICh4
bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1sQ2hhciopImh0bWwiKSkKKyAgICAgICAg
cmV0dXJuICJ0ZXh0L2h0bWwiOworICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29u
c3QgeG1sQ2hhciopInRleHQiKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKKworICAg
IHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKK30KKworYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcm
IHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZykKK3sKKyAgICBSZWZQdHI8RG9j
dW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOworCisgICAgc2V0
WFNMVExvYWRDYWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3VtZW50LT5kb2NM
b2FkZXIoKSk7CisgICAgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQgPSB4c2x0U3R5bGVzaGVldFBv
aW50ZXIobV9zdHlsZXNoZWV0LCBtX3N0eWxlc2hlZXRSb290Tm9kZS5nZXQoKSk7CisgICAgaWYg
KCFzaGVldCkgeworICAgICAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDApOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMo
KTsKKworICAgIHhtbENoYXIqIG9yaWdNZXRob2QgPSBzaGVldC0+bWV0aG9kOworICAgIGlmICgh
b3JpZ01ldGhvZCAmJiBtaW1lVHlwZSA9PSAidGV4dC9odG1sIikKKyAgICAgICAgc2hlZXQtPm1l
dGhvZCA9ICh4bWxDaGFyKikiaHRtbCI7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICBib29sIHNob3VsZEZyZWVTb3VyY2VEb2MgPSBmYWxzZTsKKyAgICBpZiAoeG1sRG9jUHRyIHNv
dXJjZURvYyA9IHhtbERvY1B0ckZyb21Ob2RlKHNvdXJjZU5vZGUsIHNob3VsZEZyZWVTb3VyY2VE
b2MpKSB7CisgICAgICAgIC8vIFRoZSBYTUwgZGVjbGFyYXRpb24gd291bGQgcHJldmVudCBwYXJz
aW5nIHRoZSByZXN1bHQgYXMgYSBmcmFnbWVudCwgYW5kIGl0J3Mgbm90IG5lZWRlZCBldmVuIGZv
ciBkb2N1bWVudHMsCisgICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBp
cyBhbHdheXMgaW1tZWRpYXRlbHkgcGFyc2VkLgorICAgICAgICBzaGVldC0+b21pdFhtbERlY2xh
cmF0aW9uID0gdHJ1ZTsKKworICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zv
cm1Db250ZXh0ID0geHNsdE5ld1RyYW5zZm9ybUNvbnRleHQoc2hlZXQsIHNvdXJjZURvYyk7Cisg
ICAgICAgIHJlZ2lzdGVyWFNMVEV4dGVuc2lvbnModHJhbnNmb3JtQ29udGV4dCk7CisKKyAgICAg
ICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3PjogWFNM
VCBwcm9jZXNzb3IgPHhzbDpzb3J0PiBhbGdvcml0aG0gb25seSBjb21wYXJlcyBieSBjb2RlIHBv
aW50CisgICAgICAgIHhzbHRTZXRDdHh0U29ydEZ1bmModHJhbnNmb3JtQ29udGV4dCwgeHNsdFVu
aWNvZGVTb3J0RnVuY3Rpb24pOworCisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGJ1ZyBpbiBsaWJ4c2x0LgorICAgICAgICAvLyBUaGUgYnVnIGhhcyBiZWVuIGZpeGVkIGlu
IHZlcnNpb24gMS4xLjEzLCBzbyBvbmNlIHdlIHNoaXAgdGhhdCB0aGlzIGNhbiBiZSByZW1vdmVk
LgorICAgICAgICBpZiAoIXRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMpCisgICAgICAgICAg
IHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPSB4bWxIYXNoQ3JlYXRlKDIwKTsKKworICAg
ICAgICBjb25zdCBjaGFyKiogcGFyYW1zID0geHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFw
KG1fcGFyYW1ldGVycyk7CisgICAgICAgIHhzbHRRdW90ZVVzZXJQYXJhbXModHJhbnNmb3JtQ29u
dGV4dCwgcGFyYW1zKTsKKyAgICAgICAgeG1sRG9jUHRyIHJlc3VsdERvYyA9IHhzbHRBcHBseVN0
eWxlc2hlZXRVc2VyKHNoZWV0LCBzb3VyY2VEb2MsIDAsIDAsIDAsIHRyYW5zZm9ybUNvbnRleHQp
OworCisgICAgICAgIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1Db250ZXh0KTsK
KyAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFtcyk7CisKKyAgICAgICAgaWYgKHNob3Vs
ZEZyZWVTb3VyY2VEb2MpCisgICAgICAgICAgICB4bWxGcmVlRG9jKHNvdXJjZURvYyk7CisKKyAg
ICAgICAgaWYgKHN1Y2Nlc3MgPSBzYXZlUmVzdWx0VG9TdHJpbmcocmVzdWx0RG9jLCBzaGVldCwg
cmVzdWx0U3RyaW5nKSkgeworICAgICAgICAgICAgbWltZVR5cGUgPSByZXN1bHRNSU1FVHlwZShy
ZXN1bHREb2MsIHNoZWV0KTsKKyAgICAgICAgICAgIHJlc3VsdEVuY29kaW5nID0gKGNoYXIqKXJl
c3VsdERvYy0+ZW5jb2Rpbmc7CisgICAgICAgIH0KKyAgICAgICAgeG1sRnJlZURvYyhyZXN1bHRE
b2MpOworICAgIH0KKworICAgIHNoZWV0LT5tZXRob2QgPSBvcmlnTWV0aG9kOworICAgIHNldFhT
TFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAgeHNsdEZyZWVTdHlsZXNoZWV0KHNoZWV0KTsK
KyAgICBtX3N0eWxlc2hlZXQgPSAwOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShYU0xUKQotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="19044"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19181"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34852</attachid>
            <date>2009-08-14 10:07:21 -0700</date>
            <delta_ts>2009-08-18 12:01:59 -0700</delta_ts>
            <desc>Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.</desc>
            <filename>0001-Rename-XSLStyleSheet.cpp-to-XSLStyleSheetLibxslt.cpp.patch</filename>
            <type>text/plain</type>
            <size>29986</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBlN2M5MDI4NDg1NDMxMjgxYTAxMjkzNTJhYjI1NzMwODZjMjI3Y2UzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTU6MDY6MDEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBSZW5h
bWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwLgogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgpJbiBwcmVwYXJhdGlvbiBm
b3IgYWRkaW5nIFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0CnBvcnQs
IHJlbmFtZSBYU0xTdHlsZVNoZWV0LmNwcCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgYXMg
d2Ugd2lsbApoYXZlIG91ciBvd24gaW1wbGVtZW50YXRpb24gd2hpY2ggbW9zdCBsaWtlbHkgd2ls
bCBub3Qgc2hhcmUgYW55IGNvZGUKd2l0aCB0aGUgY3VycmVudCBvbmUuCgpBZGRpdGlvbmFsbHks
IGZpeCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICB8ICAgMjIgKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAg
ICAgICAgICAgIHwgICAgNCArLQogV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAg
ICB8ICAgIDIgKy0KIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogfCAgICAy
ICstCiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCAgICAgICAgICAgIHwgICAgMiArLQogV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAgICAgICAgICB8ICAzMTIgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggICAgICAgICAg
IHwgIDEyMCArKysrKysrLS0tLS0tLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQu
Y3BwICB8ICAzMTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNo
YW5nZWQsIDM5OSBpbnNlcnRpb25zKCspLCAzNzcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDViNTY3OGEuLjMyZWUzZDkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0y
LDYgKzIsMjggQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAg
ICAgICBSZW5hbWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3Bw
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMK
KworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIFhTTFQgc3VwcG9ydCB3aXRoIFF0
WG1sUGF0dGVybnMgdG8gdGhlIFF0CisgICAgICAgIHBvcnQsIHJlbmFtZSBYU0xTdHlsZVNoZWV0
LmNwcCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgYXMgd2Ugd2lsbAorICAgICAgICBoYXZl
IG91ciBvd24gaW1wbGVtZW50YXRpb24gd2hpY2ggbW9zdCBsaWtlbHkgd2lsbCBub3Qgc2hhcmUg
YW55IGNvZGUKKyAgICAgICAgd2l0aCB0aGUgY3VycmVudCBvbmUuCisKKyAgICAgICAgQWRkaXRp
b25hbGx5LCBmaXggc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAg
ICAgKiB4bWwvWFNMU3R5bGVTaGVldC5jcHA6IFJlbmFtZWQgdG8gWFNMU3R5bGVTaGVldExpYnhz
bHQuY3BwLgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0Lmg6IEZpeCBpbmRlbnRhdGlvbi4K
KyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwOiBBZGRlZC4KKworMjAwOS0w
OC0xNCAgSmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBNb3ZlIHRoZSBsaWJ4c2x0IHNwZWNp
ZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRlIGZpbGUuCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAx
OTc5ZGZhLi45NWE2YzkyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTExNzUsNyArMTE3NSw3IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcCBcCiAJV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkU2NyaXB0LmggXAogCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50
LmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIFwKKwlXZWJDb3Jl
L2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgXAogCVdlYkNvcmUvbG9hZGVy
L0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmggXApAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgZW5kaWYgIyBFTkQgRU5BQkxFX05PVElGSUNBVElP
TlMKIGlmIEVOQUJMRV9TVkcKIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9T
Vkc9MQogCi1XRUJDT1JFX0NTU19QUk9QRVJUWV9OQU1FUyArPSAkKFdlYkNvcmUpL2Nzcy9TVkdD
U1NQcm9wZXJ0eU5hbWVzLmluIAorV0VCQ09SRV9DU1NfUFJPUEVSVFlfTkFNRVMgKz0gJChXZWJD
b3JlKS9jc3MvU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbgogV0VCQ09SRV9DU1NfVkFMVUVfS0VZV09S
RFMgKz0gJChXZWJDb3JlKS9jc3MvU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5pbgogCiB3ZWJjb3JlX2J1
aWx0X3NvdXJjZXMgKz0gXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0OGMwOTRjLi5hYTljYzc4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQwNyw3ICsz
NDA3LDcgQEAKICAgICAgICAgICAgICd4bWwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oJywKICAg
ICAgICAgICAgICd4bWwvWFNMSW1wb3J0UnVsZS5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xJ
bXBvcnRSdWxlLmgnLAotICAgICAgICAgICAgJ3htbC9YU0xTdHlsZVNoZWV0LmNwcCcsCisgICAg
ICAgICAgICAneG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCcsCiAgICAgICAgICAgICAneG1s
L1hTTFN0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25zLmNwcCcs
CiAgICAgICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25zLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggNWIyYzdkMi4uNjk0NTIxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMzU0MCw3ICsyMzU0MCw3IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYU0xTdHlsZVNoZWV0
LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMU3R5bGVTaGVldExpYnhzbHQuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCBkYjE3
Nzg1Li43NTM2ZDY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysg
Yi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtMTA2NSw3ICsxMDY1LDcgQEAgVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgog
ICAgICAgICB4bWwvWFBhdGhWYWx1ZS5jcHAKICAgICAgICAgeG1sL1hQYXRoVmFyaWFibGVSZWZl
cmVuY2UuY3BwCiAgICAgICAgIHhtbC9YU0xJbXBvcnRSdWxlLmNwcAotICAgICAgICB4bWwvWFNM
U3R5bGVTaGVldC5jcHAKKyAgICAgICAgeG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAogICAg
ICAgICB4bWwvWFNMVEV4dGVuc2lvbnMuY3BwCiAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQu
Y3BwCiAgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94
bWwvWFNMU3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkNTJmOC4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L3htbC9YU0xTdHlsZVNoZWV0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0v
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWFNMU3R5bGVTaGVl
dC5oIgotCi0jaWYgRU5BQkxFKFhTTFQpCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY0xvYWRl
ci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJOb2RlLmgiCi0jaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiWE1MVG9rZW5p
emVyU2NvcGUuaCIKLSNpbmNsdWRlICJYU0xJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiWFNMVFBy
b2Nlc3Nvci5oIgotI2luY2x1ZGUgImxvYWRlci5oIgotCi0jaW5jbHVkZSA8bGlieG1sL3VyaS5o
PgotI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0j
aW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotU09G
VF9MSU5LX0xJQlJBUlkobGlieHNsdCkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0SXNCbGFuaywg
aW50LCAoeG1sQ2hhciAqc3RyKSwgKHN0cikpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEdldE5z
UHJvcCwgeG1sQ2hhciAqLCAoeG1sTm9kZVB0ciBub2RlLCBjb25zdCB4bWxDaGFyICpuYW1lLCBj
b25zdCB4bWxDaGFyICpuYW1lU3BhY2UpLCAobm9kZSwgbmFtZSwgbmFtZVNwYWNlKSkKLVNPRlRf
TElOSyhsaWJ4c2x0LCB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciwg
KHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TG9hZFN0eWxl
c2hlZXRQSSwgeHNsdFN0eWxlc2hlZXRQdHIsICh4bWxEb2NQdHIgZG9jKSwgKGRvYykpCi0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1YU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0
KFhTTEltcG9ydFJ1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFN0cmluZyYgaHJlZikKLSAgICA6IFN0
eWxlU2hlZXQocGFyZW50UnVsZSwgaHJlZikKLSAgICAsIG1fb3duZXJEb2N1bWVudCgwKQotICAg
ICwgbV9zdHlsZXNoZWV0RG9jKDApCi0gICAgLCBtX2VtYmVkZGVkKGZhbHNlKQotICAgICwgbV9w
cm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBnZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3
aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxseSBzZWVuIHRoZW0uCi0gICAgLCBtX3N0
eWxlc2hlZXREb2NUYWtlbihmYWxzZSkKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQotewot
fQotCi1YU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0
IFN0cmluZyYgaHJlZiwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5v
ZGUsIGhyZWYpCi0gICAgLCBtX293bmVyRG9jdW1lbnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkK
LSAgICAsIG1fc3R5bGVzaGVldERvYygwKQotICAgICwgbV9lbWJlZGRlZChlbWJlZGRlZCkKLSAg
ICAsIG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRoZSByb290IHNoZWV0IHN0YXJ0cyBvZmYgcHJvY2Vz
c2VkLgotICAgICwgbV9zdHlsZXNoZWV0RG9jVGFrZW4oZmFsc2UpCi0gICAgLCBtX3BhcmVudFN0
eWxlU2hlZXQoMCkKLXsKLX0KLQotWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hlZXQoKQotewot
ICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCi0gICAgICAgIHhtbEZyZWVEb2MobV9zdHls
ZXNoZWV0RG9jKTsKLX0KLQotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQotewotICAg
IHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAgICBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGlt
cG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIGlm
IChpbXBvcnQtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBYU0xTdHlsZVNoZWV0
OjpjaGVja0xvYWRlZCgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKSAKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFyZW50KCktPmNoZWNrTG9hZGVkKCk7Ci0g
ICAgaWYgKG93bmVyTm9kZSgpKQotICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsK
LX0KLQoteG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6OmRvY3VtZW50KCkKLXsKLSAgICBpZiAobV9l
bWJlZGRlZCAmJiBvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAoeG1sRG9jUHRyKW93
bmVyRG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCk7Ci0gICAgcmV0dXJuIG1fc3R5bGVzaGVl
dERvYzsKLX0KLQotdm9pZCBYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCi17Ci0gICAg
bV9zdHlsZXNoZWV0RG9jID0gMDsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBy
dWxlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7Ci0gICAg
ICAgICAgICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxl
Kj4ocnVsZSk7Ci0gICAgICAgICAgICBpZiAoaW1wb3J0LT5zdHlsZVNoZWV0KCkpCi0gICAgICAg
ICAgICAgICAgaW1wb3J0LT5zdHlsZVNoZWV0KCktPmNsZWFyRG9jdW1lbnRzKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLURvY0xvYWRlciogWFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkKLXsK
LSAgICBpZiAoIW1fb3duZXJEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCk7Ci19Ci0KLWJvb2wgWFNMU3R5bGVTaGVldDo6
cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wpCi17Ci0gICAgLy8gUGFyc2Ug
aW4gYSBzaW5nbGUgY2h1bmsgaW50byBhbiB4bWxEb2NQdHIKLSAgICBjb25zdCBVQ2hhciBCT00g
PSAweEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICBpZiAoIW1fc3R5bGVz
aGVldERvY1Rha2VuKQotICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVldERvYyk7Ci0gICAg
bV9zdHlsZXNoZWV0RG9jVGFrZW4gPSBmYWxzZTsKLQotICAgIENvbnNvbGUqIGNvbnNvbGUgPSAw
OwotICAgIGlmIChGcmFtZSogZnJhbWUgPSBvd25lckRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAg
ICAgIGNvbnNvbGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKLQotICAgIFhNTFRv
a2VuaXplclNjb3BlIHNjb3BlKGRvY0xvYWRlcigpLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJy
b3JGdW5jLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYywgY29uc29sZSk7Ci0KLSAgICBj
b25zdCBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcu
Y2hhcmFjdGVycygpKTsKLSAgICBpbnQgc2l6ZSA9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihV
Q2hhcik7Ci0KLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSB4bWxDcmVhdGVNZW1vcnlQYXJz
ZXJDdHh0KGJ1ZmZlciwgc2l6ZSk7Ci0KLSAgICBpZiAobV9wYXJlbnRTdHlsZVNoZWV0KSB7Ci0g
ICAgICAgIC8vIFRoZSBYU0wgdHJhbnNmb3JtIG1heSBsZWF2ZSB0aGUgbmV3bHktdHJhbnNmb3Jt
ZWQgZG9jdW1lbnQKLSAgICAgICAgLy8gd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzeW1ib2wgZGlj
dGlvbmFyaWVzIG9mIHRoZSBzdHlsZSBzaGVldAotICAgICAgICAvLyBhbmQgYW55IG9mIGl0cyBj
aGlsZHJlbi4gWE1MIGRvY3VtZW50IGRpc3Bvc2FsIGNhbiBjb3JydXB0IG1lbW9yeQotICAgICAg
ICAvLyBpZiBhIGRvY3VtZW50IHVzZXMgbW9yZSB0aGFuIG9uZSBzeW1ib2wgZGljdGlvbmFyeSwg
c28gd2UKLSAgICAgICAgLy8gZW5zdXJlIHRoYXQgYWxsIGNoaWxkIHN0eWxlc2hlZXRzIHVzZSB0
aGUgc2FtZSBkaWN0aW9uYXJpZXMgYXMgdGhlaXIKLSAgICAgICAgLy8gcGFyZW50cy4KLSAgICAg
ICAgeG1sRGljdEZyZWUoY3R4dC0+ZGljdCk7Ci0gICAgICAgIGN0eHQtPmRpY3QgPSBtX3BhcmVu
dFN0eWxlU2hlZXQtPm1fc3R5bGVzaGVldERvYy0+ZGljdDsKLSAgICAgICAgeG1sRGljdFJlZmVy
ZW5jZShjdHh0LT5kaWN0KTsKLSAgICB9Ci0KLSAgICBtX3N0eWxlc2hlZXREb2MgPSB4bWxDdHh0
UmVhZE1lbW9yeShjdHh0LCBidWZmZXIsIHNpemUsCi0gICAgICAgIGhyZWYoKS51dGY4KCkuZGF0
YSgpLAotICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZC
RSIsIAotICAgICAgICBYTUxfUEFSU0VfTk9FTlQgfCBYTUxfUEFSU0VfRFREQVRUUiB8IFhNTF9Q
QVJTRV9OT1dBUk5JTkcgfCBYTUxfUEFSU0VfTk9DREFUQSk7Ci0gICAgeG1sRnJlZVBhcnNlckN0
eHQoY3R4dCk7Ci0KLSAgICBsb2FkQ2hpbGRTaGVldHMoKTsKLQotICAgIHJldHVybiBtX3N0eWxl
c2hlZXREb2M7Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKLXsK
LSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB4bWxOb2Rl
UHRyIHN0eWxlc2hlZXRSb290ID0gZG9jdW1lbnQoKS0+Y2hpbGRyZW47Ci0gICAgCi0gICAgLy8g
VG9wIGxldmVsIGNoaWxkcmVuIG1heSBpbmNsdWRlIG90aGVyIHRoaW5ncyBzdWNoIGFzIERURCBu
b2Rlcywgd2UgaWdub3JlIHRob3NlLgotICAgIHdoaWxlIChzdHlsZXNoZWV0Um9vdCAmJiBzdHls
ZXNoZWV0Um9vdC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFKQotICAgICAgICBzdHlsZXNoZWV0
Um9vdCA9IHN0eWxlc2hlZXRSb290LT5uZXh0OwotICAgIAotICAgIGlmIChtX2VtYmVkZGVkKSB7
Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gbG9jYXRlIChieSBJRCkgdGhlIGFwcHJvcHJpYXRlIGVt
YmVkZGVkIHN0eWxlc2hlZXQgZWxlbWVudCwgc28gdGhhdCB3ZSBjYW4gd2FsayB0aGUgCi0gICAg
ICAgIC8vIGltcG9ydC9pbmNsdWRlIGxpc3QuCi0gICAgICAgIHhtbEF0dHJQdHIgaWROb2RlID0g
eG1sR2V0SUQoZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVmKCkudXRmOCgpLmRhdGEo
KSkpOwotICAgICAgICBpZiAoIWlkTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
c3R5bGVzaGVldFJvb3QgPSBpZE5vZGUtPnBhcmVudDsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byBoYW5kbGUgYW4gZXh0ZXJuYWwgVVJJIHdpdGggYSAjIGluIGl0LiAg
VGhpcyBpcyBhIHByZXR0eSBtaW5vciBlZGdlIGNhc2UsIHNvIHdlJ2xsIGRlYWwKLSAgICAgICAg
Ly8gd2l0aCBpdCBsYXRlci4KLSAgICB9Ci0gICAgCi0gICAgaWYgKHN0eWxlc2hlZXRSb290KSB7
Ci0gICAgICAgIC8vIFdhbGsgdGhlIGNoaWxkcmVuIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIGxv
b2sgZm9yIGltcG9ydC9pbmNsdWRlIGVsZW1lbnRzLgotICAgICAgICAvLyBJbXBvcnRzIG11c3Qg
b2NjdXIgZmlyc3QuCi0gICAgICAgIHhtbE5vZGVQdHIgY3VyciA9IHN0eWxlc2hlZXRSb290LT5j
aGlsZHJlbjsKLSAgICAgICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT50
eXBlICE9IFhNTF9FTEVNRU5UX05PREUpIHsKLSAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+
bmV4dDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQi
KSkgewotICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3Vy
ciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOyAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25z
dCBjaGFyKil1cmlSZWYpKTsKLSAgICAgICAgICAgICAgICB4bWxGcmVlKHVyaVJlZik7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGN1cnIg
PSBjdXJyLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93IGhhbmRsZSBpbmNsdWRl
cy4KLSAgICAgICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT50eXBlID09
IFhNTF9FTEVNRU5UX05PREUgJiYgSVNfWFNMVF9FTEVNKGN1cnIpICYmIElTX1hTTFRfTkFNRShj
dXJyLCAiaW5jbHVkZSIpKSB7Ci0gICAgICAgICAgICAgICAgeG1sQ2hhciogdXJpUmVmID0geHNs
dEdldE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7
Ci0gICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3Qg
Y2hhciopdXJpUmVmKSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBo
cmVmKQotewotICAgIFJlZlB0cjxYU0xJbXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBYU0xJbXBvcnRS
dWxlOjpjcmVhdGUodGhpcywgaHJlZik7Ci0gICAgYXBwZW5kKGNoaWxkUnVsZSk7Ci0gICAgY2hp
bGRSdWxlLT5sb2FkU2hlZXQoKTsKLX0KLQoteHNsdFN0eWxlc2hlZXRQdHIgWFNMU3R5bGVTaGVl
dDo6Y29tcGlsZVN0eWxlU2hlZXQoKQotewotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIHJl
cG9ydGluZyBmb3IgdGhlIHN0eWxlc2hlZXQgY29tcGlsYXRpb24gcHJvY2Vzcy4KLSAgICBpZiAo
bV9lbWJlZGRlZCkKLSAgICAgICAgcmV0dXJuIHhzbHRMb2FkU3R5bGVzaGVldFBJKGRvY3VtZW50
KCkpOwotICAgIAotICAgIC8vIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MgbWFrZXMgdGhlIGRvY3Vt
ZW50IHBhcnQgb2YgdGhlIHN0eWxlc2hlZXQKLSAgICAvLyBzbyB3ZSBoYXZlIHRvIHJlbGVhc2Ug
b3VyIHBvaW50ZXIgdG8gaXQuCi0gICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7Ci0g
ICAgeHNsdFN0eWxlc2hlZXRQdHIgcmVzdWx0ID0geHNsdFBhcnNlU3R5bGVzaGVldERvYyhtX3N0
eWxlc2hlZXREb2MpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIG1fc3R5bGVzaGVldERvY1Rh
a2VuID0gdHJ1ZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6
OnNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KQotewotICAgIG1fcGFy
ZW50U3R5bGVTaGVldCA9IHBhcmVudDsKLSAgICBpZiAocGFyZW50KQotICAgICAgICBtX293bmVy
RG9jdW1lbnQgPSBwYXJlbnQtPm93bmVyRG9jdW1lbnQoKTsKLX0KLQoteG1sRG9jUHRyIFhTTFN0
eWxlU2hlZXQ6OmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9j
LCBjb25zdCB4bWxDaGFyKiB1cmkpCi17Ci0gICAgYm9vbCBtYXRjaGVkUGFyZW50ID0gKHBhcmVu
dERvYyA9PSBkb2N1bWVudCgpKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBy
dWxlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7Ci0gICAg
ICAgICAgICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxl
Kj4ocnVsZSk7Ci0gICAgICAgICAgICBYU0xTdHlsZVNoZWV0KiBjaGlsZCA9IGltcG9ydC0+c3R5
bGVTaGVldCgpOwotICAgICAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaGVkUGFyZW50KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNoaWxkLT5wcm9jZXNzZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8v
IGxpYnhzbHQgaGFzIGJlZW4gZ2l2ZW4gdGhpcyBzaGVldCBhbHJlYWR5LgotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBVUkkgb2YgdGhlIGNoaWxkIHN0eWxl
c2hlZXQgYWdhaW5zdCB0aGUgZG9jIFVSSS4KLSAgICAgICAgICAgICAgICAvLyBJbiBvcmRlciB0
byBlbnN1cmUgdGhhdCBsaWJ4bWwgY2Fub25pY2FsaXplZCBib3RoIFVSTHMsIHdlIGdldCB0aGUg
b3JpZ2luYWwgaHJlZgotICAgICAgICAgICAgICAgIC8vIHN0cmluZyBmcm9tIHRoZSBpbXBvcnQg
cnVsZSBhbmQgY2Fub25pY2FsaXplIGl0IHVzaW5nIGxpYnhtbCBiZWZvcmUgY29tcGFyaW5nIGl0
Ci0gICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgVVJJIGFyZ3VtZW50LgotICAgICAgICAgICAg
ICAgIENTdHJpbmcgaW1wb3J0SHJlZiA9IGltcG9ydC0+aHJlZigpLnV0ZjgoKTsKLSAgICAgICAg
ICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UocGFyZW50RG9jLCAoeG1sTm9k
ZVB0cilwYXJlbnREb2MpOwotICAgICAgICAgICAgICAgIHhtbENoYXIqIGNoaWxkVVJJID0geG1s
QnVpbGRVUkkoKGNvbnN0IHhtbENoYXIqKWltcG9ydEhyZWYuZGF0YSgpLCBiYXNlKTsKLSAgICAg
ICAgICAgICAgICBib29sIGVxdWFsVVJJcyA9IHhtbFN0ckVxdWFsKHVyaSwgY2hpbGRVUkkpOwot
ICAgICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJlZShj
aGlsZFVSSSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsVVJJcykgewotICAgICAgICAgICAg
ICAgICAgICBjaGlsZC0+bWFya0FzUHJvY2Vzc2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjaGlsZC0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHhtbERvY1B0ciByZXN1bHQgPSBpbXBvcnQtPnN0eWxl
U2hlZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHBhcmVudERvYywgdXJpKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAw
OwotfQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6Om1hcmtBc1Byb2Nlc3NlZCgpCi17Ci0gICAgQVNT
RVJUKCFtX3Byb2Nlc3NlZCk7Ci0gICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7Ci0g
ICAgbV9wcm9jZXNzZWQgPSB0cnVlOwotICAgIG1fc3R5bGVzaGVldERvY1Rha2VuID0gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFhTTFQpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggYi9XZWJDb3JlL3htbC9YU0xT
dHlsZVNoZWV0LmgKaW5kZXggZmU5N2I1NC4uZWVmMmZkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS94
bWwvWFNMU3R5bGVTaGVldC5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaApAQCAt
MzIsNjYgKzMyLDY2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jTG9hZGVy
OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBYU0xJbXBvcnRSdWxlOwotICAgIAotY2xhc3MgWFNM
U3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBjcmVhdGUoWFNMSW1wb3J0UnVsZSogcGFyZW50SW1wb3J0
LCBjb25zdCBTdHJpbmcmIGhyZWYpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFhTTFN0eWxlU2hlZXQocGFyZW50SW1wb3J0LCBocmVmKSk7Ci0gICAgfQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBT
dHJpbmcmIGhyZWYpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxl
U2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgZmFsc2UpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlRW1iZWRkZWQoTm9kZSogcGFyZW50Tm9kZSwgY29u
c3QgU3RyaW5nJiBocmVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xT
dHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIHRydWUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IH5YU0xTdHlsZVNoZWV0KCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBj
b25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzTG9hZGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja0xvYWRlZCgp
OwotCi0gICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMoKTsKLSAgICB2b2lkIGxvYWRDaGlsZFNoZWV0
KGNvbnN0IFN0cmluZyYgaHJlZik7Ci0KLSAgICB4c2x0U3R5bGVzaGVldFB0ciBjb21waWxlU3R5
bGVTaGVldCgpOwotCi0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsKLQotICAgIERvY3VtZW50
KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25lckRvY3VtZW50OyB9Ci0gICAgdm9pZCBz
ZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7Ci0KLSAgICB4bWxEb2NQ
dHIgZG9jdW1lbnQoKTsKLQotICAgIHZvaWQgY2xlYXJEb2N1bWVudHMoKTsKLQotICAgIHhtbERv
Y1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9jUHRyIHBhcmVudERvYywgY29u
c3QgeG1sQ2hhciogdXJpKTsKLSAgICAKLSAgICB2b2lkIG1hcmtBc1Byb2Nlc3NlZCgpOwotICAg
IGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7IH0KLQotcHJpdmF0
ZToKLSAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgYm9vbCBlbWJlZGRlZCk7Ci0gICAgWFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJl
bnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZik7Ci0KLSAgICBEb2N1bWVudCogbV9vd25lckRv
Y3VtZW50OwotICAgIHhtbERvY1B0ciBtX3N0eWxlc2hlZXREb2M7Ci0gICAgYm9vbCBtX2VtYmVk
ZGVkOwotICAgIGJvb2wgbV9wcm9jZXNzZWQ7Ci0gICAgYm9vbCBtX3N0eWxlc2hlZXREb2NUYWtl
bjsKLSAgICBYU0xTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQ7Ci19OworICAgIGNsYXNz
IERvY0xvYWRlcjsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBYU0xJbXBvcnRSdWxl
OworCisgICAgY2xhc3MgWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShY
U0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudElt
cG9ydCwgaHJlZikpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0
eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChw
YXJlbnROb2RlLCBocmVmLCBmYWxzZSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZUVtYmVkZGVkKE5vZGUqIHBhcmVudE5vZGUsIGNv
bnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIHRydWUpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgflhTTFN0eWxlU2hlZXQoKTsKKworICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9CisKKyAgICAg
ICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0
cmljdCA9IHRydWUpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CisKKyAgICAgICAgdm9pZCBsb2FkQ2hpbGRT
aGVldHMoKTsKKyAgICAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYp
OworCisgICAgICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7CisKKyAg
ICAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsKKworICAgICAgICBEb2N1bWVudCogb3duZXJE
b2N1bWVudCgpIHsgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsgfQorICAgICAgICB2b2lkIHNldFBh
cmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KTsKKworICAgICAgICB4bWxEb2NQ
dHIgZG9jdW1lbnQoKTsKKworICAgICAgICB2b2lkIGNsZWFyRG9jdW1lbnRzKCk7CisKKyAgICAg
ICAgeG1sRG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50
RG9jLCBjb25zdCB4bWxDaGFyKiB1cmkpOworCisgICAgICAgIHZvaWQgbWFya0FzUHJvY2Vzc2Vk
KCk7CisgICAgICAgIGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9k
ZSwgY29uc3QgU3RyaW5nJiBocmVmLCBib29sIGVtYmVkZGVkKTsKKyAgICAgICAgWFNMU3R5bGVT
aGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZik7CisK
KyAgICAgICAgRG9jdW1lbnQqIG1fb3duZXJEb2N1bWVudDsKKyAgICAgICAgeG1sRG9jUHRyIG1f
c3R5bGVzaGVldERvYzsKKyAgICAgICAgYm9vbCBtX2VtYmVkZGVkOworICAgICAgICBib29sIG1f
cHJvY2Vzc2VkOworICAgICAgICBib29sIG1fc3R5bGVzaGVldERvY1Rha2VuOworICAgICAgICBY
U0xTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQ7CisgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNs
dC5jcHAgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyNzUzZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIK
KworI2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNv
bnNvbGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplclNj
b3BlLmgiCisjaW5jbHVkZSAiWFNMSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIlhTTFRQcm9jZXNz
b3IuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKworI2luY2x1ZGUgPGxpYnhtbC91cmkuaD4KKyNp
bmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGlscy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1
ZGUgIlNvZnRMaW5raW5nLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKK1NPRlRfTElO
S19MSUJSQVJZKGxpYnhzbHQpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdElzQmxhbmssIGludCwg
KHhtbENoYXIgKnN0ciksIChzdHIpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRHZXROc1Byb3As
IHhtbENoYXIgKiwgKHhtbE5vZGVQdHIgbm9kZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwgY29uc3Qg
eG1sQ2hhciAqbmFtZVNwYWNlKSwgKG5vZGUsIG5hbWUsIG5hbWVTcGFjZSkpCitTT0ZUX0xJTkso
bGlieHNsdCwgeHNsdFBhcnNlU3R5bGVzaGVldERvYywgeHNsdFN0eWxlc2hlZXRQdHIsICh4bWxE
b2NQdHIgZG9jKSwgKGRvYykpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdExvYWRTdHlsZXNoZWV0
UEksIHhzbHRTdHlsZXNoZWV0UHRyLCAoeG1sRG9jUHRyIGRvYyksIChkb2MpKQorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChYU0xJ
bXBvcnRSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBTdHJpbmcmIGhyZWYpCisgICAgOiBTdHlsZVNo
ZWV0KHBhcmVudFJ1bGUsIGhyZWYpCisgICAgLCBtX293bmVyRG9jdW1lbnQoMCkKKyAgICAsIG1f
c3R5bGVzaGVldERvYygwKQorICAgICwgbV9lbWJlZGRlZChmYWxzZSkKKyAgICAsIG1fcHJvY2Vz
c2VkKGZhbHNlKSAvLyBDaGlsZCBzaGVldHMgZ2V0IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hlbiB0
aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkgc2VlbiB0aGVtLgorICAgICwgbV9zdHlsZXNo
ZWV0RG9jVGFrZW4oZmFsc2UpCisgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKK3sKK30KKwor
WFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJp
bmcmIGhyZWYsICBib29sIGVtYmVkZGVkKQorICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBo
cmVmKQorICAgICwgbV9vd25lckRvY3VtZW50KHBhcmVudE5vZGUtPmRvY3VtZW50KCkpCisgICAg
LCBtX3N0eWxlc2hlZXREb2MoMCkKKyAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQpCisgICAgLCBt
X3Byb2Nlc3NlZCh0cnVlKSAvLyBUaGUgcm9vdCBzaGVldCBzdGFydHMgb2ZmIHByb2Nlc3NlZC4K
KyAgICAsIG1fc3R5bGVzaGVldERvY1Rha2VuKGZhbHNlKQorICAgICwgbV9wYXJlbnRTdHlsZVNo
ZWV0KDApCit7Cit9CisKK1hTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KCkKK3sKKyAgICBp
ZiAoIW1fc3R5bGVzaGVldERvY1Rha2VuKQorICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVl
dERvYyk7Cit9CisKK2Jvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKK3sKKyAgICB1bnNp
Z25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyAr
K2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBydWxlID0gaXRlbShpKTsKKyAgICAgICAgaWYgKHJ1
bGUtPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAgICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQg
PSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4ocnVsZSk7CisgICAgICAgICAgICBpZiAoaW1w
b3J0LT5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6Y2hl
Y2tMb2FkZWQoKQoreworICAgIGlmIChpc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChwYXJlbnQoKSkKKyAgICAgICAgcGFyZW50KCktPmNoZWNrTG9hZGVkKCk7CisgICAgaWYg
KG93bmVyTm9kZSgpKQorICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsKK30KKwor
eG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK3sKKyAgICBpZiAobV9lbWJlZGRl
ZCAmJiBvd25lckRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAoeG1sRG9jUHRyKW93bmVyRG9j
dW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCk7CisgICAgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsK
K30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCit7CisgICAgbV9zdHls
ZXNoZWV0RG9jID0gMDsKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBydWxlID0g
aXRlbShpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAg
ICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4ocnVs
ZSk7CisgICAgICAgICAgICBpZiAoaW1wb3J0LT5zdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAg
ICAgaW1wb3J0LT5zdHlsZVNoZWV0KCktPmNsZWFyRG9jdW1lbnRzKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK0RvY0xvYWRlciogWFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkKK3sKKyAgICBp
ZiAoIW1fb3duZXJEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fb3du
ZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCk7Cit9CisKK2Jvb2wgWFNMU3R5bGVTaGVldDo6cGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wpCit7CisgICAgLy8gUGFyc2UgaW4gYSBz
aW5nbGUgY2h1bmsgaW50byBhbiB4bWxEb2NQdHIKKyAgICBjb25zdCBVQ2hhciBCT00gPSAweEZF
RkY7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKKyAgICBpZiAoIW1fc3R5bGVzaGVldERv
Y1Rha2VuKQorICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVldERvYyk7CisgICAgbV9zdHls
ZXNoZWV0RG9jVGFrZW4gPSBmYWxzZTsKKworICAgIENvbnNvbGUqIGNvbnNvbGUgPSAwOworICAg
IGlmIChGcmFtZSogZnJhbWUgPSBvd25lckRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIGNv
bnNvbGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKKworICAgIFhNTFRva2VuaXpl
clNjb3BlIHNjb3BlKGRvY0xvYWRlcigpLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5j
LCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYywgY29uc29sZSk7CisKKyAgICBjb25zdCBj
aGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcuY2hhcmFj
dGVycygpKTsKKyAgICBpbnQgc2l6ZSA9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7
CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSB4bWxDcmVhdGVNZW1vcnlQYXJzZXJDdHh0
KGJ1ZmZlciwgc2l6ZSk7CisKKyAgICBpZiAobV9wYXJlbnRTdHlsZVNoZWV0KSB7CisgICAgICAg
IC8vIFRoZSBYU0wgdHJhbnNmb3JtIG1heSBsZWF2ZSB0aGUgbmV3bHktdHJhbnNmb3JtZWQgZG9j
dW1lbnQKKyAgICAgICAgLy8gd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzeW1ib2wgZGljdGlvbmFy
aWVzIG9mIHRoZSBzdHlsZSBzaGVldAorICAgICAgICAvLyBhbmQgYW55IG9mIGl0cyBjaGlsZHJl
bi4gWE1MIGRvY3VtZW50IGRpc3Bvc2FsIGNhbiBjb3JydXB0IG1lbW9yeQorICAgICAgICAvLyBp
ZiBhIGRvY3VtZW50IHVzZXMgbW9yZSB0aGFuIG9uZSBzeW1ib2wgZGljdGlvbmFyeSwgc28gd2UK
KyAgICAgICAgLy8gZW5zdXJlIHRoYXQgYWxsIGNoaWxkIHN0eWxlc2hlZXRzIHVzZSB0aGUgc2Ft
ZSBkaWN0aW9uYXJpZXMgYXMgdGhlaXIKKyAgICAgICAgLy8gcGFyZW50cy4KKyAgICAgICAgeG1s
RGljdEZyZWUoY3R4dC0+ZGljdCk7CisgICAgICAgIGN0eHQtPmRpY3QgPSBtX3BhcmVudFN0eWxl
U2hlZXQtPm1fc3R5bGVzaGVldERvYy0+ZGljdDsKKyAgICAgICAgeG1sRGljdFJlZmVyZW5jZShj
dHh0LT5kaWN0KTsKKyAgICB9CisKKyAgICBtX3N0eWxlc2hlZXREb2MgPSB4bWxDdHh0UmVhZE1l
bW9yeShjdHh0LCBidWZmZXIsIHNpemUsCisgICAgICAgIGhyZWYoKS51dGY4KCkuZGF0YSgpLAor
ICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIsCisg
ICAgICAgIFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERBVFRSIHwgWE1MX1BBUlNFX05P
V0FSTklORyB8IFhNTF9QQVJTRV9OT0NEQVRBKTsKKyAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0
KTsKKworICAgIGxvYWRDaGlsZFNoZWV0cygpOworCisgICAgcmV0dXJuIG1fc3R5bGVzaGVldERv
YzsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgeG1sTm9kZVB0ciBzdHlsZXNo
ZWV0Um9vdCA9IGRvY3VtZW50KCktPmNoaWxkcmVuOworCisgICAgLy8gVG9wIGxldmVsIGNoaWxk
cmVuIG1heSBpbmNsdWRlIG90aGVyIHRoaW5ncyBzdWNoIGFzIERURCBub2Rlcywgd2UgaWdub3Jl
IHRob3NlLgorICAgIHdoaWxlIChzdHlsZXNoZWV0Um9vdCAmJiBzdHlsZXNoZWV0Um9vdC0+dHlw
ZSAhPSBYTUxfRUxFTUVOVF9OT0RFKQorICAgICAgICBzdHlsZXNoZWV0Um9vdCA9IHN0eWxlc2hl
ZXRSb290LT5uZXh0OworCisgICAgaWYgKG1fZW1iZWRkZWQpIHsKKyAgICAgICAgLy8gV2UgaGF2
ZSB0byBsb2NhdGUgKGJ5IElEKSB0aGUgYXBwcm9wcmlhdGUgZW1iZWRkZWQgc3R5bGVzaGVldCBl
bGVtZW50LCBzbyB0aGF0IHdlIGNhbiB3YWxrIHRoZQorICAgICAgICAvLyBpbXBvcnQvaW5jbHVk
ZSBsaXN0LgorICAgICAgICB4bWxBdHRyUHRyIGlkTm9kZSA9IHhtbEdldElEKGRvY3VtZW50KCks
IChjb25zdCB4bWxDaGFyKikoaHJlZigpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgaWYgKCFp
ZE5vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0eWxlc2hlZXRSb290ID0gaWRO
b2RlLT5wYXJlbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaGFu
ZGxlIGFuIGV4dGVybmFsIFVSSSB3aXRoIGEgIyBpbiBpdC4gIFRoaXMgaXMgYSBwcmV0dHkgbWlu
b3IgZWRnZSBjYXNlLCBzbyB3ZSdsbCBkZWFsCisgICAgICAgIC8vIHdpdGggaXQgbGF0ZXIuCisg
ICAgfQorCisgICAgaWYgKHN0eWxlc2hlZXRSb290KSB7CisgICAgICAgIC8vIFdhbGsgdGhlIGNo
aWxkcmVuIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIGxvb2sgZm9yIGltcG9ydC9pbmNsdWRlIGVs
ZW1lbnRzLgorICAgICAgICAvLyBJbXBvcnRzIG11c3Qgb2NjdXIgZmlyc3QuCisgICAgICAgIHht
bE5vZGVQdHIgY3VyciA9IHN0eWxlc2hlZXRSb290LT5jaGlsZHJlbjsKKyAgICAgICAgd2hpbGUg
KGN1cnIpIHsKKyAgICAgICAgICAgIGlmIChjdXJyLT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUp
IHsKKyAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChJU19YU0xUX0VMRU0oY3Vy
cikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQiKSkgeworICAgICAgICAgICAgICAgIHht
bENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVm
IiwgWFNMVF9OQU1FU1BBQ0UpOworICAgICAgICAgICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmlu
Zzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVyaVJlZikpOworICAgICAgICAgICAgICAgIHhtbEZy
ZWUodXJpUmVmKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBO
b3cgaGFuZGxlIGluY2x1ZGVzLgorICAgICAgICB3aGlsZSAoY3VycikgeworICAgICAgICAgICAg
aWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSAmJiBJU19YU0xUX0VMRU0oY3Vycikg
JiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbmNsdWRlIikpIHsKKyAgICAgICAgICAgICAgICB4bWxD
aGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1cnIsIChjb25zdCB4bWxDaGFyKikiaHJlZiIs
IFhTTFRfTkFNRVNQQUNFKTsKKyAgICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVldChTdHJpbmc6
OmZyb21VVEY4KChjb25zdCBjaGFyKil1cmlSZWYpKTsKKyAgICAgICAgICAgICAgICB4bWxGcmVl
KHVyaVJlZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVl
dChjb25zdCBTdHJpbmcmIGhyZWYpCit7CisgICAgUmVmUHRyPFhTTEltcG9ydFJ1bGU+IGNoaWxk
UnVsZSA9IFhTTEltcG9ydFJ1bGU6OmNyZWF0ZSh0aGlzLCBocmVmKTsKKyAgICBhcHBlbmQoY2hp
bGRSdWxlKTsKKyAgICBjaGlsZFJ1bGUtPmxvYWRTaGVldCgpOworfQorCit4c2x0U3R5bGVzaGVl
dFB0ciBYU0xTdHlsZVNoZWV0Ojpjb21waWxlU3R5bGVTaGVldCgpCit7CisgICAgLy8gRklYTUU6
IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGUgc3R5bGVzaGVldCBjb21waWxhdGlvbiBw
cm9jZXNzLgorICAgIGlmIChtX2VtYmVkZGVkKQorICAgICAgICByZXR1cm4geHNsdExvYWRTdHls
ZXNoZWV0UEkoZG9jdW1lbnQoKSk7CisKKyAgICAvLyB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jIG1h
a2VzIHRoZSBkb2N1bWVudCBwYXJ0IG9mIHRoZSBzdHlsZXNoZWV0CisgICAgLy8gc28gd2UgaGF2
ZSB0byByZWxlYXNlIG91ciBwb2ludGVyIHRvIGl0LgorICAgIEFTU0VSVCghbV9zdHlsZXNoZWV0
RG9jVGFrZW4pOworICAgIHhzbHRTdHlsZXNoZWV0UHRyIHJlc3VsdCA9IHhzbHRQYXJzZVN0eWxl
c2hlZXREb2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBtX3N0
eWxlc2hlZXREb2NUYWtlbiA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBY
U0xTdHlsZVNoZWV0OjpzZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCkK
K3sKKyAgICBtX3BhcmVudFN0eWxlU2hlZXQgPSBwYXJlbnQ7CisgICAgaWYgKHBhcmVudCkKKyAg
ICAgICAgbV9vd25lckRvY3VtZW50ID0gcGFyZW50LT5vd25lckRvY3VtZW50KCk7Cit9CisKK3ht
bERvY1B0ciBYU0xTdHlsZVNoZWV0Ojpsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9j
UHRyIHBhcmVudERvYywgY29uc3QgeG1sQ2hhciogdXJpKQoreworICAgIGJvb2wgbWF0Y2hlZFBh
cmVudCA9IChwYXJlbnREb2MgPT0gZG9jdW1lbnQoKSk7CisgICAgdW5zaWduZWQgbGVuID0gbGVu
Z3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAg
IFN0eWxlQmFzZSogcnVsZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1
bGUoKSkgeworICAgICAgICAgICAgWFNMSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8
WFNMSW1wb3J0UnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgWFNMU3R5bGVTaGVldCogY2hpbGQg
PSBpbXBvcnQtPnN0eWxlU2hlZXQoKTsKKyAgICAgICAgICAgIGlmICghY2hpbGQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobWF0Y2hlZFBhcmVudCkgeworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+cHJvY2Vzc2VkKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBsaWJ4c2x0IGhhcyBiZWVuIGdpdmVuIHRoaXMgc2hlZXQgYWxyZWFkeS4K
KworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBVUkkgb2YgdGhlIGNoaWxkIHN0eWxlc2hl
ZXQgYWdhaW5zdCB0aGUgZG9jIFVSSS4KKyAgICAgICAgICAgICAgICAvLyBJbiBvcmRlciB0byBl
bnN1cmUgdGhhdCBsaWJ4bWwgY2Fub25pY2FsaXplZCBib3RoIFVSTHMsIHdlIGdldCB0aGUgb3Jp
Z2luYWwgaHJlZgorICAgICAgICAgICAgICAgIC8vIHN0cmluZyBmcm9tIHRoZSBpbXBvcnQgcnVs
ZSBhbmQgY2Fub25pY2FsaXplIGl0IHVzaW5nIGxpYnhtbCBiZWZvcmUgY29tcGFyaW5nIGl0Cisg
ICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgVVJJIGFyZ3VtZW50LgorICAgICAgICAgICAgICAg
IENTdHJpbmcgaW1wb3J0SHJlZiA9IGltcG9ydC0+aHJlZigpLnV0ZjgoKTsKKyAgICAgICAgICAg
ICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UocGFyZW50RG9jLCAoeG1sTm9kZVB0
cilwYXJlbnREb2MpOworICAgICAgICAgICAgICAgIHhtbENoYXIqIGNoaWxkVVJJID0geG1sQnVp
bGRVUkkoKGNvbnN0IHhtbENoYXIqKWltcG9ydEhyZWYuZGF0YSgpLCBiYXNlKTsKKyAgICAgICAg
ICAgICAgICBib29sIGVxdWFsVVJJcyA9IHhtbFN0ckVxdWFsKHVyaSwgY2hpbGRVUkkpOworICAg
ICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7CisgICAgICAgICAgICAgICAgeG1sRnJlZShjaGls
ZFVSSSk7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFsVVJJcykgeworICAgICAgICAgICAgICAg
ICAgICBjaGlsZC0+bWFya0FzUHJvY2Vzc2VkKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjaGlsZC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHhtbERvY1B0ciByZXN1bHQgPSBpbXBvcnQtPnN0eWxlU2hl
ZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHBhcmVudERvYywgdXJpKTsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgWFNMU3R5bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sKKyAgICBBU1NFUlQoIW1f
cHJvY2Vzc2VkKTsKKyAgICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKKyAgICBtX3By
b2Nlc3NlZCA9IHRydWU7CisgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKLS0gCjEuNi4z
LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34854</attachid>
            <date>2009-08-14 10:12:31 -0700</date>
            <delta_ts>2009-08-18 12:21:27 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>0001-Qt-Implement-XSLT-support-with-QtXmlPatterns.patch</filename>
            <type>text/plain</type>
            <size>23186</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAxNDgxNjk5MDg2NjIzMjU2YzBjNjdmZmM5ZTUxYTBhM2EwYTBmNjRlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTg6MDI6MTMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBbUXRd
IEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zLgogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgotLS0KIEphdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oICAgICB8ICAgIDYgKy0KIFdlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAg
ICAgICB8ICAgMTggKy0tLS0KIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAgICB8ICAg
MTEgKystCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oICAgICAgICAgICAgfCAgIDE5ICsrKystCiBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaCAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXJRdC5jcHAgICAgfCAgIDQ4ICsrKy0tLS0tLS0tLQogV2ViQ29yZS9kb20vWE1M
VG9rZW5pemVyU2NvcGUuY3BwIHwgICAgNiArLQogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyU2Nv
cGUuaCAgIHwgICAgNiArLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oICAgICAgIHwgICAy
NiArKysrKy0KIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAgICB8ICAxMDkgKysrKysr
KysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwICAgICB8
ICAgIDIgLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oICAgICAgIHwgICAyMCArKysrKy0K
IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgICB8ICAxNTMgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMzUxIGluc2VydGlvbnMo
KyksIDc1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXRRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yUXQuY3BwCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAppbmRleCA5OGQ2MjZjLi40ZWRiZWVjIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaApAQCAtNzMxLDExICs3MzEsMTEgQEAKICNkZWZpbmUgRU5BQkxFX0FD
VElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExBWUVSIDEKICNlbmRpZgogCi0vKiBVc2UgdGhlIFF0
WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KKy8qIFVz
ZSB0aGUgUVhtbFN0cmVhbVJlYWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MVG9rZW5pemVyICov
CisvKiBVc2UgdGhlIFFYbWxRdWVyeSBpbXBsZW1lbnRhdGlvbiBmb3IgWFNMVFByb2Nlc3NvciAq
LwogI2lmIFBMQVRGT1JNKFFUKQotI2lmICFFTkFCTEUoWFNMVCkKICNkZWZpbmUgV1RGX1VTRV9R
WE1MU1RSRUFNIDEKLSNlbmRpZgorI2RlZmluZSBXVEZfVVNFX1FYTUxRVUVSWSAxCiAjZW5kaWYK
IAogI2lmICFQTEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDM2OTE4YzIuLmQyMDFlZjAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTI1LDcgKzEy
NSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TSU5HTEVfVEhSRUFERUQ9MSkgewogIWNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0uKTogREVGSU5FUyArPSBF
TkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxU
RVJTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9GSUxURVJTPTAKICFjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfWFBBVEg9Lik6IERFRklORVMgKz0gRU5BQkxFX1hQQVRIPTEKLSFjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfWFNMVD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFNMVD0wCishY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1hTTFQ9Lik6IERFRklORVMgKz0gRU5BQkxFX1hTTFQ9MQogIyFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQogIWNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9XQ1NTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XQ1NTPTAK
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XTUw9
MApAQCAtMjY0OSwyNSArMjY0OSwxNSBAQCB1bml4OiFtYWM6Q09ORklHICs9IGxpbmtfcGtnY29u
ZmlnCiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPTEpIHsKICAgICBGRUFUVVJFX0RF
RklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWFNMVD0xCi0gICAgUEtHQ09ORklHICs9IGxpYnht
bC0yLjAgbGlieHNsdAogCi0gICAgbWFjeCB7Ci0gICAgICAgIElOQ0xVREVQQVRIICs9IC91c3Iv
aW5jbHVkZS9saWJ4bWwyCi0gICAgICAgIExJQlMgKz0gLWx4bWwyIC1seHNsdAotICAgIH0KLQot
ICAgIHdpbjMyLW1zdmMqIHsKLSAgICAgICAgTElCUyArPSAtbGxpYnhtbDIgLWxsaWJ4c2x0Ci0g
ICAgfQorICAgIFFUICs9IHhtbHBhdHRlcm5zCiAKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAg
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwIFwKICAgICAgICAgYmlu
ZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCBcCi0gICAgICAgIHhtbC9YU0xJbXBv
cnRSdWxlLmNwcCBcCi0gICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0LmNwcCBcCi0gICAgICAgIHht
bC9YU0xURXh0ZW5zaW9ucy5jcHAgXAorICAgICAgICB4bWwvWFNMU3R5bGVTaGVldFF0LmNwcCBc
CiAgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcCBcCi0gICAgICAgIHhtbC9YU0xUVW5pY29k
ZVNvcnQuY3BwCisgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwCiB9CiAKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9YQkw9MSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDg5YmI5NGUuLmNlYzZjZGQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUq
IGZyYW1lLCBib29sIGlzWEhUTUwpCiAgICAgLCBtX3RpdGxlU2V0RXhwbGljaXRseShmYWxzZSkK
ICAgICAsIG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXIodGhpcywgJkRvY3VtZW50Ojp1cGRh
dGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKQogICAgICwgbV9leGVjdXRlU2NyaXB0U29vblRp
bWVyKHRoaXMsICZEb2N1bWVudDo6ZXhlY3V0ZVNjcmlwdFNvb25UaW1lckZpcmVkKQotI2lmIEVO
QUJMRShYU0xUKQorI2lmIEVOQUJMRShYU0xUKSAmJiAhVVNFKFFYTUxRVUVSWSkKICAgICAsIG1f
dHJhbnNmb3JtU291cmNlKDApCiAjZW5kaWYKICAgICAsIG1feG1sVmVyc2lvbigiMS4wIikKQEAg
LTQ3MCw3ICs0NzAsNyBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAgICAgbV9yZW5kZXJB
cmVuYSA9IDA7CiAgICAgfQogCi0jaWYgRU5BQkxFKFhTTFQpCisjaWYgRU5BQkxFKFhTTFQpICYm
ICFVU0UoUVhNTFFVRVJZKQogICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3RyYW5zZm9ybVNv
dXJjZSk7CiAjZW5kaWYKIApAQCAtMzc1Myw2ICszNzUzLDEyIEBAIHZvaWQgRG9jdW1lbnQ6OmFw
cGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiAgICAgcHJvY2Vzc29y
LT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNvZGluZywgcmVz
dWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCkpOwogfQogCisjaWYgVVNFKFFYTUxRVUVSWSkKK3Zv
aWQgRG9jdW1lbnQ6OnNldFRyYW5zZm9ybVNvdXJjZShjb25zdCBTdHJpbmcgJnNvdXJjZSkKK3sK
KyAgICBtX3RyYW5zZm9ybVNvdXJjZSA9IHNvdXJjZTsKK30KKyNlbHNlCiB2b2lkIERvY3VtZW50
OjpzZXRUcmFuc2Zvcm1Tb3VyY2Uodm9pZCogZG9jKQogewogICAgIGlmIChkb2MgPT0gbV90cmFu
c2Zvcm1Tb3VyY2UpCkBAIC0zNzYxLDYgKzM3NjcsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRUcmFu
c2Zvcm1Tb3VyY2Uodm9pZCogZG9jKQogICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3RyYW5z
Zm9ybVNvdXJjZSk7CiAgICAgbV90cmFuc2Zvcm1Tb3VyY2UgPSBkb2M7CiB9CisjZW5kaWYKIAog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IDY2NTVkOWIuLjUzNDgyZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzI3LDExICs3
MjcsMTcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgdm9pZCBhcHBseVhTTFRy
YW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKTsKLSAgICB2b2lkIHNldFRyYW5zZm9y
bVNvdXJjZSh2b2lkKiBkb2MpOwotICAgIGNvbnN0IHZvaWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsg
cmV0dXJuIG1fdHJhbnNmb3JtU291cmNlOyB9CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJh
bnNmb3JtU291cmNlRG9jdW1lbnQoKSB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50
OyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1bWVudCogZG9jKSB7
IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2M7IH0KLSNlbmRpZgorICAgIAorI2lmIFVT
RShRWE1MUVVFUlkpCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2UoY29uc3QgU3RyaW5nICZz
b3VyY2UpOworICAgIFN0cmluZyB0cmFuc2Zvcm1Tb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybVNvdXJjZTsgfQorI2Vsc2UKKyAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZSh2b2lk
KiBkb2MpOworICAgIGNvbnN0IHZvaWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsgcmV0dXJuIG1fdHJh
bnNmb3JtU291cmNlOyB9CisjZW5kaWYgLy8gVVNFKFFYTUxRVUVSWSkKKyNlbmRpZiAvLyBFTkFC
TEUoWFNMVCkKIAogI2lmIEVOQUJMRShYQkwpCiAgICAgLy8gWEJMIG1ldGhvZHMKQEAgLTkzOCw5
ICs5NDQsMTQgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxEb2N1bWVudD4gbV9leGVjdXRlU2NyaXB0
U29vblRpbWVyOwogICAgIAogI2lmIEVOQUJMRShYU0xUKQorI2lmIFVTRShRWE1MUVVFUlkpCisg
ICAgU3RyaW5nIG1fdHJhbnNmb3JtU291cmNlOworI2Vsc2UKICAgICB2b2lkKiBtX3RyYW5zZm9y
bVNvdXJjZTsKKyNlbmRpZiAvLyBVU0UoUVhNTFFVRVJZKQorCiAgICAgUmVmUHRyPERvY3VtZW50
PiBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50OwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFhT
TFQpCiAKICNpZiBFTkFCTEUoWEJMKQogICAgIFhCTEJpbmRpbmdNYW5hZ2VyKiBtX2JpbmRpbmdN
YW5hZ2VyOyAvLyBUaGUgYWNjZXNzIHBvaW50IHRocm91Z2ggd2hpY2ggZG9jdW1lbnRzIGFuZCBl
bGVtZW50cyBjb21tdW5pY2F0ZSB3aXRoIFhCTC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hN
TFRva2VuaXplci5oIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgKaW5kZXggMDE5YTgzMS4u
N2U3ZDU0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgKKysrIGIvV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyLmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7CiAgICAgfTsKIAotI2lmIEVOQUJMRShY
U0xUKQorI2lmIEVOQUJMRShYU0xUKSAmJiAhVVNFKFFYTUxRVUVSWSkKIHZvaWQqIHhtbERvY1B0
ckZvclN0cmluZyhEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiB1cmwpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0
LmNwcCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAppbmRleCAxNmM2MzdmLi5iN2Iy
MWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCkBAIC0yNDgsNDUgKzI0OCwxOSBAQCB2b2lkIFhN
TFRva2VuaXplcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgY2hhciogY2h1bmspCiB2
b2lkIFhNTFRva2VuaXplcjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xUKQotICAgICN3YXJu
aW5nIExvb2sgYXQgWE1MVG9rZW5pemVyTGliWG1sLmNwcAotI2VuZGlmCi0KLSAgICBpZiAobV9z
dHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50
RXJyb3IgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCkpIHsKLSAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxp
bmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyKCkpOworICAgIGlm
IChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNl
KG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pOworICAgICAgICBtX2RvYy0+c2V0UGFyc2lu
ZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBw
bHkgeHNsIHNoZWV0cy4KKyAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKKyAg
ICAgICAgbV9kb2MtPnNldFBhcnNpbmcodHJ1ZSk7CisgICAgICAgIG1fcGFyc2VyU3RvcHBlZCA9
IHRydWU7CiAgICAgfQotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJGb3JT
dHJpbmcoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBT
dHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0cgot
ICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJlIHRv
IHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9yIG1l
c3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KCZCT00pOwotCi0gICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBvbGRFcnJvckZ1bmMgPSB4bWxH
ZW5lcmljRXJyb3I7Ci0gICAgdm9pZCogb2xkRXJyb3JDb250ZXh0ID0geG1sR2VuZXJpY0Vycm9y
Q29udGV4dDsKLSAgICAKLSAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFja3MoZG9jTG9hZGVy
KTsgICAgICAgIAotICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgZXJyb3JGdW5jKTsKLSAg
ICAKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRh
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUg
PT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYU0xUX1BBUlNFX09QVElPTlMpOwotICAgIAotICAgIHNldExv
YWRlckZvckxpYlhNTENhbGxiYWNrcygwKTsKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG9s
ZEVycm9yQ29udGV4dCwgb2xkRXJyb3JGdW5jKTsKKyNlbmRpZgogICAgIAotICAgIHJldHVybiBz
b3VyY2VEb2M7CisgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6
UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9yCisgICAgICAgIHx8IChtX3dyb3RlVGV4dCAmJiAh
bV9zYXdGaXJzdEVsZW1lbnQgJiYgIW1fc2F3WFNMVHJhbnNmb3JtKSkKKyAgICAgICAgaGFuZGxl
RXJyb3IoZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1i
ZXIoKSwgY29sdW1uTnVtYmVyKCkpOwogfQotI2VuZGlmCiAKIGludCBYTUxUb2tlbml6ZXI6Omxp
bmVOdW1iZXIoKSBjb25zdAogewpAQCAtNjgzLDcgKzY1Nyw3IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCiAKICNpZiBFTkFCTEUoWFNMVCkKICAgICBt
X3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAg
ICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpKSkKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudCgpKQogICAgICAgICBzdG9wUGFyc2luZygpOwogI2VuZGlmCiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJTY29wZS5jcHAgYi9XZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJTY29wZS5jcHAKaW5kZXggMzc2OWY1OS4uYmQ0ZjYwZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyU2NvcGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTFRva2Vu
aXplclNjb3BlLmNwcApAQCAtMzIsNyArMzIsNyBAQCBEb2NMb2FkZXIqIFhNTFRva2VuaXplclNj
b3BlOjpjdXJyZW50RG9jTG9hZGVyID0gMDsKIAogWE1MVG9rZW5pemVyU2NvcGU6OlhNTFRva2Vu
aXplclNjb3BlKERvY0xvYWRlciogZG9jTG9hZGVyKQogICAgIDogbV9vbGREb2NMb2FkZXIoY3Vy
cmVudERvY0xvYWRlcikKLSNpZiBFTkFCTEUoWFNMVCkKKyNpZiBFTkFCTEUoWFNMVCkgJiYgIVVT
RShRWE1MUVVFUlkpCiAgICAgLCBtX29sZEdlbmVyaWNFcnJvckZ1bmMoeG1sR2VuZXJpY0Vycm9y
KQogICAgICwgbV9vbGRTdHJ1Y3R1cmVkRXJyb3JGdW5jKHhtbFN0cnVjdHVyZWRFcnJvcikKICAg
ICAsIG1fb2xkRXJyb3JDb250ZXh0KHhtbEdlbmVyaWNFcnJvckNvbnRleHQpCkBAIC00MSw3ICs0
MSw3IEBAIFhNTFRva2VuaXplclNjb3BlOjpYTUxUb2tlbml6ZXJTY29wZShEb2NMb2FkZXIqIGRv
Y0xvYWRlcikKICAgICBjdXJyZW50RG9jTG9hZGVyID0gZG9jTG9hZGVyOwogfQogCi0jaWYgRU5B
QkxFKFhTTFQpCisjaWYgRU5BQkxFKFhTTFQpICYmICFVU0UoUVhNTFFVRVJZKQogWE1MVG9rZW5p
emVyU2NvcGU6OlhNTFRva2VuaXplclNjb3BlKERvY0xvYWRlciogZG9jTG9hZGVyLCB4bWxHZW5l
cmljRXJyb3JGdW5jIGdlbmVyaWNFcnJvckZ1bmMsIHhtbFN0cnVjdHVyZWRFcnJvckZ1bmMgc3Ry
dWN0dXJlZEVycm9yRnVuYywgdm9pZCogZXJyb3JDb250ZXh0KQogICAgIDogbV9vbGREb2NMb2Fk
ZXIoY3VycmVudERvY0xvYWRlcikKICAgICAsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyh4bWxHZW5l
cmljRXJyb3IpCkBAIC01OSw3ICs1OSw3IEBAIFhNTFRva2VuaXplclNjb3BlOjpYTUxUb2tlbml6
ZXJTY29wZShEb2NMb2FkZXIqIGRvY0xvYWRlciwgeG1sR2VuZXJpY0Vycm9yRnVuYyBnCiBYTUxU
b2tlbml6ZXJTY29wZTo6flhNTFRva2VuaXplclNjb3BlKCkKIHsKICAgICBjdXJyZW50RG9jTG9h
ZGVyID0gbV9vbGREb2NMb2FkZXI7Ci0jaWYgRU5BQkxFKFhTTFQpCisjaWYgRU5BQkxFKFhTTFQp
ICYmICFVU0UoUVhNTFFVRVJZKQogICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMobV9vbGRFcnJv
ckNvbnRleHQsIG1fb2xkR2VuZXJpY0Vycm9yRnVuYyk7CiAgICAgeG1sU2V0U3RydWN0dXJlZEVy
cm9yRnVuYyhtX29sZEVycm9yQ29udGV4dCwgbV9vbGRTdHJ1Y3R1cmVkRXJyb3JGdW5jKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyU2NvcGUuaCBiL1dlYkNv
cmUvZG9tL1hNTFRva2VuaXplclNjb3BlLmgKaW5kZXggYzI5Yjc5Ni4uMGJmYzUyMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyU2NvcGUuaAorKysgYi9XZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXJTY29wZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIAotI2lmIEVOQUJMRShYU0xUKQorI2lmIEVOQUJMRShYU0xUKSAmJiAhVVNF
KFFYTUxRVUVSWSkKICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgogI2VuZGlmCiAKQEAgLTQzLDE0
ICs0MywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIERvY0xvYWRl
ciogY3VycmVudERvY0xvYWRlcjsKIAotI2lmIEVOQUJMRShYU0xUKQorI2lmIEVOQUJMRShYU0xU
KSAmJiAhVVNFKFFYTUxRVUVSWSkKICAgICAgICAgWE1MVG9rZW5pemVyU2NvcGUoRG9jTG9hZGVy
KiBkb2NMb2FkZXIsIHhtbEdlbmVyaWNFcnJvckZ1bmMgZ2VuZXJpY0Vycm9yRnVuYywgeG1sU3Ry
dWN0dXJlZEVycm9yRnVuYyBzdHJ1Y3R1cmVkRXJyb3JGdW5jID0gMCwgdm9pZCogZXJyb3JDb250
ZXh0ID0gMCk7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIERvY0xvYWRlciogbV9v
bGREb2NMb2FkZXI7CiAKLSNpZiBFTkFCTEUoWFNMVCkKKyNpZiBFTkFCTEUoWFNMVCkgJiYgIVVT
RShRWE1MUVVFUlkpCiAgICAgICAgIHhtbEdlbmVyaWNFcnJvckZ1bmMgbV9vbGRHZW5lcmljRXJy
b3JGdW5jOwogICAgICAgICB4bWxTdHJ1Y3R1cmVkRXJyb3JGdW5jIG1fb2xkU3RydWN0dXJlZEVy
cm9yRnVuYzsKICAgICAgICAgdm9pZCogbV9vbGRFcnJvckNvbnRleHQ7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgK
aW5kZXggZWVmMmZkNC4uOWJlYWQxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldC5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaApAQCAtMjYsOCArMjYsMTIg
QEAKICNpZiBFTkFCTEUoWFNMVCkKIAogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworI2lmICFV
U0UoUVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4
c2x0L3RyYW5zZm9ybS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0IHsKICAg
ICBwdWJsaWM6CisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0
IFN0cmluZyYgaHJlZikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBYU0xTdHlsZVNoZWV0KHBhcmVudEltcG9ydCwgaHJlZikpOwogICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIHBh
cmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGZhbHNlKSk7
CkBAIC02NSwzMSArNzEsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGxv
YWRDaGlsZFNoZWV0cygpOwogICAgICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmlu
ZyYgaHJlZik7CiAKLSAgICAgICAgeHNsdFN0eWxlc2hlZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQo
KTsKLQogICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpOwogCiAgICAgICAgIERvY3VtZW50
KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25lckRvY3VtZW50OyB9CiAgICAgICAgIHZv
aWQgc2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpOwogCisjaWYgVVNF
KFFYTUxRVUVSWSkKKyAgICAgICAgU3RyaW5nIHNoZWV0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9zaGVldFN0cmluZzsgfQorI2Vsc2UKICAgICAgICAgeG1sRG9jUHRyIGRvY3VtZW50KCk7Cisg
ICAgICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7CisgICAgICAgIHht
bERvY1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9jUHRyIHBhcmVudERvYywg
Y29uc3QgeG1sQ2hhciogdXJpKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJEb2N1bWVu
dHMoKTsKIAotICAgICAgICB4bWxEb2NQdHIgbG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHht
bERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSk7Ci0KICAgICAgICAgdm9pZCBt
YXJrQXNQcm9jZXNzZWQoKTsKICAgICAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVy
biBtX3Byb2Nlc3NlZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgWFNMU3R5bGVTaGVldChO
b2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGJvb2wgZW1iZWRkZWQpOworI2lm
ICFVU0UoUVhNTFFVRVJZKQogICAgICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBh
cmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKyNlbmRpZgogCiAgICAgICAgIERvY3Vt
ZW50KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgICAgIHhtbERvY1B0ciBtX3N0eWxlc2hlZXREb2M7
CiAgICAgICAgIGJvb2wgbV9lbWJlZGRlZDsKICAgICAgICAgYm9vbCBtX3Byb2Nlc3NlZDsKKwor
I2lmIFVTRShRWE1MUVVFUlkpCisgICAgICAgIFN0cmluZyBtX3NoZWV0U3RyaW5nOworI2Vsc2UK
KyAgICAgICAgeG1sRG9jUHRyIG1fc3R5bGVzaGVldERvYzsKICAgICAgICAgYm9vbCBtX3N0eWxl
c2hlZXREb2NUYWtlbjsKKyNlbmRpZgorCiAgICAgICAgIFhTTFN0eWxlU2hlZXQqIG1fcGFyZW50
U3R5bGVTaGVldDsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNo
ZWV0UXQuY3BwIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk0MzA2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKKworI2lmIEVOQUJMRShYU0xUKQor
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiWE1MVG9r
ZW5pemVyU2NvcGUuaCIKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisjaW5jbHVkZSAibG9h
ZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVT
aGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsICBib29sIGVtYmVkZGVk
KQorICAgIDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmKQorICAgICwgbV9vd25lckRvY3Vt
ZW50KHBhcmVudE5vZGUtPmRvY3VtZW50KCkpCisgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQor
eworfQorCitYU0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCit7Cit9CisKK2Jvb2wgWFNM
U3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCit7Cisg
ICAgaWYgKG93bmVyTm9kZSgpKQorICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsK
K30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworRG9jTG9hZGVyKiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQor
eworICAgIGlmICghbV9vd25lckRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbV9vd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKTsKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0
OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCkKK3sKKyAgICAvLyBGSVhN
RTogRml4IFFYbWxRdWVyeSBzbyB0aGF0IGl0IGFsbG93cyBjb21waWxpbmcgdGhlIHN0eWxlc2hl
ZXQgYmVmb3JlIHNldHRpbmcgdGhlIGRvY3VtZW50CisgICAgLy8gdG8gYmUgdHJhbnNmb3JtZWQu
IFRoaXMgd2F5IHdlIGNvdWxkIG5vdCBvbmx5IGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGNv
cnJlY3QgYmVmb3JlIHVzaW5nIGl0CisgICAgLy8gYnV0IGFsc28gdHVybiBYU0xTdHlsZVNoZWV0
OjpzaGVldFN0cmluZygpIGludG8gWFNMU3R5bGVTaGVldDo6cXVlcnkoKSB0aGF0IHJldHVybnMg
YSBRWG1sUXVlcnkuCisKKyAgICBtX3NoZWV0U3RyaW5nID0gc3RyaW5nOworICAgIHJldHVybiAh
bV9zaGVldFN0cmluZy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENo
aWxkU2hlZXRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFhTTFN0eWxl
U2hlZXQ6OmxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OnNldFBhcmVudFN0eWxlU2hlZXQo
WFNMU3R5bGVTaGVldCogcGFyZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgWFNMU3R5bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNM
VCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAKaW5kZXggZjMxZGM0Yy4uODJkNzYyNyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAKQEAgLTQ1LDggKzQ1LDYgQEAKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgotI2luY2x1
ZGUgIlhTTFRFeHRlbnNpb25zLmgiCi0jaW5jbHVkZSAiWFNMVFVuaWNvZGVTb3J0LmgiCiAjaW5j
bHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBiL1dlYkNv
cmUveG1sL1hTTFRQcm9jZXNzb3IuaAppbmRleCA0NWY1Y2IxLi5kMDE1NzQ4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5oCkBAIC0yOCwxMCArMjgsMTQgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKKyNpZiAhVVNFKFFYTUxR
VUVSWSkKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAjaW5jbHVkZSA8bGli
eHNsdC9kb2N1bWVudHMuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKKyNp
bmNsdWRlIDxxYWJzdHJhY3RtZXNzYWdlaGFuZGxlci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICBjbGFzcyBGcmFtZTsKQEAgLTU4LDE2ICs2MiwzMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdm9pZCByZXNldCgpOwogCisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciop
OwogICAgICAgICBzdGF0aWMgdm9pZCBnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCBj
b25zdCBjaGFyKiBtc2csIC4uLik7CiAKLSAgICBwdWJsaWM6CiAgICAgICAgIC8vIE9ubHkgZm9y
IGxpYlhTTFQgY2FsbGJhY2tzCiAgICAgICAgIFhTTFN0eWxlU2hlZXQqIHhzbFN0eWxlc2hlZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlc2hlZXQuZ2V0KCk7IH0KKyNlbmRpZgogCiAgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVyTWFwOwogCiAgICAgcHJp
dmF0ZToKKyNpZiBVU0UoUVhNTFFVRVJZKQorICAgICAgICBjbGFzcyBNZXNzYWdlSGFuZGxlciA6
IHB1YmxpYyBRQWJzdHJhY3RNZXNzYWdlSGFuZGxlciB7CisKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgTWVzc2FnZUhhbmRsZXIoRG9jdW1lbnQqIGRvY3VtZW50ID0gMCk7CisgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTWVzc2FnZShRdE1zZ1R5cGUgdHlwZSwgY29uc3QgUVN0
cmluZyYgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRVXJsJiBpZGVudGlmaWVyLCBjb25zdCBRU291cmNlTG9jYXRpb24mIHNvdXJjZUxv
Y2F0aW9uKTsKKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgRG9jdW1lbnQgKm1fZG9j
dW1lbnQ7CisgICAgICAgIH07CisjZW5kaWYKKwogICAgICAgICBYU0xUUHJvY2Vzc29yKCkgeyB9
CiAKICAgICAgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1fc3R5bGVzaGVldDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMGEyNmUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCkBAIC0w
LDAgKzEsMTUzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1l
bnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFrdWIgV2llY3pvcmVrIDxmYXcy
MTdAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWFNMVCkKKwor
I2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIgLy8gZm9yIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAi
bG9hZGVyLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
KyNpbmNsdWRlIDxxYWJzdHJhY3RtZXNzYWdlaGFuZGxlci5oPgorI2luY2x1ZGUgPHFidWZmZXIu
aD4KKyNpbmNsdWRlIDxxc291cmNlbG9jYXRpb24uaD4KKyNpbmNsdWRlIDxxeG1scXVlcnkuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYU0xUUHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlcjo6
TWVzc2FnZUhhbmRsZXIoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogUUFic3RyYWN0TWVzc2Fn
ZUhhbmRsZXIoKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKK3sKK30KKwordm9pZCBYU0xU
UHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlcjo6aGFuZGxlTWVzc2FnZShRdE1zZ1R5cGUgdHlwZSwg
Y29uc3QgUVN0cmluZyYgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCYgaWRlbnRpZmllciwgY29uc3QgUVNvdXJj
ZUxvY2F0aW9uJiBzb3VyY2VMb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFF0RGVidWdNc2c6CisgICAgICAgIGxldmVsID0gVGlwTWVz
c2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0V2FybmluZ01zZzoKKyAgICAg
ICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFF0Q3JpdGljYWxNc2c6CisgICAgY2FzZSBRdEZhdGFsTXNnOgorICAgICAgICBsZXZlbCA9IEVy
cm9yTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBs
ZXZlbCA9IExvZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQ29u
c29sZSogY29uc29sZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmRvbVdpbmRvdygpLT5jb25zb2xl
KCk7CisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgbGV2ZWwsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
TG9jYXRpb24ubGluZSgpLCBzb3VyY2VMb2NhdGlvbi51cmkoKS50b1N0cmluZygpKTsKK30KKwor
Ym9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBT
dHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNv
ZGluZykKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIFJlZlB0cjxYU0xTdHls
ZVNoZWV0PiBzdHlsZXNoZWV0ID0gbV9zdHlsZXNoZWV0OworICAgIGlmICghc3R5bGVzaGVldCAm
JiBtX3N0eWxlc2hlZXRSb290Tm9kZSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9zdHlsZXNo
ZWV0Um9vdE5vZGUuZ2V0KCk7CisgICAgICAgIHN0eWxlc2hlZXQgPSBYU0xTdHlsZVNoZWV0Ojpj
cmVhdGUobm9kZS0+cGFyZW50KCkgPyBub2RlLT5wYXJlbnQoKSA6IG5vZGUsIG5vZGUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgc3R5bGVzaGVldC0+cGFyc2VTdHJpbmco
Y3JlYXRlTWFya3VwKG5vZGUpKTsKKyAgICB9CisKKyAgICBpZiAoIXN0eWxlc2hlZXQgfHwgc3R5
bGVzaGVldC0+c2hlZXRTdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdWNjZXNz
OworCisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9j
dW1lbnQoKTsKKyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBvd25l
ckRvY3VtZW50LmdldCgpKTsKKworICAgIFFYbWxRdWVyeSBxdWVyeShRWG1sUXVlcnk6OlhTTFQy
MCk7CisKKyAgICBYU0xUUHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlciBtZXNzYWdlSGFuZGxlcihv
d25lckRvY3VtZW50LmdldCgpKTsKKyAgICBxdWVyeS5zZXRNZXNzYWdlSGFuZGxlcigmbWVzc2Fn
ZUhhbmRsZXIpOworCisgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBl
bmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CisgICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmZpcnN0KSwgUVhtbEl0
ZW0oUVZhcmlhbnQoaXQtPnNlY29uZCkpKTsKKworICAgIFFTdHJpbmcgc291cmNlOworICAgIGlm
IChzb3VyY2VJc0RvY3VtZW50KQorICAgICAgICBzb3VyY2UgPSBvd25lckRvY3VtZW50LT50cmFu
c2Zvcm1Tb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZUlzRG9jdW1lbnQgfHwgc291cmNlLmlzRW1w
dHkoKSkKKyAgICAgICAgc291cmNlID0gY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpOworCisgICAg
UUJ1ZmZlciBpbnB1dEJ1ZmZlcjsKKyAgICBRQnVmZmVyIHN0eWxlU2hlZXRCdWZmZXI7CisgICAg
UUJ1ZmZlciBvdXRwdXRCdWZmZXI7CisKKyAgICBpbnB1dEJ1ZmZlci5zZXREYXRhKHNvdXJjZS50
b1V0ZjgoKSk7CisgICAgc3R5bGVTaGVldEJ1ZmZlci5zZXREYXRhKFFTdHJpbmcoc3R5bGVzaGVl
dC0+c2hlZXRTdHJpbmcoKSkudG9VdGY4KCkpOworCisgICAgaW5wdXRCdWZmZXIub3BlbihRSU9E
ZXZpY2U6OlJlYWRPbmx5KTsKKyAgICBzdHlsZVNoZWV0QnVmZmVyLm9wZW4oUUlPRGV2aWNlOjpS
ZWFkT25seSk7CisgICAgb3V0cHV0QnVmZmVyLm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwor
CisgICAgcXVlcnkuc2V0Rm9jdXMoJmlucHV0QnVmZmVyKTsKKyAgICBxdWVyeS5zZXRRdWVyeSgm
c3R5bGVTaGVldEJ1ZmZlciwgUVVybChzdHlsZXNoZWV0LT5ocmVmKCkpKTsKKyAgICBzdWNjZXNz
ID0gcXVlcnkuZXZhbHVhdGVUbygmb3V0cHV0QnVmZmVyKTsKKyAgICBvdXRwdXRCdWZmZXIucmVz
ZXQoKTsKKyAgICByZXN1bHRTdHJpbmcgPSBRU3RyaW5nOjpmcm9tVXRmOChvdXRwdXRCdWZmZXIu
cmVhZEFsbCgpKS50cmltbWVkKCk7CisKKyAgICBpZiAobV9zdHlsZXNoZWV0KSB7CisgICAgICAg
IG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAgbV9zdHlsZXNoZWV0ID0g
MDsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="19050"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34855</attachid>
            <date>2009-08-14 10:25:01 -0700</date>
            <delta_ts>2009-09-26 05:06:11 -0700</delta_ts>
            <desc>[Qt] Add expected result for fast/xsl/document-function.xml.</desc>
            <filename>0001-Qt-Add-expected-result-for-fast-xsl-document-functio.patch</filename>
            <type>text/plain</type>
            <size>2323</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAwOWUzMDdjYTMyN2NmY2U5ODc2ODZkODVlN2YzYzc3ZDdlMmJiZWM2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFNhdCwgOCBBdWcgMjAwOSAxODozMDoyNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtRdF0g
QWRkIGV4cGVjdGVkIHJlc3VsdCBmb3IgZmFzdC94c2wvZG9jdW1lbnQtZnVuY3Rpb24ueG1sLgog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgotLS0KIExheW91
dFRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArKysr
KysrKysKIC4uLi9xdC9mYXN0L3hzbC9kb2N1bWVudC1mdW5jdGlvbi1leHBlY3RlZC50eHQgICAg
IHwgICAxNyArKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2Zhc3QveHNsL2RvY3VtZW50LWZ1bmN0aW9uLWV4cGVjdGVkLnR4dAoKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBk
NmY1NTJmLi5mOWYwNGI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMTQgIEpha3Vi
IFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgZXhwZWN0ZWQgcmVzdWx0IGZvciBmYXN0
L3hzbC9kb2N1bWVudC1mdW5jdGlvbi54bWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC94
c2wvZG9jdW1lbnQtZnVuY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAwOS0wOC0xNCAg
QXJpeWEgSGlkYXlhdCAgPGFyaXlhLmhpZGF5YXRAbm9raWEuY29tPgogCiAgICAgICAgIFJ1YmJl
ci1zdGFtcGVkIGJ5IFRvciBBcm5lIFZlc3Riw7guCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9mYXN0L3hzbC9kb2N1bWVudC1mdW5jdGlvbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3hzbC9kb2N1bWVudC1mdW5jdGlvbi1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4ZGZlNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QveHNsL2RvY3VtZW50LWZ1bmN0
aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTc5CisgICAgICBSZW5k
ZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTcKKyAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgNjExeDE3CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNjExOiAiVGhpcyB0ZXN0cyB0aGUgeHNsdCBkb2N1bWVudCgpIGZ1bmN0aW9uLiBJZiB0aGlz
IHRlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlcmUgc2hvdWxkIGJlIHRocmVlIHBhcmFncmFwaHMgYmVs
b3cuIgorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDMwKSBzaXplIDc4NHgxNworICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxMTF4MTcKKyAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCAxMTE6ICJUaGlzIGlzIGEgcGFyYWdyYXBoIgorICAgICAgUmVu
ZGVyQmxvY2sge1B9IGF0ICgwLDYwKSBzaXplIDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSAxNDd4MTcKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCAxNDc6ICJUaGlzIGlzIGFub3RoZXIgcGFyYWdyYXBoIgorICAgICAgUmVuZGVyQmxvY2sg
e1B9IGF0ICgwLDkwKSBzaXplIDc4NHgxNworICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAxNDR4MTcKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxNDQ6
ICJUaGlzIGlzIGEgdGhpcmQgcGFyYWdyYXBoLiIKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="19051"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19184"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34858</attachid>
            <date>2009-08-14 10:41:08 -0700</date>
            <delta_ts>2009-09-26 05:06:15 -0700</delta_ts>
            <desc>[Qt] Update expected result for fast/xsl/xslt_unicode.xml.</desc>
            <filename>0001-Qt-Update-expected-result-for-fast-xsl-xslt_unicode..patch</filename>
            <type>text/plain</type>
            <size>1891</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBhYzllYWZjNTlmMTc0NTFkOGEyZTc4MTFiNjQzM2FmZWJhYWFjYWUyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFNhdCwgOCBBdWcgMjAwOSAxOToxMToxMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtRdF0g
VXBkYXRlIGV4cGVjdGVkIHJlc3VsdCBmb3IgZmFzdC94c2wveHNsdF91bmljb2RlLnhtbC4KIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwoKLS0tCiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrKysr
KysrCiAuLi4vcGxhdGZvcm0vcXQvZmFzdC94c2wveHNsdF91bmljb2RlLWV4cGVjdGVkLnR4dCB8
ICAgMTAgKysrKystLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA1IGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBmOWYwNGI3Li4wNmIxYzNiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTUg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbUXRd
IFVwZGF0ZSBleHBlY3RlZCByZXN1bHQgZm9yIGZhc3QveHNsL3hzbHRfdW5pY29kZS54bWwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisg
ICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC94c2wveHNsdF91bmljb2RlLWV4cGVjdGVkLnR4dDog
VXBkYXRlZC4KKworMjAwOS0wOC0xNCAgSmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBbUXRd
IEFkZCBleHBlY3RlZCByZXN1bHQgZm9yIGZhc3QveHNsL2RvY3VtZW50LWZ1bmN0aW9uLnhtbC4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QveHNsL3hzbHRfdW5pY29k
ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L3hzbC94c2x0X3Vu
aWNvZGUtZXhwZWN0ZWQudHh0CmluZGV4IDZhZGI4NDMuLmU1ZDE1NjEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QveHNsL3hzbHRfdW5pY29kZS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC94c2wveHNsdF91bmljb2RlLWV4cGVj
dGVkLnR4dApAQCAtMSw3ICsxLDcgQEAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICBS
ZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
MzUKLSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDM1Ci0gICAgUmVuZGVy
Qm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4MTkKLSAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMCwwKSBzaXplIDIweDE5Ci0gICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIw
OiAiZSBceHtFOX0iCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sg
e0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4
LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
MTh4MTcKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTg6ICJlIFx4e0U5fSIKLS0g
CjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="19053"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19185"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34860</attachid>
            <date>2009-08-14 11:05:48 -0700</date>
            <delta_ts>2009-08-18 06:09:59 -0700</delta_ts>
            <desc>Remove the encoding attribute from xsl:stylesheet element in
resources/unicode.xsl.</desc>
            <filename>0001-Remove-the-encoding-attribute-from-xsl-stylesheet-el.patch</filename>
            <type>text/plain</type>
            <size>1905</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAxYzVkMjgxZWE0NWI0Y2ExNTMzMWM5MWU1NDkzMjVjOTJhMmMxNDU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFNhdCwgOCBBdWcgMjAwOSAxODozNDowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS8yXSBS
ZW1vdmUgdGhlIGVuY29kaW5nIGF0dHJpYnV0ZSBmcm9tIHhzbDpzdHlsZXNoZWV0IGVsZW1lbnQg
aW4KIHJlc291cmNlcy91bmljb2RlLnhzbC4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODMwMwoKQWNjb3JkaW5nIHRvIHRoZSBib3RoIFhTTFQgMS4wIGFuZCAyLjAg
c3BlY2lmaWNhdGlvbnMsCnhzbDpzdHlsZXNoZWV0IGVsZW1lbnQgY2Fubm90IGNvbnRhaW4gdGhl
IGVuY29kaW5nIGF0dHJpYnV0ZS4KLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDEzICsrKysrKysrKysrKysKIExheW91dFRlc3RzL2Zhc3QveHNsL3Jl
c291cmNlcy91bmljb2RlLnhzbCB8ICAgIDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0
aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDZiMWMzYi4uNTYwM2YxMCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDE5IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgUmVtb3ZlIHRoZSBlbmNvZGluZyBhdHRyaWJ1dGUgZnJvbSB4c2w6c3R5bGVzaGVl
dCBlbGVtZW50IGluCisgICAgICAgIHJlc291cmNlcy91bmljb2RlLnhzbC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgQWNj
b3JkaW5nIHRvIHRoZSBib3RoIFhTTFQgMS4wIGFuZCAyLjAgc3BlY2lmaWNhdGlvbnMsCisgICAg
ICAgIHhzbDpzdHlsZXNoZWV0IGVsZW1lbnQgY2Fubm90IGNvbnRhaW4gdGhlIGVuY29kaW5nIGF0
dHJpYnV0ZS4KKworICAgICAgICAqIGZhc3QveHNsL3Jlc291cmNlcy91bmljb2RlLnhzbDoKKwor
MjAwOS0wOC0xNCAgSmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBbUXRdIFVwZGF0ZSBleHBl
Y3RlZCByZXN1bHQgZm9yIGZhc3QveHNsL3hzbHRfdW5pY29kZS54bWwuCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L3hzbC9yZXNvdXJjZXMvdW5pY29kZS54c2wgYi9MYXlvdXRUZXN0cy9m
YXN0L3hzbC9yZXNvdXJjZXMvdW5pY29kZS54c2wKaW5kZXggNzA3MjFiOS4uNGMzZjJkNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC94c2wvcmVzb3VyY2VzL3VuaWNvZGUueHNsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QveHNsL3Jlc291cmNlcy91bmljb2RlLnhzbApAQCAtMSw1ICsxLDUg
QEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNsOnN0eWxlc2hl
ZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIGVuY29k
aW5nPSJVVEYtOCIgdmVyc2lvbj0iMS4wIj4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KIDx4c2w6
b3V0cHV0IG1ldGhvZD0iaHRtbCIgZW5jb2Rpbmc9IlVURi04Ii8+CiAKIDx4c2w6dGVtcGxhdGUg
bWF0Y2g9Ii8iPgotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="19056"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34861</attachid>
            <date>2009-08-14 11:10:29 -0700</date>
            <delta_ts>2009-09-26 05:06:19 -0700</delta_ts>
            <desc>[Qt] Update the Skipped list.</desc>
            <filename>0002-Qt-Update-the-Skipped-list-after-adding-XSLT-support.patch</filename>
            <type>text/plain</type>
            <size>6100</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSA0Yjg5YjNmY2MzYjk1NWE4YzQ1ZDRhMTg3M2VmMmRmNDIxZDQ4YzIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFNhdCwgOCBBdWcgMjAwOSAxOTowODowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBb
UXRdIFVwZGF0ZSB0aGUgU2tpcHBlZCBsaXN0IGFmdGVyIGFkZGluZyBYU0xUIHN1cHBvcnQuCiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKClJlbW92ZSB0aGUg
dGVzdHMgdGhhdCBhcmUgcGFzc2luZyBub3cgYW5kIHNraXAgdGhlc2UgdGhhdCBhcmUgbm90LCB3
aXRoCmEgcmVhc29uIG9mIGZhaWx1cmUgZm9yIGVhY2ggb2YgdGhlbS4KLS0tCiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgICAgICAgICAgIHwgICAxMiArKysrKysKIExheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L1NraXBwZWQgfCAgIDc3ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogMiBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNTYwM2YxMC4uOWE5YmJhMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDE4IEBACiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgW1F0XSBVcGRhdGUgdGhlIFNr
aXBwZWQgbGlzdCBhZnRlciBhZGRpbmcgWFNMVCBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKKworICAgICAgICBSZW1vdmUgdGhl
IHRlc3RzIHRoYXQgYXJlIHBhc3Npbmcgbm93IGFuZCBza2lwIHRoZXNlIHRoYXQgYXJlIG5vdCwg
d2l0aAorICAgICAgICBhIHJlYXNvbiBvZiBmYWlsdXJlIGZvciBlYWNoIG9mIHRoZW0uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCisyMDA5LTA4LTE0ICBKYWt1YiBXaWVjem9y
ZWsgIDxmYXcyMTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIFJlbW92ZSB0aGUgZW5jb2RpbmcgYXR0cmlidXRlIGZyb20geHNsOnN0
eWxlc2hlZXQgZWxlbWVudCBpbgogICAgICAgICByZXNvdXJjZXMvdW5pY29kZS54c2wuCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3F0L1NraXBwZWQKaW5kZXggYjg1ZGJiZS4uOTY5NWJkZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCkBAIC0xLDYgKzEsNSBAQAogIyAtLS0tLS0tIG1pc3NpbmcgZmVhdHVyZXMKIGFjY2Vz
c2liaWxpdHkKLWZhc3QveHNsCiBtZWRpYQogd2ViYXJjaGl2ZQogc3ZnL3dlYmFyY2hpdmUKQEAg
LTExNiwxMSArMTE1LDM4IEBAIGVkaXRpbmcvcGFzdGVib2FyZC90ZXN0Y2FzZS05NTA3Lmh0bWwK
IGVkaXRpbmcvcGFzdGVib2FyZC91bmRvYWJsZS1mcmFnbWVudC1yZW1vdmVzLmh0bWwKIGVkaXRp
bmcvcGFzdGVib2FyZC91bnJlbmRlcmVkLWJyLmh0bWwKIAotIyAtLS0tLS0tIGZhaWx1cmVzIGR1
ZSB0byBtaXNzaW5nIFhTTFQgc3VwcG9ydAotZmFzdC9kb20vV2luZG93L2dldC1zZXQtcHJvcGVy
dGllcy5odG1sCi1mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbAotZmFzdC9q
cy9pbnN0YW5jZW9mLW9wZXJhdG9yLmh0bWwKLWZhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5j
ZS5odG1sCisjIC0tLS0tLS0gZmFpbHVyZXMgZHVlIHRvIG1pc3Npbmcgc3VwcG9ydCBmb3IgcGFy
dGljdWxhciBYU0xUIGZlYXR1cmVzCisjIHhzbDpvdXRwdXQKK2Zhc3QveHNsL3hzbHQtZG9jLWVu
Yy54bWwKK2Zhc3QveHNsL3hzbHQtdXJsLnhtbAorZmFzdC94c2wvZGVmYXVsdC1odG1sLmh0bWwK
K2Zhc3QveHNsL3hzbHQtdGV4dC5odG1sCitmYXN0L3hzbC94c2x0LWVudGl0eS54bWwKK2Zhc3Qv
eHNsL3hzbHQtZXh0cmEtY29udGVudC1hdC1lbmQueG1sCisjIGV4dGVybmFsIGVudGl0aWVzIHN1
cHBvcnQKK2Zhc3QveHNsL2R0ZC1pbi1zb3VyY2UtZG9jdW1lbnQueG1sCitmYXN0L3hzbC94c2x0
LXNlY29uZC1sZXZlbC1pbXBvcnQueG1sCitmYXN0L3BhcnNlci9leHRlcm5hbC1lbnRpdGllcy1p
bi14c2x0LnhtbAorIyBleHNsdDpub2RlLXNldCgpIGZ1bmN0aW9uCitmYXN0L3hzbC9leHNsdC1u
b2RlLXNldC54bWwKKyMgeHNsOmltcG9ydAorZmFzdC94c2wvaW1wb3J0LWFmdGVyLWNvbW1lbnQu
eG1sCitmYXN0L3hzbC94c2x0LWltcG9ydC1kZXB0aC54bWwKK2Zhc3QveHNsL3hzbHQtbmVzdGVk
LXN0eWxlc2hlZXRzLnhtbAorIyB4c2w6YXR0cmlidXRlLXNldAorZmFzdC94c2wvbW96aWxsYS10
ZXN0cy54bWwKKyMgeHNsOnNvcnQ6IGxhbmcgYW5kIGNhc2Utb3JkZXIKK2Zhc3QveHNsL3NvcnQt
bG9jYWxlLnhtbAorZmFzdC94c2wvc29ydC11bmljb2RlLnhtbAorIyBvdXRwdXQgZm9ybWF0dGlu
ZyBpc3N1ZXMgKG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIGxhY2sgb2YgeHNsOm91dHB1dCBzdXBw
b3J0KQorZmFzdC94c2wveHNsdC1wcm9jZXNzb3IuaHRtbAorIyB0byBiZSBpbnZlc3RpZ2F0ZWQK
K2Zhc3QveHNsL3hzbHQtZW5jMTYueG1sCitmYXN0L3hzbC94c2x0LWVuYzE2dG8xNi54bWwKK2Zh
c3QveHNsL3hzbHQtZW5jLWN5ci54bWwKK2Zhc3QveHNsL3hzbHQtZW5jLnhtbAorZmFzdC94c2wv
eHNsdC1yZWxhdGl2ZS1wYXRoLnhtbAorZmFzdC94c2wveHNsdC1taXNzaW5nLW5hbWVzcGFjZS1p
bi14c2x0LnhtbAogCiAjIC0tLS0tLS0gZmFpbHVyZXMgZm9yIHRlc3RzIHdpdGggcmVzdWx0cwog
ZmFzdC9mb3Jtcy9kcmFnLW91dC1vZi10ZXh0YXJlYS5odG1sCkBAIC0xNDAsNyArMTY2LDYgQEAg
ZmFzdC9jc3MvaWdub3JlLXRleHQtem9vbS5odG1sCiBmYXN0L2RvbS9jbGllbnRXaWR0aEFmdGVy
RG9jdW1lbnRJc1JlbW92ZWQuaHRtbAogZmFzdC9kb20vZm9jdXMtY29udGVudGVkaXRhYmxlLmh0
bWwKIGZhc3QvZG9tL2djLTEwLmh0bWwKLWZhc3QvZG9tL2dsb2JhbC1jb25zdHJ1Y3RvcnMuaHRt
bAogZmFzdC9kb20vaXNpbmRleC0wMDIuaHRtbAogZmFzdC9kb20vb2JqZWN0LWVtYmVkLXBsdWdp
bi1zY3JpcHRpbmcuaHRtbAogZmFzdC9kb20vcmVwbGFjZUNoaWxkLmh0bWwKQEAgLTE3OSw3ICsy
MDQsNiBAQCBmYXN0L2V2ZW50cy9vbmRyYWdlbnRlci5odG1sCiBmYXN0L2V2ZW50cy9yZXZlYWwt
bGluay13aGVuLWZvY3VzZWQuaHRtbAogZmFzdC9ldmVudHMvc3RhbmRhbG9uZS1pbWFnZS1kcmFn
LXRvLWVkaXRhYmxlLmh0bWwKIGZhc3QvZXZlbnRzL3VwZGF0ZUxheW91dEZvckhpdFRlc3QuaHRt
bAotZmFzdC9ldmVudHMveHNsLW9ubG9hZC54aHRtbAogZmFzdC9mb3Jtcy9hY2Nlc3Mta2V5Lmh0
bWwKIGZhc3QvZm9ybXMvYnV0dG9uLWNhbm5vdC1iZS1uZXN0ZWQuaHRtbAogZmFzdC9mb3Jtcy9i
dXR0b24tc3BhY2ViYXItY2xpY2suaHRtbApAQCAtMjI2LDcgKzI1MCw2IEBAIGZhc3Qvb3ZlcmZs
b3cvb3ZlcmZsb3ctcnRsLmh0bWwKIGZhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3cteC15Lmh0bWwKIGZh
c3Qvb3ZlcmZsb3cvc2Nyb2xsLW5lc3RlZC1wb3NpdGlvbmVkLWxheWVyLWluLW92ZXJmbG93Lmh0
bWwKIGZhc3Qvb3ZlcmZsb3cvc2Nyb2xsUmV2ZWFsQnV0dG9uLmh0bWwKLWZhc3QvcGFyc2VyL2V4
dGVybmFsLWVudGl0aWVzLWluLXhzbHQueG1sCiBmYXN0L3BhcnNlci9leHRlcm5hbC1lbnRpdGll
cy54bWwKIGZhc3QvcGFyc2VyL3hodG1sLWFsdGVybmF0ZS1lbnRpdGllcy54bWwKIGZhc3QvcmVw
YWludC9ib3gtc2hhZG93LWguaHRtbApAQCAtMjU2LDQwICsyNzksNiBAQCBmYXN0L3RleHQvbGFy
Z2UtdGV4dC1jb21wb3NlZC1jaGFyLWRvcy5odG1sCiBmYXN0L3RleHQvbWlkd29yZC1icmVhay1h
ZnRlci1icmVha2FibGUtY2hhci5odG1sCiBmYXN0L3RleHQvdGV4dEl0ZXJhdG9yTmlsUmVuZGVy
ZXIuaHRtbAogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvMDAyLmh0bWwKLWZhc3QveHNsL2RlZmF1
bHQtaHRtbC5odG1sCi1mYXN0L3hzbC9kb2N1bWVudC1mdW5jdGlvbi54bWwKLWZhc3QveHNsL2Rv
Y3VtZW50LWZ1bmN0aW9uLnhtbAotZmFzdC94c2wvZHRkLWluLXNvdXJjZS1kb2N1bWVudC54bWwK
LWZhc3QveHNsL2R0ZC1pbi1zb3VyY2UtZG9jdW1lbnQueG1sCi1mYXN0L3hzbC9leHNsdC1ub2Rl
LXNldC54bWwKLWZhc3QveHNsL21vemlsbGEtdGVzdHMueG1sCi1mYXN0L3hzbC9tb3ppbGxhLXRl
c3RzLnhtbAotZmFzdC94c2wvdHJhbnNmb3JtLXhoci1kb2MueGh0bWwKLWZhc3QveHNsL3RyYW5z
Zm9ybVRvRnJhZ21lbnQtWE1MLWRlY2xhcmF0aW9uLmh0bWwKLWZhc3QveHNsL3hzbHQtZG9jLWVu
Yy54bWwKLWZhc3QveHNsL3hzbHQtZG9jLW5vZW5jLnhtbAotZmFzdC94c2wveHNsdC1lbmMxNi54
bWwKLWZhc3QveHNsL3hzbHQtZW5jMTZ0bzE2LnhtbAotZmFzdC94c2wveHNsdC1lbmMtY3lyLnht
bAotZmFzdC94c2wveHNsdC1lbmMueG1sCi1mYXN0L3hzbC94c2x0LWVudGl0eS1lbmMueG1sCi1m
YXN0L3hzbC94c2x0LWVudGl0eS54bWwKLWZhc3QveHNsL3hzbHQtZXh0cmEtY29udGVudC1hdC1l
bmQueG1sCi1mYXN0L3hzbC94c2x0LWV4dHJhLWNvbnRlbnQtYXQtZW5kLnhtbAotZmFzdC94c2wv
eHNsdC1mcmFnbWVudC1pbi1lbXB0eS1kb2MuaHRtbAotZmFzdC94c2wveHNsdC1pbXBvcnQtZGVw
dGgueG1sCi1mYXN0L3hzbC94c2x0LW1pc21hdGNoZWQtdGFncy1pbi14c2x0LnhtbAotZmFzdC94
c2wveHNsdC1taXNzaW5nLW5hbWVzcGFjZS1pbi14c2x0LnhtbAotZmFzdC94c2wveHNsdC1wcm9j
ZXNzb3IuaHRtbAotZmFzdC94c2wveHNsdC1wcm9jZXNzb3IuaHRtbAotZmFzdC94c2wveHNsdC1y
ZWN1cnNpb24ueG1sCi1mYXN0L3hzbC94c2x0LXJlbGF0aXZlLXBhdGgueG1sCi1mYXN0L3hzbC94
c2x0LXJlbGF0aXZlLXBhdGgueG1sCi1mYXN0L3hzbC94c2x0LXNlY29uZC1sZXZlbC1pbXBvcnQu
eG1sCi1mYXN0L3hzbC94c2x0LXNlY29uZC1sZXZlbC1pbXBvcnQueG1sCi1mYXN0L3hzbC94c2x0
LXN0cmluZy1wYXJhbWV0ZXJzLmh0bWwKLWZhc3QveHNsL3hzbHQtdXJsLnhtbAotZmFzdC94c2wv
eHNsdF91bmljb2RlLnhtbAogCiBwbHVnaW5zL2NhbGwtYXMtZnVuY3Rpb24tdGVzdC5odG1sCiBw
bHVnaW5zL2VtYmVkLWF0dHJpYnV0ZXMtc2V0dGluZy5odG1sCkBAIC0yODQ4LDcgKzI4MzcsNiBA
QCBmYXN0L2RvbS9jc3MtaW5saW5lLXN0eWxlLWltcG9ydGFudC5odG1sCiBmYXN0L2RvbS9jc3Mt
bWVkaWFydWxlLWRlbGV0ZVJ1bGUtdXBkYXRlLmh0bWwKIGZhc3QvZG9tL2Nzcy1tZWRpYXJ1bGUt
aW5zZXJ0UnVsZS11cGRhdGUuaHRtbAogZmFzdC9kb20vY3NzLXJ1bGUtZnVuY3Rpb25zLmh0bWwK
LWZhc3QvZG9tL2RvbS1jb25zdHJ1Y3RvcnMuaHRtbAogZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlh
bGl6ZS1kaXNwbGF5Lmh0bWwKIGZhc3QvZG9tL2RvbS1wYXJzZS1zZXJpYWxpemUuaHRtbAogZmFz
dC9kb20vRWxlbWVudC9jbGFzcy1hdHRyaWJ1dGUtd2hpdGVzcGFjZS5odG1sCkBAIC00OTk5LDcg
KzQ5ODcsNiBAQCBmYXN0L2RvbS9sb2NhdGlvbi1hc3NpZ24uaHRtbAogZmFzdC9kb20vdGFiaW5k
ZXgtY2xhbXAuaHRtbAogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtY2hhcnNldC5odG1sCiBm
YXN0L2RvbS9IVE1MU2NyaXB0RWxlbWVudC9uZXN0ZWQtZXhlY3V0aW9uLmh0bWwKLWZhc3QvZG9t
L1dpbmRvdy9jdXN0b20tY29uc3RydWN0b3JzLmh0bWwKIGZhc3QvZG9tL1dpbmRvdy93ZWJraXRD
b252ZXJ0UG9pbnQuaHRtbAogZmFzdC9kb20vV2luZG93L3dpbmRvdy1sb29rdXAtcHJlY2VkZW5j
ZS5odG1sCiBmYXN0L2VuY29kaW5nL2NoYXItZW5jb2RpbmctbWFjLmh0bWwKLS0gCjEuNi4zLjMK
Cg==
</data>
<flag name="review"
          id="19057"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19186"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35024</attachid>
            <date>2009-08-18 00:14:37 -0700</date>
            <delta_ts>2009-08-18 01:25:14 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>38854</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAzOWZmZTgyMzkzOGNjNGViN2UyYzMzZTNhZGJhMWI3YmZkMzJkMDFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTQ6NTM6MzggKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKCklu
IHByZXBhcmF0aW9uIGZvciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0
byB0aGUgUXQKcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29y
IGltcGxlbWVudGF0aW9uIGludG8KYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0aGF0
IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KCkFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5n
IHN0eWxlIGlzc3Vlcy4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
IHwgICAzNyArKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAg
MSArCiBXZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIHwgICAgNCArCiBXZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbCAgICAgICAgICAgIHwgICAxOSArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAgICAgICAgICB8ICAzMDYgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBX
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggICAgICAgICAgIHwgICA4MCArKysrLS0tLQogV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICB8ICAzNDIgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ1MCBpbnNlcnRpb25zKCspLCAz
NDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3NvckxpYnhzbHQuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA3NTczN2I2Li41YjU2NzhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDA5LTA4
LTE0ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIGxpYnhzbHQgc3BlY2lm
aWMgcGFydCBvZiBYU0xUUHJvY2Vzc29yIHRvIGEgc2VwYXJhdGUgZmlsZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zIHRv
IHRoZSBRdAorICAgICAgICBwb3J0LCBtb3ZlIHRoZSBsaWJ4c2x0IHBhcnQgb2YgdGhlIFhTTFRQ
cm9jZXNzb3IgaW1wbGVtZW50YXRpb24gaW50bworICAgICAgICBhbm90aGVyIGZpbGUgYW5kIGxl
YXZlIHRoZSBwYXJ0IHRoYXQgY2FuIGJlIHJldXNlZCBhbmQgc2hhcmVkLgorCisgICAgICAgIEFk
ZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6Cisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRl
c3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKTogUmVt
b3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nv
cjo6dHJhbnNmb3JtVG9GcmFnbWVudCk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnJlc2V0KTogTW92ZWQgb3V0IG9mIHRoZSBj
bGFzcyBkZWZpbml0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6IEZpeCBpbmRl
bnRhdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMpOiBNb3Zl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRYU0xUTG9hZENhbGxCYWNrKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp3
cml0ZVRvVmVjdG9yKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXZlUmVzdWx0VG9TdHJp
bmcpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRl
ck1hcCk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVhzbHRQYXJhbUFycmF5KTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIpOiBNb3ZlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZXN1bHRNSU1FVHlwZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3ZlZC4KKwogMjAwOS0wOC0xNyAgU2hpbmljaGly
byBIYW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgoKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBkYTllYjRhLi4xOTc5ZGZhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIzMzIsNiAr
MjMzMiw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWFNMVEV4dGVuc2lv
bnMuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5zaW9ucy5oIFwKIAlXZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcCBcCisJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IFwKIAlXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggXAogCVdlYkNvcmUveG1sL1hTTFRVbmlj
b2RlU29ydC5jcHAgXAogCVdlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGFkNjYx
ZjcuLjQ4YzA5NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNDEyLDYgKzM0MTIsNyBAQAogICAgICAgICAgICAgJ3htbC9Y
U0xURXh0ZW5zaW9ucy5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xURXh0ZW5zaW9ucy5oJywK
ICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAgJ3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xUUHJvY2Vzc29y
LmgnLAogICAgICAgICAgICAgJ3htbC9YU0xUVW5pY29kZVNvcnQuY3BwJywKICAgICAgICAgICAg
ICd4bWwvWFNMVFVuaWNvZGVTb3J0LmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggNzRlMTZjMi4uNWIyYzdkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0yMzU2MCw2ICsyMzU2MCwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNM
VFByb2Nlc3Nvci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggNzdhMDNm
Zi4uZGIxNzc4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIv
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9u
PSIxLjAiID8+Ci08IS0tCis8IS0tCgogQ29weXJpZ2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVy
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCkBAIC04LDEzICs4LDEzIEBAIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJl
IG1ldDoKCiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKQEAgLTUwLDcgKzUwLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKICAgICAgICAgYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAogICAgIDwvc2V0PgotCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfSlMiPgogICAgICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIu
Y3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKQEAgLTQ5MCw3ICs0OTAs
NyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxk
IFdlYkNvcmUuCiAgICAgICAgIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAKICAgICAg
ICAgZG9tL1NjcmlwdEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcAotICAgICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAKKyAgICAgICAgZG9tL1NlbGVj
dEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAogICAgICAgICBk
b20vU3RhdGljTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9TdHlsZUVsZW1lbnQuY3BwCkBAIC01
NTksNyArNTU5LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRl
ZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBlZGl0aW5nL21hcmt1cC5jcHAKICAgICAgICAg
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAogICAgIDwvc2V0PgotCisKICAgICA8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSElTVE9SWSI+CiAgICAgICAgIGhpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmNwcAogICAgICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtNTY3
LDcgKzU2Nyw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQg
dG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCiAgICAgICAg
IGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCiAgICAgPC9zZXQ+Ci0KKwogICAgIDxzZXQgYXBwZW5k
PSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19IVE1MIj4KICAgICAgICAgaHRtbC9jYW52YXMvQ2Fu
dmFzR3JhZGllbnQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCkBA
IC03MjUsNyArNzI1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5l
ZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAKICAgICAgICAgbG9hZGVyL2xvYWRlci5jcHAKICAgICA8L3NldD4KLQorCiAgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lDT04iPgogICAgICAgICBsb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCiAgICAgICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIu
Y3BwCkBAIC0xMDY5LDYgKzEwNjksNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2Yg
ZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHhtbC9YU0xURXh0ZW5zaW9u
cy5jcHAKICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKICAgICAgICAgeG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCisgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKICAgICA8
L3NldD4KCiA8L21ha2VmaWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAppbmRleCBhMjZmZTc3Li5mMzFk
YzRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcApAQCAtNDksMTU1ICs0OSwxMiBAQAogI2luY2x1ZGUg
IlhTTFRVbmljb2RlU29ydC5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgIm1hcmt1
cC5oIgotI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0cy5oPgotI2luY2x1ZGUgPGxpYnhzbHQvdmFy
aWFibGVzLmg+Ci0jaW5jbHVkZSA8bGlieHNsdC94c2x0dXRpbHMuaD4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCi0K
LVNPRlRfTElOS19MSUJSQVJZKGxpYnhzbHQpOwotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRGcmVl
U3R5bGVzaGVldCwgdm9pZCwgKHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KSwgKHNoZWV0KSkKLVNP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQsIHZvaWQsICh4c2x0VHJh
bnNmb3JtQ29udGV4dFB0ciBjdHh0KSwgKGN0eHQpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRO
ZXdUcmFuc2Zvcm1Db250ZXh0LCB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciwgKHhzbHRTdHlsZXNo
ZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jKSwgKHN0eWxlLCBkb2MpKQotU09GVF9MSU5LKGxp
YnhzbHQsIHhzbHRBcHBseVN0eWxlc2hlZXRVc2VyLCB4bWxEb2NQdHIsICh4c2x0U3R5bGVzaGVl
dFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYywgY29uc3QgY2hhcioqIHBhcmFtcywgY29uc3QgY2hh
ciogb3V0cHV0LCBGSUxFKiBwcm9maWxlLCB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB1c2VyQ3R4
dCksIChzdHlsZSwgZG9jLCBwYXJhbXMsIG91dHB1dCwgcHJvZmlsZSwgdXNlckN0eHQpKQotU09G
VF9MSU5LKGxpYnhzbHQsIHhzbHRRdW90ZVVzZXJQYXJhbXMsIGludCwgKHhzbHRUcmFuc2Zvcm1D
b250ZXh0UHRyIGN0eHQsIGNvbnN0IGNoYXIqKiBwYXJhbXMpLCAoY3R4dCwgcGFyYW1zKSkKLVNP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0Q3R4dFNvcnRGdW5jLCB2b2lkLCAoeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgY3R4dCwgeHNsdFNvcnRGdW5jIGhhbmRsZXIpLCAoY3R4dCwgaGFuZGxlcikp
Ci1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldExvYWRlckZ1bmMsIHZvaWQsICh4c2x0RG9jTG9h
ZGVyRnVuYyBmKSwgKGYpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTYXZlUmVzdWx0VG8sIGlu
dCwgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsIHhtbERvY1B0ciByZXN1bHQsIHhzbHRTdHlsZXNo
ZWV0UHRyIHN0eWxlKSwgKGJ1ZiwgcmVzdWx0LCBzdHlsZSkpCi1TT0ZUX0xJTksobGlieHNsdCwg
eHNsdE5leHRJbXBvcnQsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5
bGUpLCAoc3R5bGUpKQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKCi12b2lkIFhTTFRQ
cm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCi17Ci0g
ICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1l
c3NhZ2UuCi19Ci0KLXZvaWQgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmModm9pZCogdXNl
ckRhdGEsIHhtbEVycm9yKiBlcnJvcikKLXsKLSAgICBDb25zb2xlKiBjb25zb2xlID0gc3RhdGlj
X2Nhc3Q8Q29uc29sZSo+KHVzZXJEYXRhKTsKLSAgICBpZiAoIWNvbnNvbGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKLSAgICBzd2l0Y2ggKGVycm9yLT5sZXZl
bCkgewotICAgICAgICBjYXNlIFhNTF9FUlJfTk9ORToKLSAgICAgICAgICAgIGxldmVsID0gVGlw
TWVzc2FnZUxldmVsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9X
QVJOSU5HOgotICAgICAgICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9FUlJPUjoKLSAgICAgICAgY2FzZSBY
TUxfRVJSX0ZBVEFMOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbGV2ZWwgPSBFcnJv
ck1lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNvbnNvbGUt
PmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJv
ci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVycm9yLT5maWxlKTsKLX0KLQotLy8gRklYTUU6IFRo
ZXJlIHNlZW1zIHRvIGJlIG5vIHdheSB0byBjb250cm9sIHRoZSBjdHh0IHBvaW50ZXIgZm9yIGxv
YWRpbmcgaGVyZSwgdGh1cyB3ZSBoYXZlIGdsb2JhbHMuCi1zdGF0aWMgWFNMVFByb2Nlc3Nvciog
Z2xvYmFsUHJvY2Vzc29yID0gMDsKLXN0YXRpYyBEb2NMb2FkZXIqIGdsb2JhbERvY0xvYWRlciA9
IDA7Ci1zdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29uc3QgeG1sQ2hhciogdXJpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sRGljdFB0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhzbHRMb2FkVHlwZSB0eXBlKQotewotICAgIGlmICghZ2xvYmFsUHJvY2Vz
c29yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlIFhTTFRfTE9BRF9ET0NVTUVOVDogewotICAgICAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRl
eHRQdHIgY29udGV4dCA9ICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciljdHh0OwotICAgICAgICAg
ICAgeG1sQ2hhciogYmFzZSA9IHhtbE5vZGVHZXRCYXNlKGNvbnRleHQtPmRvY3VtZW50LT5kb2Ms
IGNvbnRleHQtPm5vZGUpOwotICAgICAgICAgICAgS1VSTCB1cmwoS1VSTChyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihiYXNlKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVy
aSkpOwotICAgICAgICAgICAgeG1sRnJlZShiYXNlKTsKLSAgICAgICAgICAgIFJlc291cmNlRXJy
b3IgZXJyb3I7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgICAgICAgICAgYm9vbCByZXF1ZXN0QWxs
b3dlZCA9IGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxEb2NMb2FkZXItPmRvYygp
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7Ci0gICAgICAgICAgICBpZiAocmVx
dWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkt
PmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0
QWxsb3dlZCA9IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocmVzcG9uc2UudXJsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFy
ZXF1ZXN0QWxsb3dlZCkgewotICAgICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAg
ICAgICAgICBnbG9iYWxEb2NMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDb25zb2xlKiBjb25zb2xlID0gMDsKLSAgICAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQo
KS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGNvbnNvbGUgPSBm
cmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKLSAgICAgICAgICAgIHhtbFNldFN0cnVjdHVy
ZWRFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMpOwotICAg
ICAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpn
ZW5lcmljRXJyb3JGdW5jKTsKLQotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBl
bmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cwotICAgICAgICAg
ICAgLy8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgotICAgICAg
ICAgICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoZGF0YS5kYXRhKCksIGRhdGEuc2l6
ZSgpLCAoY29uc3QgY2hhciopdXJpLCAwLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgeG1sU2V0
U3RydWN0dXJlZEVycm9yRnVuYygwLCAwKTsKLSAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJv
ckZ1bmMoMCwgMCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBkb2M7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBYU0xUX0xPQURfU1RZTEVTSEVFVDoKLSAgICAgICAgICAgIHJldHVybiBnbG9iYWxQ
cm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKCgo
eHNsdFN0eWxlc2hlZXRQdHIpY3R4dCktPmRvYywgdXJpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4c2x0RG9jTG9hZGVyRnVuYyBmdW5jLCBYU0xU
UHJvY2Vzc29yKiBwcm9jZXNzb3IsIERvY0xvYWRlciogbG9hZGVyKQotewotICAgIHhzbHRTZXRM
b2FkZXJGdW5jKGZ1bmMpOwotICAgIGdsb2JhbFByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLSAgICBn
bG9iYWxEb2NMb2FkZXIgPSBsb2FkZXI7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2
b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCi17Ci0gICAgVmVjdG9y
PFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hhcj4qPihjb250
ZXh0KTsKLSAgICBTdHJpbmcgZGVjb2RlZENodW5rID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIs
IGxlbik7Ci0gICAgcmVzdWx0T3V0cHV0LmFwcGVuZChkZWNvZGVkQ2h1bmsuY2hhcmFjdGVycygp
LCBkZWNvZGVkQ2h1bmsubGVuZ3RoKCkpOwotICAgIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBi
b29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0U3R5bGVzaGVl
dFB0ciBzaGVldCwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgeG1sT3V0cHV0QnVmZmVy
UHRyIG91dHB1dEJ1ZiA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKDApOwotICAgIGlmICghb3V0cHV0
QnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZl
Y3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91dHB1
dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7Ci0KLSAgICBpbnQgcmV0dmFsID0g
eHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hlZXQpOwotICAgIHhtbE91
dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7Ci0gICAgaWYgKHJldHZhbCA8IDApCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0
cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCi0gICAgaWYgKHJlc3VsdFZlY3Rvci5zaXplKCkg
PiAwICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iuc2l6ZSgpIC0gMV0gPT0gJ1xuJykKLSAg
ICAgICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsKLQotICAgIHJlc3VsdFN0cmluZyA9IFN0
cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0
aWMgaW5saW5lIHZvaWQgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhT
dHJpbmcmIHRleHQpCiB7CiAgICAgLy8gTW9kaWZ5IHRoZSBvdXRwdXQgc28gdGhhdCBpdCBpcyBh
IHdlbGwtZm9ybWVkIFhIVE1MIGRvY3VtZW50IHdpdGggYSA8cHJlPiB0YWcgZW5jbG9zaW5nIHRo
ZSB0ZXh0LgpAQCAtMjEzLDM4ICs3MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1U
ZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKFN0cmluZyYgdGV4dCkKICAgICAgICAgIjwv
aHRtbD5cbiI7CiB9Cgotc3RhdGljIGNvbnN0IGNoYXIqKiB4c2x0UGFyYW1BcnJheUZyb21QYXJh
bWV0ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwJiBwYXJhbWV0ZXJzKQotewotICAg
IGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25z
dCBjaGFyKiogcGFyYW1ldGVyQXJyYXkgPSAoY29uc3QgY2hhcioqKWZhc3RNYWxsb2MoKChwYXJh
bWV0ZXJzLnNpemUoKSAqIDIpICsgMSkgKiBzaXplb2YoY2hhciopKTsKLQotICAgIFhTTFRQcm9j
ZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gcGFyYW1ldGVycy5lbmQoKTsKLSAg
ICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJN
YXA6Oml0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPmZpcnN0LnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+
c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSAgICBwYXJhbWV0ZXJBcnJheVtpbmRleF0g
PSAwOwotCi0gICAgcmV0dXJuIHBhcmFtZXRlckFycmF5OwotfQotCi1zdGF0aWMgdm9pZCBmcmVl
WHNsdFBhcmFtQXJyYXkoY29uc3QgY2hhcioqIHBhcmFtcykKLXsKLSAgICBjb25zdCBjaGFyKiog
dGVtcCA9IHBhcmFtczsKLSAgICBpZiAoIXBhcmFtcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
d2hpbGUgKCp0ZW1wKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7IC8vIHN0cmR1
cCByZXR1cm5zIG1hbGxvYydkIGJsb2Nrcywgc28gd2UgaGF2ZSB0byB1c2UgZnJlZSgpIGhlcmUK
LSAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsKLSAgICB9Ci0gICAgZmFzdEZyZWUocGFy
YW1zKTsKLX0KLQotCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVE
b2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsCiAgICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9k
ZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMjU4LDcgKzgzLDcgQEAgUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNv
bnN0IFN0cmluZyYgc291cmMKICAgICAgICAgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1
bWVudFN0cmluZyhkb2N1bWVudFNvdXJjZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9
IG93bmVyRG9jdW1lbnQtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KHNvdXJjZU1J
TUVUeXBlLCBmcmFtZSwgZmFsc2UpOwotCisKICAgICAvLyBCZWZvcmUgcGFyc2luZywgd2UgbmVl
ZCB0byBzYXZlICYgZGV0YWNoIHRoZSBvbGQgZG9jdW1lbnQgYW5kIGdldCB0aGUgbmV3IGRvY3Vt
ZW50CiAgICAgLy8gaW4gcGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBvbmx5IGlmIHdlJ3JlIHJl
bmRlcmluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgogICAgIGlmIChmcmFtZSkgewpAQCAtMjY3LDE1
ICs5MiwxNSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1
bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogICAgICAgICByZXN1bHQtPnNldFRy
YW5zZm9ybVNvdXJjZURvY3VtZW50KGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgZnJhbWUt
PnNldERvY3VtZW50KHJlc3VsdCk7CiAgICAgfQotCisKICAgICBpZiAoc291cmNlSXNEb2N1bWVu
dCkKICAgICAgICAgcmVzdWx0LT5zZXRVUkwob3duZXJEb2N1bWVudC0+dXJsKCkpOwogICAgIHJl
c3VsdC0+b3BlbigpOwotCisKICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlwZSk7CiAgICAgZGVj
b2Rlci0+c2V0RW5jb2Rpbmcoc291cmNlRW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5n
KCkgOiBUZXh0RW5jb2Rpbmcoc291cmNlRW5jb2RpbmcpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpF
bmNvZGluZ0Zyb21YTUxIZWFkZXIpOwogICAgIHJlc3VsdC0+c2V0RGVjb2RlcihkZWNvZGVyLnJl
bGVhc2UoKSk7Ci0KKwogICAgIHJlc3VsdC0+d3JpdGUoZG9jdW1lbnRTb3VyY2UpOwogICAgIHJl
c3VsdC0+ZmluaXNoUGFyc2luZygpOwogICAgIHJlc3VsdC0+Y2xvc2UoKTsKQEAgLTI4Niw3ICsx
MTEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVu
dEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogc3RhdGljIGlubGluZSBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291
cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0
RG9jKQogewogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50
RnJhZ21lbnQ6OmNyZWF0ZShvdXRwdXREb2MpOwotCisKICAgICBpZiAoc291cmNlTUlNRVR5cGUg
PT0gInRleHQvaHRtbCIpCiAgICAgICAgIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQoc291cmNl
U3RyaW5nLCBmcmFnbWVudC5nZXQoKSk7CiAgICAgZWxzZSBpZiAoc291cmNlTUlNRVR5cGUgPT0g
InRleHQvcGxhaW4iKQpAQCAtMjk2LDExOCArMTIxLDEwIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcm
IHNvCiAgICAgICAgIGlmICghc3VjY2Vzc2Z1bFBhcnNlKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotCi0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVy
ZT8KLQotICAgIHJldHVybiBmcmFnbWVudDsKLX0KLQotc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRy
IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQdHI8WFNMU3R5bGVTaGVldD4mIGNhY2hlZFN0eWxl
c2hlZXQsIE5vZGUqIHN0eWxlc2hlZXRSb290Tm9kZSkKLXsKLSAgICBpZiAoIWNhY2hlZFN0eWxl
c2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2RlKSB7Ci0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQg
PSBYU0xTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA/IHN0
eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgOiBzdHlsZXNoZWV0Um9vdE5vZGUsCi0gICAgICAg
ICAgICBzdHlsZXNoZWV0Um9vdE5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKLSAg
ICAgICAgY2FjaGVkU3R5bGVzaGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hl
ZXRSb290Tm9kZSkpOwotICAgIH0KLQotICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAhY2Fj
aGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gY2FjaGVkU3R5bGVzaGVldC0+Y29tcGlsZVN0eWxlU2hlZXQoKTsKLX0KCi1zdGF0aWMgaW5s
aW5lIHhtbERvY1B0ciB4bWxEb2NQdHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBib29sJiBz
aG91bGREZWxldGUpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291
cmNlTm9kZS0+ZG9jdW1lbnQoKTsKLSAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNl
Tm9kZSA9PSBvd25lckRvY3VtZW50LmdldCgpKTsKLQotICAgIHhtbERvY1B0ciBzb3VyY2VEb2Mg
PSAwOwotICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQotICAgICAgICBzb3VyY2VEb2MgPSAoeG1s
RG9jUHRyKW93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOwotICAgIGlmICghc291cmNl
RG9jKSB7Ci0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5n
KG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCi0g
ICAgICAgICAgICBzb3VyY2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5n
KCkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7
Ci0gICAgfQotICAgIHJldHVybiBzb3VyY2VEb2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNo
ZWV0KQotewotICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0
byBiZSBhYmxlIHRvIGRlYWwgd2l0aDoKLSAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1
bWVudCksIFhNTCAoY3JlYXRlIGFuIFhNTCBkb2N1bWVudCksCi0gICAgLy8gYW5kIHRleHQgKHdy
YXAgaW4gYSA8cHJlPiBhbmQgY3JlYXRlIGFuIFhNTCBkb2N1bWVudCkuCi0KLSAgICBjb25zdCB4
bWxDaGFyKiByZXN1bHRUeXBlID0gMDsKLSAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5
cGUsIHNoZWV0LCBtZXRob2QpOwotICAgIGlmIChyZXN1bHRUeXBlID09IDAgJiYgcmVzdWx0RG9j
LT50eXBlID09IFhNTF9IVE1MX0RPQ1VNRU5UX05PREUpCi0gICAgICAgIHJlc3VsdFR5cGUgPSAo
Y29uc3QgeG1sQ2hhciopImh0bWwiOwotCi0gICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUs
IChjb25zdCB4bWxDaGFyKikiaHRtbCIpKQotICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7Ci0g
ICAgZWxzZSBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJ0ZXh0
IikpCi0gICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7Ci0KLSAgICByZXR1cm4gImFwcGxpY2F0
aW9uL3htbCI7Ci19Ci0KLWJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9k
ZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0
cmluZyYgcmVzdWx0RW5jb2RpbmcpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3Vt
ZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIHNldFhTTFRMb2FkQ2FsbEJhY2so
ZG9jTG9hZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOwotICAgIHhz
bHRTdHlsZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVl
dCwgbV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOwotICAgIGlmICghc2hlZXQpIHsKLSAgICAg
ICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBtX3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7Ci0KLSAgICB4bWxDaGFy
KiBvcmlnTWV0aG9kID0gc2hlZXQtPm1ldGhvZDsKLSAgICBpZiAoIW9yaWdNZXRob2QgJiYgbWlt
ZVR5cGUgPT0gInRleHQvaHRtbCIpCi0gICAgICAgIHNoZWV0LT5tZXRob2QgPSAoeG1sQ2hhciop
Imh0bWwiOwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRGcmVl
U291cmNlRG9jID0gZmFsc2U7Ci0gICAgaWYgKHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxEb2NQ
dHJGcm9tTm9kZShzb3VyY2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9jKSkgewotICAgICAgICAv
LyBUaGUgWE1MIGRlY2xhcmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2luZyB0aGUgcmVzdWx0IGFz
IGEgZnJhZ21lbnQsIGFuZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3IgZG9jdW1lbnRzLAotICAg
ICAgICAvLyBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGltbWVkaWF0
ZWx5IHBhcnNlZC4KLSAgICAgICAgc2hlZXQtPm9taXRYbWxEZWNsYXJhdGlvbiA9IHRydWU7Ci0K
LSAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgdHJhbnNmb3JtQ29udGV4dCA9IHhzbHRO
ZXdUcmFuc2Zvcm1Db250ZXh0KHNoZWV0LCBzb3VyY2VEb2MpOwotICAgICAgICByZWdpc3RlclhT
TFRFeHRlbnNpb25zKHRyYW5zZm9ybUNvbnRleHQpOwotCi0gICAgICAgIC8vIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA3Nz46IFhTTFQgcHJvY2Vzc29yIDx4c2w6
c29ydD4gYWxnb3JpdGhtIG9ubHkgY29tcGFyZXMgYnkgY29kZSBwb2ludAotICAgICAgICB4c2x0
U2V0Q3R4dFNvcnRGdW5jKHRyYW5zZm9ybUNvbnRleHQsIHhzbHRVbmljb2RlU29ydEZ1bmN0aW9u
KTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gbGlieHNs
dC4KLSAgICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEuMS4xMywg
c28gb25jZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgaWYgKHRy
YW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKLSAgICAgICAgICAgdHJhbnNmb3Jt
Q29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOwotCi0gICAgICAgIGNvbnN0
IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9wYXJhbWV0
ZXJzKTsKLSAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0LCBwYXJh
bXMpOwotICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVzaGVldFVz
ZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7Ci0KLSAgICAg
ICAgeHNsdEZyZWVUcmFuc2Zvcm1Db250ZXh0KHRyYW5zZm9ybUNvbnRleHQpOwotICAgICAgICBm
cmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKLQotICAgICAgICBpZiAoc2hvdWxkRnJlZVNvdXJj
ZURvYykKLSAgICAgICAgICAgIHhtbEZyZWVEb2Moc291cmNlRG9jKTsKLQotICAgICAgICBpZiAo
c3VjY2VzcyA9IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0LCByZXN1bHRTdHJp
bmcpKSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBlKHJlc3VsdERvYywg
c2hlZXQpOwotICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciopcmVzdWx0RG9jLT5l
bmNvZGluZzsKLSAgICAgICAgfQotICAgICAgICB4bWxGcmVlRG9jKHJlc3VsdERvYyk7Ci0gICAg
fQotCi0gICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7Ci0gICAgc2V0WFNMVExvYWRDYWxs
QmFjaygwLCAwLCAwKTsKLSAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOwotICAgIG1fc3R5
bGVzaGVldCA9IDA7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMg
aGVyZT8KCi0gICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgcmV0dXJuIGZyYWdtZW50OwogfQoKIFBh
c3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoTm9k
ZSogc291cmNlTm9kZSkKQEAgLTQyOSw3ICsxNDYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlTm9k
ZQogICAgIC8vIElmIHRoZSBvdXRwdXQgZG9jdW1lbnQgaXMgSFRNTCwgZGVmYXVsdCB0byBIVE1M
IG1ldGhvZC4KICAgICBpZiAob3V0cHV0RG9jLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICBy
ZXN1bHRNSU1FVHlwZSA9ICJ0ZXh0L2h0bWwiOwotCisKICAgICBpZiAoIXRyYW5zZm9ybVRvU3Ry
aW5nKHNvdXJjZU5vZGUsIHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29k
aW5nKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVNv
dXJjZShyZXN1bHRTdHJpbmcsIHJlc3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwpAQCAtNDU1LDYg
KzE3MiwxMyBAQCB2b2lkIFhTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJp
bmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmluZwogICAgIG1fcGFyYW1ldGVycy5yZW1v
dmUobG9jYWxOYW1lKTsKIH0KCit2b2lkIFhTTFRQcm9jZXNzb3I6OnJlc2V0KCkKK3sKKyAgICBt
X3N0eWxlc2hlZXQuY2xlYXIoKTsKKyAgICBtX3N0eWxlc2hlZXRSb290Tm9kZS5jbGVhcigpOwor
ICAgIG1fcGFyYW1ldGVycy5jbGVhcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgog
I2VuZGlmIC8vIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5oIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCmluZGV4IDllZTJhYWQuLjQ1ZjVj
YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAorKysgYi9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmgKQEAgLTM0LDQ2ICszNCw0NiBAQAoKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKCi1jbGFzcyBGcmFtZTsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRG9jdW1lbnRGcmFn
bWVudDsKLQotY2xhc3MgWFNMVFByb2Nlc3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9j
ZXNzb3I+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KLQotICAgIHZv
aWQgc2V0WFNMU3R5bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQp
IHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVTaGVldDsgfQotICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJp
bmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0
cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4g
Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBz
b3VyY2VOb2RlLCBGcmFtZSogZnJhbWUpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMKLSAgICB2b2lk
IGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBzdHlsZSkgeyBtX3N0eWxlc2hlZXRS
b290Tm9kZSA9IHN0eWxlOyB9Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0cmFu
c2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0RG9jKTsKLSAgICBQ
YXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZSk7Ci0K
LSAgICB2b2lkIHNldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3Qg
U3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIFN0cmluZyBnZXRQ
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxO
YW1lKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOwotICAgIHZvaWQgY2xlYXJQYXJhbWV0
ZXJzKCkgeyBtX3BhcmFtZXRlcnMuY2xlYXIoKTsgfQotCi0gICAgdm9pZCByZXNldCgpIHsgbV9z
dHlsZXNoZWV0LmNsZWFyKCk7IG1fc3R5bGVzaGVldFJvb3ROb2RlLmNsZWFyKCk7ICBtX3BhcmFt
ZXRlcnMuY2xlYXIoKTsgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCog
dXNlckRhdGEsIHhtbEVycm9yKik7Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2
b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhciogbXNnLCAuLi4pOwotCi1wdWJsaWM6Ci0gICAgLy8g
T25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKLSAgICBYU0xTdHlsZVNoZWV0KiB4c2xTdHlsZXNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZXNoZWV0LmdldCgpOyB9Ci0KLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKLQotcHJpdmF0ZToKLSAgICBY
U0xUUHJvY2Vzc29yKCkgeyB9Ci0KLSAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNo
ZWV0OwotICAgIFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKLSAgICBQYXJhbWV0
ZXJNYXAgbV9wYXJhbWV0ZXJzOwotfTsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBEb2N1
bWVudDsKKyAgICBjbGFzcyBEb2N1bWVudEZyYWdtZW50OworCisgICAgY2xhc3MgWFNMVFByb2Nl
c3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQorCisgICAgICAgIHZvaWQgc2V0WFNMU3R5
bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNo
ZWV0ID0gc3R5bGVTaGVldDsgfQorICAgICAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUq
IHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0
cmluZyYgcmVzdWx0RW5jb2RpbmcpOworICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVh
dGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
c291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJj
ZU5vZGUsIEZyYW1lKiBmcmFtZSk7CisKKyAgICAgICAgLy8gRE9NIG1ldGhvZHMKKyAgICAgICAg
dm9pZCBpbXBvcnRTdHlsZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9zdHlsZXNo
ZWV0Um9vdE5vZGUgPSBzdHlsZTsgfQorICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3VwdXREb2Mp
OworICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUq
IHNvdXJjZSk7CisKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1l
c3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KyAgICAgICAgU3RyaW5nIGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZVBhcmFt
ZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUp
OworICAgICAgICB2b2lkIGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7
IH0KKworICAgICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VF
cnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKik7CisgICAgICAgIHN0YXRpYyB2b2lk
IGdlbmVyaWNFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsK
KworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKKyAg
ICAgICAgWFNMU3R5bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGVzaGVldC5nZXQoKTsgfQorCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gUGFyYW1ldGVyTWFwOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgWFNMVFByb2Nlc3Nvcigp
IHsgfQorCisgICAgICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlc2hlZXQ7CisgICAg
ICAgIFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKKyAgICAgICAgUGFyYW1ldGVy
TWFwIG1fcGFyYW1ldGVyczsKKyAgICB9OwoKIH0KCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhOWM2ZAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApAQCAtMCww
ICsxLDM0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50
YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9j
TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiIC8vIGZv
ciBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNs
dWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUg
IlhNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIlhTTFRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAi
WFNMVFVuaWNvZGVTb3J0LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAibWFya3Vw
LmgiCisjaW5jbHVkZSA8bGlieHNsdC9pbXBvcnRzLmg+CisjaW5jbHVkZSA8bGlieHNsdC92YXJp
YWJsZXMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGlscy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisK
K1NPRlRfTElOS19MSUJSQVJZKGxpYnhzbHQpOworU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRGcmVl
U3R5bGVzaGVldCwgdm9pZCwgKHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KSwgKHNoZWV0KSkKK1NP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQsIHZvaWQsICh4c2x0VHJh
bnNmb3JtQ29udGV4dFB0ciBjdHh0KSwgKGN0eHQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRO
ZXdUcmFuc2Zvcm1Db250ZXh0LCB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciwgKHhzbHRTdHlsZXNo
ZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jKSwgKHN0eWxlLCBkb2MpKQorU09GVF9MSU5LKGxp
YnhzbHQsIHhzbHRBcHBseVN0eWxlc2hlZXRVc2VyLCB4bWxEb2NQdHIsICh4c2x0U3R5bGVzaGVl
dFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYywgY29uc3QgY2hhcioqIHBhcmFtcywgY29uc3QgY2hh
ciogb3V0cHV0LCBGSUxFKiBwcm9maWxlLCB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB1c2VyQ3R4
dCksIChzdHlsZSwgZG9jLCBwYXJhbXMsIG91dHB1dCwgcHJvZmlsZSwgdXNlckN0eHQpKQorU09G
VF9MSU5LKGxpYnhzbHQsIHhzbHRRdW90ZVVzZXJQYXJhbXMsIGludCwgKHhzbHRUcmFuc2Zvcm1D
b250ZXh0UHRyIGN0eHQsIGNvbnN0IGNoYXIqKiBwYXJhbXMpLCAoY3R4dCwgcGFyYW1zKSkKK1NP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0Q3R4dFNvcnRGdW5jLCB2b2lkLCAoeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgY3R4dCwgeHNsdFNvcnRGdW5jIGhhbmRsZXIpLCAoY3R4dCwgaGFuZGxlcikp
CitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldExvYWRlckZ1bmMsIHZvaWQsICh4c2x0RG9jTG9h
ZGVyRnVuYyBmKSwgKGYpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTYXZlUmVzdWx0VG8sIGlu
dCwgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsIHhtbERvY1B0ciByZXN1bHQsIHhzbHRTdHlsZXNo
ZWV0UHRyIHN0eWxlKSwgKGJ1ZiwgcmVzdWx0LCBzdHlsZSkpCitTT0ZUX0xJTksobGlieHNsdCwg
eHNsdE5leHRJbXBvcnQsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5
bGUpLCAoc3R5bGUpKQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBYU0xU
UHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKHZvaWQqLCBjb25zdCBjaGFyKiwgLi4uKQorewor
ICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhpcyBlcnJvciBt
ZXNzYWdlLgorfQorCit2b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVz
ZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCit7CisgICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRp
Y19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7CisgICAgaWYgKCFjb25zb2xlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7CisgICAgc3dpdGNoIChlcnJvci0+bGV2
ZWwpIHsKKyAgICBjYXNlIFhNTF9FUlJfTk9ORToKKyAgICAgICAgbGV2ZWwgPSBUaXBNZXNzYWdl
TGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX0VSUl9XQVJOSU5HOgorICAgICAg
ICBsZXZlbCA9IFdhcm5pbmdNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
WE1MX0VSUl9FUlJPUjoKKyAgICBjYXNlIFhNTF9FUlJfRkFUQUw6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgbGV2ZWwsIGVycm9yLT5tZXNzYWdlLCBlcnJvci0+bGluZSwgZXJyb3ItPmZpbGUpOworfQor
CisvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8gYmUgbm8gd2F5IHRvIGNvbnRyb2wgdGhlIGN0eHQg
cG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0aHVzIHdlIGhhdmUgZ2xvYmFscy4KK3N0YXRpYyBY
U0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNzb3IgPSAwOworc3RhdGljIERvY0xvYWRlciogZ2xv
YmFsRG9jTG9hZGVyID0gMDsKK3N0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4
bWxDaGFyKiB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxEaWN0
UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjdHh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNsdExvYWRUeXBlIHR5cGUpCit7CisgICAgaWYg
KCFnbG9iYWxQcm9jZXNzb3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsKKyAgICAgICAgeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgY29udGV4dCA9ICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciljdHh0OworICAg
ICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRv
YywgY29udGV4dC0+bm9kZSk7CisgICAgICAgIEtVUkwgdXJsKEtVUkwocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmkp
KTsKKyAgICAgICAgeG1sRnJlZShiYXNlKTsKKyAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsK
KyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKKworICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVy
LT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QodXJsKTsKKyAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgICAg
ICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRh
KTsKKyAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkgeworICAgICAgICAgICAgZGF0YS5jbGVhcigp
OworICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2Uo
dXJsKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnNvbGUqIGNvbnNvbGUgPSAwOworICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPm93
bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGNvbnNvbGUgPSBmcmFtZS0+ZG9t
V2luZG93KCktPmNvbnNvbGUoKTsKKyAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYyhj
b25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyk7CisgICAgICAgIHhtbFNldEdl
bmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyk7
CisKKyAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBlbmNvZGluZyBoZXJlLiBOZWl0aGVy
IEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cworICAgICAgICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lm
aWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCisgICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFk
TWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0
aW9ucyk7CisKKyAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygwLCAwKTsKKyAgICAg
ICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCAwKTsKKworICAgICAgICByZXR1cm4gZG9jOwor
ICAgIH0KKyAgICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNIRUVUOgorICAgICAgICByZXR1cm4gZ2xv
YmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJj
ZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVyaSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBzZXRYU0xUTG9hZENhbGxCYWNrKHhzbHREb2NMb2FkZXJGdW5jIGZ1bmMsIFhTTFRQcm9j
ZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9hZGVyKiBsb2FkZXIpCit7CisgICAgeHNsdFNldExvYWRl
ckZ1bmMoZnVuYyk7CisgICAgZ2xvYmFsUHJvY2Vzc29yID0gcHJvY2Vzc29yOworICAgIGdsb2Jh
bERvY0xvYWRlciA9IGxvYWRlcjsKK30KKworc3RhdGljIGludCB3cml0ZVRvVmVjdG9yKHZvaWQq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKK3sKKyAgICBWZWN0b3I8VUNo
YXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQp
OworICAgIFN0cmluZyBkZWNvZGVkQ2h1bmsgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlciwgbGVu
KTsKKyAgICByZXN1bHRPdXRwdXQuYXBwZW5kKGRlY29kZWRDaHVuay5jaGFyYWN0ZXJzKCksIGRl
Y29kZWRDaHVuay5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGJvb2wg
c2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRy
IHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICB4bWxPdXRwdXRCdWZmZXJQdHIg
b3V0cHV0QnVmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoMCk7CisgICAgaWYgKCFvdXRwdXRCdWYp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9y
OworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRWZWN0b3I7CisgICAgb3V0cHV0QnVm
LT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsKKworICAgIGludCByZXR2YWwgPSB4c2x0
U2F2ZVJlc3VsdFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBzaGVldCk7CisgICAgeG1sT3V0cHV0
QnVmZmVyQ2xvc2Uob3V0cHV0QnVmKTsKKyAgICBpZiAocmV0dmFsIDwgMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3IgPGh0dHA6Ly9idWd6aWxsYS5nbm9t
ZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhzbHQgYXBwZW5kcyBhbiBleHRyYSBs
aW5lIGZlZWQgdG8gdGhlIHJlc3VsdC4KKyAgICBpZiAocmVzdWx0VmVjdG9yLnNpemUoKSA+IDAg
JiYgcmVzdWx0VmVjdG9yW3Jlc3VsdFZlY3Rvci5zaXplKCkgLSAxXSA9PSAnXG4nKQorICAgICAg
ICByZXN1bHRWZWN0b3IucmVtb3ZlTGFzdCgpOworCisgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5n
OjphZG9wdChyZXN1bHRWZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6
OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVycykKK3sKKyAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hhcioqIHBhcmFtZXRlckFycmF5
ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFsbG9jKCgocGFyYW1ldGVycy5zaXplKCkgKiAyKSArIDEp
ICogc2l6ZW9mKGNoYXIqKSk7CisKKyAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOwor
ICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFt
ZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIHBhcmFtZXRlckFycmF5
W2luZGV4KytdID0gc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcGFy
YW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsK
KyAgICB9CisgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKKworICAgIHJldHVybiBwYXJh
bWV0ZXJBcnJheTsKK30KKworc3RhdGljIHZvaWQgZnJlZVhzbHRQYXJhbUFycmF5KGNvbnN0IGNo
YXIqKiBwYXJhbXMpCit7CisgICAgY29uc3QgY2hhcioqIHRlbXAgPSBwYXJhbXM7CisgICAgaWYg
KCFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlICgqdGVtcCkgeworICAgICAg
ICBmcmVlKCh2b2lkKikqKHRlbXArKykpOyAvLyBzdHJkdXAgcmV0dXJucyBtYWxsb2MnZCBibG9j
a3MsIHNvIHdlIGhhdmUgdG8gdXNlIGZyZWUoKSBoZXJlCisgICAgICAgIGZyZWUoKHZvaWQqKSoo
dGVtcCsrKSk7CisgICAgfQorICAgIGZhc3RGcmVlKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB4c2x0
U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIoUmVmUHRyPFhTTFN0eWxlU2hlZXQ+
JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0Um9vdE5vZGUpCit7CisgICAgaWYg
KCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290Tm9kZSkgeworICAgICAgICBjYWNo
ZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlc2hlZXRSb290Tm9kZS0+
cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDogc3R5bGVzaGVldFJvb3RO
b2RlLAorICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1h
cmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKKyAgICB9CisKKyAgICBpZiAoIWNhY2hlZFN0eWxl
c2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVTdHlsZVNoZWV0KCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJj
ZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3sKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVy
RG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOworICAgIGJvb2wgc291cmNlSXNEb2N1
bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOworCisgICAgeG1sRG9j
UHRyIHNvdXJjZURvYyA9IDA7CisgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCisgICAgICAgIHNv
dXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCk7Cisg
ICAgaWYgKCFzb3VyY2VEb2MpIHsKKyAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cil4bWxE
b2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCksIGNyZWF0ZU1hcmt1cChz
b3VyY2VOb2RlKSwKKyAgICAgICAgICAgIHNvdXJjZUlzRG9jdW1lbnQgPyBvd25lckRvY3VtZW50
LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKKyAgICAgICAgc2hvdWxkRGVsZXRlID0gc291
cmNlRG9jOworICAgIH0KKyAgICByZXR1cm4gc291cmNlRG9jOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyByZXN1bHRNSU1FVHlwZSh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0U3R5bGVzaGVl
dFB0ciBzaGVldCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2Ygb3V0cHV0IHdl
IG5lZWQgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGg6CisgICAgLy8gSFRNTCAoY3JlYXRlIGFuIEhU
TUwgZG9jdW1lbnQpLCBYTUwgKGNyZWF0ZSBhbiBYTUwgZG9jdW1lbnQpLAorICAgIC8vIGFuZCB0
ZXh0ICh3cmFwIGluIGEgPHByZT4gYW5kIGNyZWF0ZSBhbiBYTUwgZG9jdW1lbnQpLgorCisgICAg
Y29uc3QgeG1sQ2hhciogcmVzdWx0VHlwZSA9IDA7CisgICAgWFNMVF9HRVRfSU1QT1JUX1BUUihy
ZXN1bHRUeXBlLCBzaGVldCwgbWV0aG9kKTsKKyAgICBpZiAoIXJlc3VsdFR5cGUgJiYgcmVzdWx0
RG9jLT50eXBlID09IFhNTF9IVE1MX0RPQ1VNRU5UX05PREUpCisgICAgICAgIHJlc3VsdFR5cGUg
PSAoY29uc3QgeG1sQ2hhciopImh0bWwiOworCisgICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5
cGUsIChjb25zdCB4bWxDaGFyKikiaHRtbCIpKQorICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7
CisgICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikidGV4dCIp
KQorICAgICAgICByZXR1cm4gInRleHQvcGxhaW4iOworCisgICAgcmV0dXJuICJhcHBsaWNhdGlv
bi94bWwiOworfQorCitib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUq
IHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJp
bmcmIHJlc3VsdEVuY29kaW5nKQoreworICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVu
dCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisKKyAgICBzZXRYU0xUTG9hZENhbGxCYWNrKGRv
Y0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpKTsKKyAgICB4c2x0
U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQs
IG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKKyAgICBpZiAoIXNoZWV0KSB7CisgICAgICAg
IHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOworCisgICAgeG1sQ2hhciog
b3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7CisgICAgaWYgKCFvcmlnTWV0aG9kICYmIG1pbWVU
eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBzaGVldC0+bWV0aG9kID0gKHhtbENoYXIqKSJo
dG1sIjsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkRnJlZVNv
dXJjZURvYyA9IGZhbHNlOworICAgIGlmICh4bWxEb2NQdHIgc291cmNlRG9jID0geG1sRG9jUHRy
RnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykpIHsKKyAgICAgICAgLy8g
VGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcgdGhlIHJlc3VsdCBhcyBh
IGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRvY3VtZW50cywKKyAgICAg
ICAgLy8gYXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBpbW1lZGlhdGVs
eSBwYXJzZWQuCisgICAgICAgIHNoZWV0LT5vbWl0WG1sRGVjbGFyYXRpb24gPSB0cnVlOworCisg
ICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5zZm9ybUNvbnRleHQgPSB4c2x0TmV3
VHJhbnNmb3JtQ29udGV4dChzaGVldCwgc291cmNlRG9jKTsKKyAgICAgICAgcmVnaXN0ZXJYU0xU
RXh0ZW5zaW9ucyh0cmFuc2Zvcm1Db250ZXh0KTsKKworICAgICAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3NvciA8eHNsOnNv
cnQ+IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKKyAgICAgICAgeHNsdFNl
dEN0eHRTb3J0RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik7
CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIGxpYnhzbHQu
CisgICAgICAgIC8vIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgaW4gdmVyc2lvbiAxLjEuMTMsIHNv
IG9uY2Ugd2Ugc2hpcCB0aGF0IHRoaXMgY2FuIGJlIHJlbW92ZWQuCisgICAgICAgIGlmICghdHJh
bnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycykKKyAgICAgICAgICAgdHJhbnNmb3JtQ29udGV4dC0+
Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOworCisgICAgICAgIGNvbnN0IGNoYXIqKiBw
YXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9wYXJhbWV0ZXJzKTsKKyAg
ICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0LCBwYXJhbXMpOworICAg
ICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVzaGVldFVzZXIoc2hlZXQs
IHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7CisKKyAgICAgICAgeHNsdEZy
ZWVUcmFuc2Zvcm1Db250ZXh0KHRyYW5zZm9ybUNvbnRleHQpOworICAgICAgICBmcmVlWHNsdFBh
cmFtQXJyYXkocGFyYW1zKTsKKworICAgICAgICBpZiAoc2hvdWxkRnJlZVNvdXJjZURvYykKKyAg
ICAgICAgICAgIHhtbEZyZWVEb2Moc291cmNlRG9jKTsKKworICAgICAgICBpZiAoc3VjY2VzcyA9
IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0LCByZXN1bHRTdHJpbmcpKSB7Cisg
ICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBlKHJlc3VsdERvYywgc2hlZXQpOwor
ICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciopcmVzdWx0RG9jLT5lbmNvZGluZzsK
KyAgICAgICAgfQorICAgICAgICB4bWxGcmVlRG9jKHJlc3VsdERvYyk7CisgICAgfQorCisgICAg
c2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7CisgICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAw
LCAwKTsKKyAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOworICAgIG1fc3R5bGVzaGVldCA9
IDA7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="19209"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19210"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35027</attachid>
            <date>2009-08-18 01:25:14 -0700</date>
            <delta_ts>2009-08-18 11:57:32 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>39275</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBiYTlkZjc3OGZjMTUyNGYyOTQ1NzdlOGE1MmNkNzQxODNiMDllOTg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTQgQXVnIDIwMDkgMTQ6NTM6MzggKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwoKSW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zIHRv
IHRoZSBRdApwb3J0LCBtb3ZlIHRoZSBsaWJ4c2x0IHBhcnQgb2YgdGhlIFhTTFRQcm9jZXNzb3Ig
aW1wbGVtZW50YXRpb24gaW50bwphbm90aGVyIGZpbGUgYW5kIGxlYXZlIHRoZSBwYXJ0IHRoYXQg
Y2FuIGJlIHJldXNlZCBhbmQgc2hhcmVkLgoKQWRkaXRpb25hbGx5LCBmaXggc29tZSBjb2Rpbmcg
c3R5bGUgaXNzdWVzLgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
fCAgIDM3ICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgfCAgICAx
ICsKIFdlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogfCAgIDE2ICstCiBXZWJDb3JlL1dlYkNv
cmVTb3VyY2VzLmJrbCAgICAgICAgICAgIHwgICAxOSArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAgICAgICAgICB8ICAzMDYgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBX
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggICAgICAgICAgIHwgICA4MCArKysrLS0tLQogV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICB8ICAzNDIgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ1NiBpbnNlcnRpb25zKCspLCAz
NDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3NvckxpYnhzbHQuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwZTYwNDFmLi5jM2FiOWE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDA5LTA4
LTE0ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIGxpYnhzbHQgc3BlY2lm
aWMgcGFydCBvZiBYU0xUUHJvY2Vzc29yIHRvIGEgc2VwYXJhdGUgZmlsZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zIHRv
IHRoZSBRdAorICAgICAgICBwb3J0LCBtb3ZlIHRoZSBsaWJ4c2x0IHBhcnQgb2YgdGhlIFhTTFRQ
cm9jZXNzb3IgaW1wbGVtZW50YXRpb24gaW50bworICAgICAgICBhbm90aGVyIGZpbGUgYW5kIGxl
YXZlIHRoZSBwYXJ0IHRoYXQgY2FuIGJlIHJldXNlZCBhbmQgc2hhcmVkLgorCisgICAgICAgIEFk
ZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6Cisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRl
c3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKTogUmVt
b3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nv
cjo6dHJhbnNmb3JtVG9GcmFnbWVudCk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnJlc2V0KTogTW92ZWQgb3V0IG9mIHRoZSBj
bGFzcyBkZWZpbml0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6IEZpeCBpbmRl
bnRhdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMpOiBNb3Zl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRYU0xUTG9hZENhbGxCYWNrKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp3
cml0ZVRvVmVjdG9yKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXZlUmVzdWx0VG9TdHJp
bmcpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRl
ck1hcCk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVhzbHRQYXJhbUFycmF5KTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIpOiBNb3ZlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZXN1bHRNSU1FVHlwZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3ZlZC4KKwogMjAwOS0wOC0xNyAgU2hpbmljaGly
byBIYW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggOGU0NDhhNS4uZDI2Y2IyMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMzUxLDYg
KzIzNTEsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNp
b25zLmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMVEV4dGVuc2lvbnMuaCBcCiAJV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3Nvci5jcHAgXAorCVdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCBcCiAJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oIFwKIAlXZWJDb3JlL3htbC9YU0xUVW5p
Y29kZVNvcnQuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkOWM1
NGE0Li42MmYzYzMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQxMiw2ICszNDEyLDcgQEAKICAgICAgICAgICAgICd4bWwv
WFNMVEV4dGVuc2lvbnMuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVEV4dGVuc2lvbnMuaCcs
CiAgICAgICAgICAgICAneG1sL1hTTFRQcm9jZXNzb3IuY3BwJywKKyAgICAgICAgICAgICd4bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nv
ci5oJywKICAgICAgICAgICAgICd4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCcsCiAgICAgICAgICAg
ICAneG1sL1hTTFRVbmljb2RlU29ydC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDc5ZTgxNjIuLjY3MmI1NjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtMjM2MTMsMTIgKzIzNjEzLDE2IEBACiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3Nvci5jcHAiDQotCQkJCT4NCi0J
CQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nl
c3Nvci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRQ
cm9jZXNzb3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHhtbFxYU0xUVW5pY29kZVNvcnQuY3BwIg0KIAkJCQk+DQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRl
eCBiZDk0YTY1Li5lNzQ1YjFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1s
IHZlcnNpb249IjEuMCIgPz4KLTwhLS0gCis8IS0tCiAKIENvcHlyaWdodCAoQykgMjAwNyBLZXZp
biBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTgsMTMgKzgsMTMgQEAgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCiBhcmUgbWV0OgogCiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAK
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC01MCw3ICs1MCw3IEBAIFRoaXMg
ZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4K
ICAgICAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCiAgICAgICAg
IGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAg
IDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19KUyI+CiAgICAgICAgIGJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9t
LmNwcApAQCAtNDkzLDcgKzQ5Myw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBm
aWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgZG9tL1JlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLmNwcAogICAgICAgICBkb20vU2NyaXB0RWxlbWVudC5jcHAKICAgICAgICAgZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCi0gICAgICAgIGRvbS9TZWxlY3RFbGVtZW50LmNw
cCAKKyAgICAgICAgZG9tL1NlbGVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9TZWxlY3Rvck5v
ZGVMaXN0LmNwcAogICAgICAgICBkb20vU3RhdGljTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9T
dHlsZUVsZW1lbnQuY3BwCkBAIC01NjIsNyArNTYyLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBlZGl0aW5n
L21hcmt1cC5jcHAKICAgICAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAogICAgIDwvc2V0
PgotICAgIAorCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0hJU1RP
UlkiPgogICAgICAgICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKICAgICAgICAgaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHAKQEAgLTU3MCw3ICs1NzAsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGhpc3Rv
cnkvUGFnZUNhY2hlLmNwcAogICAgICAgICBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAogICAgIDwv
c2V0PgotICAgIAorCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0hU
TUwiPgogICAgICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKICAgICAgICAgaHRt
bC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAKQEAgLTcyOCw3ICs3MjgsNyBAQCBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAg
ICAgIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAogICAgICAgICBsb2FkZXIvbG9h
ZGVyLmNwcAogICAgIDwvc2V0PgotICAgIAorCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VC
Q09SRV9TT1VSQ0VTX0lDT04iPgogICAgICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3Bw
CiAgICAgICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCkBAIC0xMDczLDYgKzEwNzMsNyBA
QCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdl
YkNvcmUuCiAgICAgICAgIHhtbC9YU0xURXh0ZW5zaW9ucy5jcHAKICAgICAgICAgeG1sL1hTTFRV
bmljb2RlU29ydC5jcHAKICAgICAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCisgICAgICAgIHht
bC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKICAgICA8L3NldD4KIAogPC9tYWtlZmlsZT4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5jcHAKaW5kZXggOWZkZjMxZi4uNmQ5OTIyMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5j
cHAKQEAgLTQ5LDE1NSArNDksMTIgQEAKICNpbmNsdWRlICJYU0xUVW5pY29kZVNvcnQuaCIKICNp
bmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0
L2ltcG9ydHMuaD4KLSNpbmNsdWRlIDxsaWJ4c2x0L3ZhcmlhYmxlcy5oPgotI2luY2x1ZGUgPGxp
YnhzbHQveHNsdHV0aWxzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9S
TShNQUMpCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLQotU09GVF9MSU5LX0xJQlJBUlkobGli
eHNsdCk7Ci1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2b2lkLCAoeHNs
dFN0eWxlc2hlZXRQdHIgc2hlZXQpLCAoc2hlZXQpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRG
cmVlVHJhbnNmb3JtQ29udGV4dCwgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQp
LCAoY3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRleHQsIHhz
bHRUcmFuc2Zvcm1Db250ZXh0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0
ciBkb2MpLCAoc3R5bGUsIGRvYykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5U3R5bGVz
aGVldFVzZXIsIHhtbERvY1B0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIg
ZG9jLCBjb25zdCBjaGFyKiogcGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUqIHByb2Zp
bGUsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2MsIHBhcmFt
cywgb3V0cHV0LCBwcm9maWxlLCB1c2VyQ3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFF1
b3RlVXNlclBhcmFtcywgaW50LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgY29uc3Qg
Y2hhcioqIHBhcmFtcyksIChjdHh0LCBwYXJhbXMpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRT
ZXRDdHh0U29ydEZ1bmMsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0
U29ydEZ1bmMgaGFuZGxlciksIChjdHh0LCBoYW5kbGVyKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4
c2x0U2V0TG9hZGVyRnVuYywgdm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikpCi1TT0ZU
X0xJTksobGlieHNsdCwgeHNsdFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVmZmVyUHRy
IGJ1ZiwgeG1sRG9jUHRyIHJlc3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoYnVmLCBy
ZXN1bHQsIHN0eWxlKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwgeHNsdFN0
eWxlc2hlZXRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkpCi0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJv
ckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCi17Ci0gICAgLy8gSXQgd291bGQgYmUgbmlj
ZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCi19Ci0gICAgCi12b2lk
IFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciog
ZXJyb3IpCi17Ci0gICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1
c2VyRGF0YSk7Ci0gICAgaWYgKCFjb25zb2xlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZXNz
YWdlTGV2ZWwgbGV2ZWw7Ci0gICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKLSAgICAgICAgY2Fz
ZSBYTUxfRVJSX05PTkU6Ci0gICAgICAgICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VMZXZlbDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfV0FSTklORzoKLSAgICAgICAg
ICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFhNTF9FUlJfRVJST1I6Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9GQVRBTDoKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb25zb2xlLT5hZGRNZXNzYWdlKFhNTE1l
c3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZXJyb3ItPm1lc3NhZ2UsIGVycm9y
LT5saW5lLCBlcnJvci0+ZmlsZSk7Ci19Ci0KLS8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBu
byB3YXkgdG8gY29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUsIHRodXMg
d2UgaGF2ZSBnbG9iYWxzLgotc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9
IDA7Ci1zdGF0aWMgRG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOwotc3RhdGljIHhtbERv
Y1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbENoYXIqIHVyaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhtbERpY3RQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQqIGN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2x0
TG9hZFR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgWFNMVF9MT0FE
X0RPQ1VNRU5UOiB7Ci0gICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjb250ZXh0
ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7Ci0gICAgICAgICAgICB4bWxDaGFyKiBi
YXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9k
ZSk7Ci0gICAgICAgICAgICBLVVJMIHVybChLVVJMKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7Ci0gICAgICAg
ICAgICB4bWxGcmVlKGJhc2UpOwotICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAg
ICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0KLSAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOwotCi0gICAgICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFs
RG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3QodXJsKTsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0QWxsb3dlZCkg
ewotICAgICAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xv
YmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25z
ZS51cmwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2Vk
KSB7Ci0gICAgICAgICAgICAgICAgZGF0YS5jbGVhcigpOwotICAgICAgICAgICAgICAgIGdsb2Jh
bERvY0xvYWRlci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIENvbnNvbGUqIGNvbnNvbGUgPSAwOwotICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3Vt
ZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21XaW5k
b3coKS0+Y29uc29sZSgpOwotICAgICAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYyhj
b25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyk7Ci0gICAgICAgICAgICB4bWxT
ZXRHZW5lcmljRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1
bmMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBzcGVjaWZ5IGFuIGVu
Y29kaW5nIGhlcmUuIE5laXRoZXIgR2Vja28gbm9yIFdpbklFIHJlc3BlY3RzCi0gICAgICAgICAg
ICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCi0gICAgICAg
ICAgICB4bWxEb2NQdHIgZG9jID0geG1sUmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCksIChjb25zdCBjaGFyKil1cmksIDAsIG9wdGlvbnMpOwotCi0gICAgICAgICAgICB4bWxTZXRT
dHJ1Y3R1cmVkRXJyb3JGdW5jKDAsIDApOwotICAgICAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9y
RnVuYygwLCAwKTsKLQotICAgICAgICAgICAgcmV0dXJuIGRvYzsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNIRUVUOgotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFBy
b2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgpLT5sb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoKCh4
c2x0U3R5bGVzaGVldFB0ciljdHh0KS0+ZG9jLCB1cmkpOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgc2V0WFNMVExvYWRDYWxsQmFjayh4c2x0RG9jTG9hZGVyRnVuYyBmdW5jLCBY
U0xUUHJvY2Vzc29yKiBwcm9jZXNzb3IsIERvY0xvYWRlciogbG9hZGVyKQotewotICAgIHhzbHRT
ZXRMb2FkZXJGdW5jKGZ1bmMpOwotICAgIGdsb2JhbFByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLSAg
ICBnbG9iYWxEb2NMb2FkZXIgPSBsb2FkZXI7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rv
cih2b2lkKiBjb250ZXh0LCBjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW4pCi17Ci0gICAgVmVj
dG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hhcj4qPihj
b250ZXh0KTsKLSAgICBTdHJpbmcgZGVjb2RlZENodW5rID0gU3RyaW5nOjpmcm9tVVRGOChidWZm
ZXIsIGxlbik7Ci0gICAgcmVzdWx0T3V0cHV0LmFwcGVuZChkZWNvZGVkQ2h1bmsuY2hhcmFjdGVy
cygpLCBkZWNvZGVkQ2h1bmsubGVuZ3RoKCkpOwotICAgIHJldHVybiBsZW47Ci19Ci0KLXN0YXRp
YyBib29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0U3R5bGVz
aGVldFB0ciBzaGVldCwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgeG1sT3V0cHV0QnVm
ZmVyUHRyIG91dHB1dEJ1ZiA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKDApOwotICAgIGlmICghb3V0
cHV0QnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHJlc3Vs
dFZlY3RvcjsKLSAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91
dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7Ci0gICAgCi0gICAgaW50IHJl
dHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKLSAg
ICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOwotICAgIGlmIChyZXR2YWwgPCAwKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRz
IGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iu
c2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdc
bicpCi0gICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7Ci0KLSAgICByZXN1bHRTdHJp
bmcgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZm9ybVRleHRTdHJpbmdUb1hIVE1MRG9jdW1lbnRT
dHJpbmcoU3RyaW5nJiB0ZXh0KQogewogICAgIC8vIE1vZGlmeSB0aGUgb3V0cHV0IHNvIHRoYXQg
aXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRNTCBkb2N1bWVudCB3aXRoIGEgPHByZT4gdGFnIGVuY2xv
c2luZyB0aGUgdGV4dC4KQEAgLTIxMywzOCArNzAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJh
bnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQpCiAgICAg
ICAgICI8L2h0bWw+XG4iOwogfQogCi1zdGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5
RnJvbVBhcmFtZXRlck1hcChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXAmIHBhcmFtZXRlcnMp
Ci17Ci0gICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGNvbnN0IGNoYXIqKiBwYXJhbWV0ZXJBcnJheSA9IChjb25zdCBjaGFyKiopZmFzdE1hbGxv
YygoKHBhcmFtZXRlcnMuc2l6ZSgpICogMikgKyAxKSAqIHNpemVvZihjaGFyKikpOwotCi0gICAg
WFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVu
ZCgpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBh
cmFtZXRlck1hcDo6aXRlcmF0b3IgaXQgPSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+Zmly
c3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3Ry
ZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotICAgIHBhcmFtZXRlckFycmF5
W2luZGV4XSA9IDA7Ci0KLSAgICByZXR1cm4gcGFyYW1ldGVyQXJyYXk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGZyZWVYc2x0UGFyYW1BcnJheShjb25zdCBjaGFyKiogcGFyYW1zKQotewotICAgIGNvbnN0
IGNoYXIqKiB0ZW1wID0gcGFyYW1zOwotICAgIGlmICghcGFyYW1zKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgd2hpbGUgKCp0ZW1wKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsr
KSk7IC8vIHN0cmR1cCByZXR1cm5zIG1hbGxvYydkIGJsb2Nrcywgc28gd2UgaGF2ZSB0byB1c2Ug
ZnJlZSgpIGhlcmUKLSAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsKLSAgICB9Ci0gICAg
ZmFzdEZyZWUocGFyYW1zKTsKLX0KLQotCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vz
c29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcs
CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VN
SU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMjU4LDcgKzgz
LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRG
cm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmMKICAgICAgICAgdHJhbnNmb3JtVGV4dFN0cmlu
Z1RvWEhUTUxEb2N1bWVudFN0cmluZyhkb2N1bWVudFNvdXJjZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJlc3VsdCA9IG93bmVyRG9jdW1lbnQtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3Vt
ZW50KHNvdXJjZU1JTUVUeXBlLCBmcmFtZSwgZmFsc2UpOwotICAgIAorCiAgICAgLy8gQmVmb3Jl
IHBhcnNpbmcsIHdlIG5lZWQgdG8gc2F2ZSAmIGRldGFjaCB0aGUgb2xkIGRvY3VtZW50IGFuZCBn
ZXQgdGhlIG5ldyBkb2N1bWVudAogICAgIC8vIGluIHBsYWNlLiBXZSBoYXZlIHRvIGRvIHRoaXMg
b25seSBpZiB3ZSdyZSByZW5kZXJpbmcgdGhlIHJlc3VsdCBkb2N1bWVudC4KICAgICBpZiAoZnJh
bWUpIHsKQEAgLTI2NywxNSArOTIsMTUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nl
c3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmMKICAgICAg
ICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7
CiAgICAgICAgIGZyYW1lLT5zZXREb2N1bWVudChyZXN1bHQpOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChzb3VyY2VJc0RvY3VtZW50KQogICAgICAgICByZXN1bHQtPnNldFVSTChvd25lckRvY3Vt
ZW50LT51cmwoKSk7CiAgICAgcmVzdWx0LT5vcGVuKCk7Ci0gICAgCisKICAgICBSZWZQdHI8VGV4
dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShz
b3VyY2VNSU1FVHlwZSk7CiAgICAgZGVjb2Rlci0+c2V0RW5jb2Rpbmcoc291cmNlRW5jb2Rpbmcu
aXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2Rpbmcoc291cmNlRW5jb2Rpbmcp
LCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21YTUxIZWFkZXIpOwogICAgIHJlc3Vs
dC0+c2V0RGVjb2RlcihkZWNvZGVyLnJlbGVhc2UoKSk7Ci0gICAgCisKICAgICByZXN1bHQtPndy
aXRlKGRvY3VtZW50U291cmNlKTsKICAgICByZXN1bHQtPmZpbmlzaFBhcnNpbmcoKTsKICAgICBy
ZXN1bHQtPmNsb3NlKCk7CkBAIC0yODYsNyArMTExLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4g
WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291
cmMKIHN0YXRpYyBpbmxpbmUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91dHB1dERvYykKIHsKICAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUob3V0cHV0RG9jKTsK
LSAgICAKKwogICAgIGlmIChzb3VyY2VNSU1FVHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAg
cGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudChzb3VyY2VTdHJpbmcsIGZyYWdtZW50LmdldCgpKTsK
ICAgICBlbHNlIGlmIChzb3VyY2VNSU1FVHlwZSA9PSAidGV4dC9wbGFpbiIpCkBAIC0yOTYsMTE4
ICsxMjEsMTAgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc28KICAgICAgICAgaWYgKCFzdWNjZXNz
ZnVsUGFyc2UpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVyZT8KLSAgICAgICAgCi0gICAgcmV0
dXJuIGZyYWdtZW50OwotfQotCi1zdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hl
ZXRQb2ludGVyKFJlZlB0cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSog
c3R5bGVzaGVldFJvb3ROb2RlKQotewotICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHls
ZXNoZWV0Um9vdE5vZGUpIHsKLSAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hl
ZXQ6OmNyZWF0ZShzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3RO
b2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRSb290Tm9kZSwKLSAgICAgICAgICAgIHN0eWxlc2hl
ZXRSb290Tm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBjYWNoZWRT
dHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7
Ci0gICAgfQotICAgIAotICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAhY2FjaGVkU3R5bGVz
aGVldC0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIGNh
Y2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVTdHlsZVNoZWV0KCk7Ci19CiAKLXN0YXRpYyBpbmxpbmUg
eG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3Vs
ZERlbGV0ZSkKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VO
b2RlLT5kb2N1bWVudCgpOwotICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2Rl
ID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOwotICAgIAotICAgIHhtbERvY1B0ciBzb3VyY2VEb2Mg
PSAwOwotICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQotICAgICAgICBzb3VyY2VEb2MgPSAoeG1s
RG9jUHRyKW93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOwotICAgIGlmICghc291cmNl
RG9jKSB7Ci0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5n
KG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCi0g
ICAgICAgICAgICBzb3VyY2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5n
KCkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7
Ci0gICAgfQotICAgIHJldHVybiBzb3VyY2VEb2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNo
ZWV0KQotewotICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0
byBiZSBhYmxlIHRvIGRlYWwgd2l0aDoKLSAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1
bWVudCksIFhNTCAoY3JlYXRlIGFuIFhNTCBkb2N1bWVudCksCi0gICAgLy8gYW5kIHRleHQgKHdy
YXAgaW4gYSA8cHJlPiBhbmQgY3JlYXRlIGFuIFhNTCBkb2N1bWVudCkuCi0KLSAgICBjb25zdCB4
bWxDaGFyKiByZXN1bHRUeXBlID0gMDsKLSAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5
cGUsIHNoZWV0LCBtZXRob2QpOwotICAgIGlmIChyZXN1bHRUeXBlID09IDAgJiYgcmVzdWx0RG9j
LT50eXBlID09IFhNTF9IVE1MX0RPQ1VNRU5UX05PREUpCi0gICAgICAgIHJlc3VsdFR5cGUgPSAo
Y29uc3QgeG1sQ2hhciopImh0bWwiOwotICAgIAotICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRU
eXBlLCAoY29uc3QgeG1sQ2hhciopImh0bWwiKSkKLSAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwi
OwotICAgIGVsc2UgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKiki
dGV4dCIpKQotICAgICAgICByZXR1cm4gInRleHQvcGxhaW4iOwotICAgICAgICAKLSAgICByZXR1
cm4gImFwcGxpY2F0aW9uL3htbCI7Ci19Ci0KLWJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3Jt
VG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1
bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50
PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBzZXRY
U0xUTG9hZENhbGxCYWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xv
YWRlcigpKTsKLSAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9p
bnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKLSAgICBpZiAo
IXNoZWV0KSB7Ci0gICAgICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygp
OwotCi0gICAgeG1sQ2hhciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7Ci0gICAgaWYgKCFv
cmlnTWV0aG9kICYmIG1pbWVUeXBlID09ICJ0ZXh0L2h0bWwiKQotICAgICAgICBzaGVldC0+bWV0
aG9kID0gKHhtbENoYXIqKSJodG1sIjsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAg
IGJvb2wgc2hvdWxkRnJlZVNvdXJjZURvYyA9IGZhbHNlOwotICAgIGlmICh4bWxEb2NQdHIgc291
cmNlRG9jID0geG1sRG9jUHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURv
YykpIHsKLSAgICAgICAgLy8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNp
bmcgdGhlIHJlc3VsdCBhcyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9y
IGRvY3VtZW50cywgCi0gICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBp
cyBhbHdheXMgaW1tZWRpYXRlbHkgcGFyc2VkLgotICAgICAgICBzaGVldC0+b21pdFhtbERlY2xh
cmF0aW9uID0gdHJ1ZTsKLQotICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zv
cm1Db250ZXh0ID0geHNsdE5ld1RyYW5zZm9ybUNvbnRleHQoc2hlZXQsIHNvdXJjZURvYyk7Ci0g
ICAgICAgIHJlZ2lzdGVyWFNMVEV4dGVuc2lvbnModHJhbnNmb3JtQ29udGV4dCk7Ci0KLSAgICAg
ICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3PjogWFNM
VCBwcm9jZXNzb3IgPHhzbDpzb3J0PiBhbGdvcml0aG0gb25seSBjb21wYXJlcyBieSBjb2RlIHBv
aW50Ci0gICAgICAgIHhzbHRTZXRDdHh0U29ydEZ1bmModHJhbnNmb3JtQ29udGV4dCwgeHNsdFVu
aWNvZGVTb3J0RnVuY3Rpb24pOwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGJ1ZyBpbiBsaWJ4c2x0LiAKLSAgICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBp
biB2ZXJzaW9uIDEuMS4xMywgc28gb25jZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3Zl
ZC4KLSAgICAgICAgaWYgKHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKLSAg
ICAgICAgICAgdHJhbnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjAp
OwotCi0gICAgICAgIGNvbnN0IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJh
bWV0ZXJNYXAobV9wYXJhbWV0ZXJzKTsKLSAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFu
c2Zvcm1Db250ZXh0LCBwYXJhbXMpOwotICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNs
dEFwcGx5U3R5bGVzaGVldFVzZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3Jt
Q29udGV4dCk7Ci0gICAgICAgIAotICAgICAgICB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQodHJh
bnNmb3JtQ29udGV4dCk7ICAgICAgICAKLSAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFt
cyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkRnJlZVNvdXJjZURvYykKLSAgICAgICAg
ICAgIHhtbEZyZWVEb2Moc291cmNlRG9jKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdWNjZXNz
ID0gc2F2ZVJlc3VsdFRvU3RyaW5nKHJlc3VsdERvYywgc2hlZXQsIHJlc3VsdFN0cmluZykpIHsK
LSAgICAgICAgICAgIG1pbWVUeXBlID0gcmVzdWx0TUlNRVR5cGUocmVzdWx0RG9jLCBzaGVldCk7
Ci0gICAgICAgICAgICByZXN1bHRFbmNvZGluZyA9IChjaGFyKilyZXN1bHREb2MtPmVuY29kaW5n
OwotICAgICAgICB9Ci0gICAgICAgIHhtbEZyZWVEb2MocmVzdWx0RG9jKTsKLSAgICB9Ci0gICAg
Ci0gICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7Ci0gICAgc2V0WFNMVExvYWRDYWxsQmFj
aygwLCAwLCAwKTsKLSAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOwotICAgIG1fc3R5bGVz
aGVldCA9IDA7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVy
ZT8KIAotICAgIHJldHVybiBzdWNjZXNzOworICAgIHJldHVybiBmcmFnbWVudDsKIH0KIAogUGFz
c1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChOb2Rl
KiBzb3VyY2VOb2RlKQpAQCAtNDI5LDcgKzE0Niw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudChOb2RlKiBzb3VyY2VOb2Rl
CiAgICAgLy8gSWYgdGhlIG91dHB1dCBkb2N1bWVudCBpcyBIVE1MLCBkZWZhdWx0IHRvIEhUTUwg
bWV0aG9kLgogICAgIGlmIChvdXRwdXREb2MtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJl
c3VsdE1JTUVUeXBlID0gInRleHQvaHRtbCI7Ci0gICAgCisKICAgICBpZiAoIXRyYW5zZm9ybVRv
U3RyaW5nKHNvdXJjZU5vZGUsIHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVu
Y29kaW5nKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJv
bVNvdXJjZShyZXN1bHRTdHJpbmcsIHJlc3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwpAQCAtNDU1
LDYgKzE3MiwxMyBAQCB2b2lkIFhTTFRQcm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmluZwogICAgIG1fcGFyYW1ldGVycy5y
ZW1vdmUobG9jYWxOYW1lKTsKIH0KIAordm9pZCBYU0xUUHJvY2Vzc29yOjpyZXNldCgpCit7Cisg
ICAgbV9zdHlsZXNoZWV0LmNsZWFyKCk7CisgICAgbV9zdHlsZXNoZWV0Um9vdE5vZGUuY2xlYXIo
KTsKKyAgICBtX3BhcmFtZXRlcnMuY2xlYXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmggYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKaW5kZXggOWVlMmFhZC4u
NDVmNWNiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCisrKyBiL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaApAQCAtMzQsNDYgKzM0LDQ2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3Vt
ZW50RnJhZ21lbnQ7Ci0KLWNsYXNzIFhTTFRQcm9jZXNzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxY
U0xUUHJvY2Vzc29yPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nl
c3Nvcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3IpOyB9Ci0K
LSAgICB2b2lkIHNldFhTTFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHls
ZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9IHN0eWxlU2hlZXQ7IH0KLSAgICBib29sIHRyYW5zZm9y
bVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiBy
ZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpOwotICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwg
Tm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKTsKLSAgICAKLSAgICAvLyBET00gbWV0aG9k
cwotICAgIHZvaWQgaW1wb3J0U3R5bGVzaGVldChQYXNzUmVmUHRyPE5vZGU+IHN0eWxlKSB7IG1f
c3R5bGVzaGVldFJvb3ROb2RlID0gc3R5bGU7IH0KLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3VwdXRE
b2MpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9ybVRvRG9jdW1lbnQoTm9kZSog
c291cmNlKTsKLSAgICAKLSAgICB2b2lkIHNldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
ICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZVBhcmFtZXRlcihjb25z
dCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOwotICAgIHZv
aWQgY2xlYXJQYXJhbWV0ZXJzKCkgeyBtX3BhcmFtZXRlcnMuY2xlYXIoKTsgfQotCi0gICAgdm9p
ZCByZXNldCgpIHsgbV9zdHlsZXNoZWV0LmNsZWFyKCk7IG1fc3R5bGVzaGVldFJvb3ROb2RlLmNs
ZWFyKCk7ICBtX3BhcmFtZXRlcnMuY2xlYXIoKTsgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VF
cnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKik7Ci0gICAgc3RhdGljIHZvaWQgZ2Vu
ZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhciogbXNnLCAuLi4pOwotICAg
IAotcHVibGljOgotICAgIC8vIE9ubHkgZm9yIGxpYlhTTFQgY2FsbGJhY2tzCi0gICAgWFNMU3R5
bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQo
KTsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJNYXA7
Ci0KLXByaXZhdGU6Ci0gICAgWFNMVFByb2Nlc3NvcigpIHsgfQotCi0gICAgUmVmUHRyPFhTTFN0
eWxlU2hlZXQ+IG1fc3R5bGVzaGVldDsKLSAgICBSZWZQdHI8Tm9kZT4gbV9zdHlsZXNoZWV0Um9v
dE5vZGU7Ci0gICAgUGFyYW1ldGVyTWFwIG1fcGFyYW1ldGVyczsKLX07CisgICAgY2xhc3MgRnJh
bWU7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKKwor
ICAgIGNsYXNzIFhTTFRQcm9jZXNzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxYU0xUUHJvY2Vzc29y
PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29y
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KKworICAg
ICAgICB2b2lkIHNldFhTTFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHls
ZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9IHN0eWxlU2hlZXQ7IH0KKyAgICAgICAgYm9vbCB0cmFu
c2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmlu
ZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKKyAgICAgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1J
TUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUpOworCisgICAgICAgIC8vIERP
TSBtZXRob2RzCisgICAgICAgIHZvaWQgaW1wb3J0U3R5bGVzaGVldChQYXNzUmVmUHRyPE5vZGU+
IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJvb3ROb2RlID0gc3R5bGU7IH0KKyAgICAgICAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwg
RG9jdW1lbnQqIG91cHV0RG9jKTsKKyAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNm
b3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2UpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVy
KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKKyAgICAg
ICAgdm9pZCByZW1vdmVQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lKTsKKyAgICAgICAgdm9pZCBjbGVhclBhcmFtZXRlcnMoKSB7IG1f
cGFyYW1ldGVycy5jbGVhcigpOyB9CisKKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgICAg
IHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciopOwor
ICAgICAgICBzdGF0aWMgdm9pZCBnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCBjb25z
dCBjaGFyKiBtc2csIC4uLik7CisKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIE9ubHkgZm9yIGxp
YlhTTFQgY2FsbGJhY2tzCisgICAgICAgIFhTTFN0eWxlU2hlZXQqIHhzbFN0eWxlc2hlZXQoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlc2hlZXQuZ2V0KCk7IH0KKworICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFhTTFRQcm9jZXNzb3IoKSB7IH0KKworICAgICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4g
bV9zdHlsZXNoZWV0OworICAgICAgICBSZWZQdHI8Tm9kZT4gbV9zdHlsZXNoZWV0Um9vdE5vZGU7
CisgICAgICAgIFBhcmFtZXRlck1hcCBtX3BhcmFtZXRlcnM7CisgICAgfTsKIAogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgYi9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2JhOWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JMaWJ4c2x0LmNwcApAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRl
ICJYU0xUUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ29u
c29sZS5oIgorI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MVG9rZW5pemVyLmgiIC8vIGZvciBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50CisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIlhTTFRFeHRl
bnNpb25zLmgiCisjaW5jbHVkZSAiWFNMVFVuaWNvZGVTb3J0LmgiCisjaW5jbHVkZSAibG9hZGVy
LmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8bGlieHNsdC9pbXBvcnRzLmg+Cisj
aW5jbHVkZSA8bGlieHNsdC92YXJpYWJsZXMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGls
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1
ZGUgIlNvZnRMaW5raW5nLmgiCisKK1NPRlRfTElOS19MSUJSQVJZKGxpYnhzbHQpOworU09GVF9M
SU5LKGxpYnhzbHQsIHhzbHRGcmVlU3R5bGVzaGVldCwgdm9pZCwgKHhzbHRTdHlsZXNoZWV0UHRy
IHNoZWV0KSwgKHNoZWV0KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVRyYW5zZm9ybUNv
bnRleHQsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0KSwgKGN0eHQpKQorU09G
VF9MSU5LKGxpYnhzbHQsIHhzbHROZXdUcmFuc2Zvcm1Db250ZXh0LCB4c2x0VHJhbnNmb3JtQ29u
dGV4dFB0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jKSwgKHN0eWxl
LCBkb2MpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRBcHBseVN0eWxlc2hlZXRVc2VyLCB4bWxE
b2NQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYywgY29uc3QgY2hh
cioqIHBhcmFtcywgY29uc3QgY2hhciogb3V0cHV0LCBGSUxFKiBwcm9maWxlLCB4c2x0VHJhbnNm
b3JtQ29udGV4dFB0ciB1c2VyQ3R4dCksIChzdHlsZSwgZG9jLCBwYXJhbXMsIG91dHB1dCwgcHJv
ZmlsZSwgdXNlckN0eHQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRRdW90ZVVzZXJQYXJhbXMs
IGludCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIGNvbnN0IGNoYXIqKiBwYXJhbXMp
LCAoY3R4dCwgcGFyYW1zKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0Q3R4dFNvcnRGdW5j
LCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeHNsdFNvcnRGdW5jIGhhbmRs
ZXIpLCAoY3R4dCwgaGFuZGxlcikpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldExvYWRlckZ1
bmMsIHZvaWQsICh4c2x0RG9jTG9hZGVyRnVuYyBmKSwgKGYpKQorU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRTYXZlUmVzdWx0VG8sIGludCwgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsIHhtbERvY1B0
ciByZXN1bHQsIHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKGJ1ZiwgcmVzdWx0LCBzdHlsZSkp
CitTT0ZUX0xJTksobGlieHNsdCwgeHNsdE5leHRJbXBvcnQsIHhzbHRTdHlsZXNoZWV0UHRyLCAo
eHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoc3R5bGUpKQorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKHZvaWQqLCBj
b25zdCBjaGFyKiwgLi4uKQoreworICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8gc29tZXRo
aW5nIHdpdGggdGhpcyBlcnJvciBtZXNzYWdlLgorfQorCit2b2lkIFhTTFRQcm9jZXNzb3I6OnBh
cnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCit7CisgICAgQ29u
c29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7CisgICAgaWYg
KCFjb25zb2xlKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Cisg
ICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKKyAgICBjYXNlIFhNTF9FUlJfTk9ORToKKyAgICAg
ICAgbGV2ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWE1M
X0VSUl9XQVJOSU5HOgorICAgICAgICBsZXZlbCA9IFdhcm5pbmdNZXNzYWdlTGV2ZWw7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgWE1MX0VSUl9FUlJPUjoKKyAgICBjYXNlIFhNTF9FUlJfRkFU
QUw6CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlVHlwZSwgbGV2ZWwsIGVycm9yLT5tZXNzYWdlLCBlcnJvci0+bGlu
ZSwgZXJyb3ItPmZpbGUpOworfQorCisvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8gYmUgbm8gd2F5
IHRvIGNvbnRyb2wgdGhlIGN0eHQgcG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0aHVzIHdlIGhh
dmUgZ2xvYmFscy4KK3N0YXRpYyBYU0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNzb3IgPSAwOwor
c3RhdGljIERvY0xvYWRlciogZ2xvYmFsRG9jTG9hZGVyID0gMDsKK3N0YXRpYyB4bWxEb2NQdHIg
ZG9jTG9hZGVyRnVuYyhjb25zdCB4bWxDaGFyKiB1cmksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4bWxEaWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkKiBjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNsdExvYWRU
eXBlIHR5cGUpCit7CisgICAgaWYgKCFnbG9iYWxQcm9jZXNzb3IpCisgICAgICAgIHJldHVybiAw
OworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsK
KyAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY29udGV4dCA9ICh4c2x0VHJhbnNmb3Jt
Q29udGV4dFB0ciljdHh0OworICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2Uo
Y29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9kZSk7CisgICAgICAgIEtVUkwgdXJs
KEtVUkwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPih1cmkpKTsKKyAgICAgICAgeG1sRnJlZShiYXNlKTsKKyAgICAgICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
KworICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgICAgICBib29sIHJlcXVlc3RBbGxv
d2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCkt
PnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAgICAgaWYgKHJlcXVlc3RB
bGxvd2VkKSB7CisgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigp
LT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xv
YmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25z
ZS51cmwoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkgeworICAg
ICAgICAgICAgZGF0YS5jbGVhcigpOworICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmlu
dEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnNvbGUq
IGNvbnNvbGUgPSAwOworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29y
LT54c2xTdHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAg
IGNvbnNvbGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKKyAgICAgICAgeG1sU2V0
U3RydWN0dXJlZEVycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVu
Yyk7CisgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nv
cjo6Z2VuZXJpY0Vycm9yRnVuYyk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBl
bmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cworICAgICAgICAv
LyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCisgICAgICAgIHht
bERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNv
bnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9ucyk7CisKKyAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVy
cm9yRnVuYygwLCAwKTsKKyAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCAwKTsKKwor
ICAgICAgICByZXR1cm4gZG9jOworICAgIH0KKyAgICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNIRUVU
OgorICAgICAgICByZXR1cm4gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0
ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVy
aSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9hZENhbGxCYWNrKHhzbHREb2NMb2Fk
ZXJGdW5jIGZ1bmMsIFhTTFRQcm9jZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9hZGVyKiBsb2FkZXIp
Cit7CisgICAgeHNsdFNldExvYWRlckZ1bmMoZnVuYyk7CisgICAgZ2xvYmFsUHJvY2Vzc29yID0g
cHJvY2Vzc29yOworICAgIGdsb2JhbERvY0xvYWRlciA9IGxvYWRlcjsKK30KKworc3RhdGljIGlu
dCB3cml0ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxl
bikKK3sKKyAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVj
dG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZyBkZWNvZGVkQ2h1bmsgPSBTdHJpbmc6
OmZyb21VVEY4KGJ1ZmZlciwgbGVuKTsKKyAgICByZXN1bHRPdXRwdXQuYXBwZW5kKGRlY29kZWRD
aHVuay5jaGFyYWN0ZXJzKCksIGRlY29kZWRDaHVuay5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGxl
bjsKK30KKworc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0ciByZXN1bHRE
b2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAg
ICB4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0QnVmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoMCk7
CisgICAgaWYgKCFvdXRwdXRCdWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0VmVjdG9yOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRW
ZWN0b3I7CisgICAgb3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsKKwor
ICAgIGludCByZXR2YWwgPSB4c2x0U2F2ZVJlc3VsdFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBz
aGVldCk7CisgICAgeG1sT3V0cHV0QnVmZmVyQ2xvc2Uob3V0cHV0QnVmKTsKKyAgICBpZiAocmV0
dmFsIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3Ig
PGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhz
bHQgYXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQgdG8gdGhlIHJlc3VsdC4KKyAgICBpZiAocmVz
dWx0VmVjdG9yLnNpemUoKSA+IDAgJiYgcmVzdWx0VmVjdG9yW3Jlc3VsdFZlY3Rvci5zaXplKCkg
LSAxXSA9PSAnXG4nKQorICAgICAgICByZXN1bHRWZWN0b3IucmVtb3ZlTGFzdCgpOworCisgICAg
cmVzdWx0U3RyaW5nID0gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1l
dGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVycykKK3sKKyAgICBp
ZiAocGFyYW1ldGVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3Qg
Y2hhcioqIHBhcmFtZXRlckFycmF5ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFsbG9jKCgocGFyYW1l
dGVycy5zaXplKCkgKiAyKSArIDEpICogc2l6ZW9mKGNoYXIqKSk7CisKKyAgICBYU0xUUHJvY2Vz
c29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CisgICAg
dW5zaWduZWQgaW5kZXggPSAwOworICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFw
OjppdGVyYXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5maXJzdC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0g
MDsKKworICAgIHJldHVybiBwYXJhbWV0ZXJBcnJheTsKK30KKworc3RhdGljIHZvaWQgZnJlZVhz
bHRQYXJhbUFycmF5KGNvbnN0IGNoYXIqKiBwYXJhbXMpCit7CisgICAgY29uc3QgY2hhcioqIHRl
bXAgPSBwYXJhbXM7CisgICAgaWYgKCFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIHdo
aWxlICgqdGVtcCkgeworICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOyAvLyBzdHJkdXAg
cmV0dXJucyBtYWxsb2MnZCBibG9ja3MsIHNvIHdlIGhhdmUgdG8gdXNlIGZyZWUoKSBoZXJlCisg
ICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7CisgICAgfQorICAgIGZhc3RGcmVlKHBhcmFt
cyk7Cit9CisKK3N0YXRpYyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIo
UmVmUHRyPFhTTFN0eWxlU2hlZXQ+JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0
Um9vdE5vZGUpCit7CisgICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290
Tm9kZSkgeworICAgICAgICBjYWNoZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRl
KHN0eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVu
dCgpIDogc3R5bGVzaGVldFJvb3ROb2RlLAorICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2Rl
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQt
PnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKKyAgICB9CisK
KyAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hlZXQtPmRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNv
bXBpbGVTdHlsZVNoZWV0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0
ckZyb21Ob2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3sKKyAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOwor
ICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQu
Z2V0KCkpOworCisgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7CisgICAgaWYgKHNvdXJjZUlz
RG9jdW1lbnQpCisgICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+
dHJhbnNmb3JtU291cmNlKCk7CisgICAgaWYgKCFzb3VyY2VEb2MpIHsKKyAgICAgICAgc291cmNl
RG9jID0gKHhtbERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9h
ZGVyKCksIGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKKyAgICAgICAgICAgIHNvdXJjZUlzRG9j
dW1lbnQgPyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKKyAgICAg
ICAgc2hvdWxkRGVsZXRlID0gc291cmNlRG9jOworICAgIH0KKyAgICByZXR1cm4gc291cmNlRG9j
OworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyByZXN1bHRNSU1FVHlwZSh4bWxEb2NQdHIgcmVz
dWx0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdGhy
ZWUgdHlwZXMgb2Ygb3V0cHV0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGg6CisgICAg
Ly8gSFRNTCAoY3JlYXRlIGFuIEhUTUwgZG9jdW1lbnQpLCBYTUwgKGNyZWF0ZSBhbiBYTUwgZG9j
dW1lbnQpLAorICAgIC8vIGFuZCB0ZXh0ICh3cmFwIGluIGEgPHByZT4gYW5kIGNyZWF0ZSBhbiBY
TUwgZG9jdW1lbnQpLgorCisgICAgY29uc3QgeG1sQ2hhciogcmVzdWx0VHlwZSA9IDA7CisgICAg
WFNMVF9HRVRfSU1QT1JUX1BUUihyZXN1bHRUeXBlLCBzaGVldCwgbWV0aG9kKTsKKyAgICBpZiAo
IXJlc3VsdFR5cGUgJiYgcmVzdWx0RG9jLT50eXBlID09IFhNTF9IVE1MX0RPQ1VNRU5UX05PREUp
CisgICAgICAgIHJlc3VsdFR5cGUgPSAoY29uc3QgeG1sQ2hhciopImh0bWwiOworCisgICAgaWYg
KHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikiaHRtbCIpKQorICAgICAg
ICByZXR1cm4gInRleHQvaHRtbCI7CisgICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChj
b25zdCB4bWxDaGFyKikidGV4dCIpKQorICAgICAgICByZXR1cm4gInRleHQvcGxhaW4iOworCisg
ICAgcmV0dXJuICJhcHBsaWNhdGlvbi94bWwiOworfQorCitib29sIFhTTFRQcm9jZXNzb3I6OnRy
YW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmlu
ZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQoreworICAgIFJlZlB0cjxE
b2N1bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisKKyAgICBz
ZXRYU0xUTG9hZENhbGxCYWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRv
Y0xvYWRlcigpKTsKKyAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0
UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKKyAgICBp
ZiAoIXNoZWV0KSB7CisgICAgICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50
cygpOworCisgICAgeG1sQ2hhciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7CisgICAgaWYg
KCFvcmlnTWV0aG9kICYmIG1pbWVUeXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBzaGVldC0+
bWV0aG9kID0gKHhtbENoYXIqKSJodG1sIjsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwor
ICAgIGJvb2wgc2hvdWxkRnJlZVNvdXJjZURvYyA9IGZhbHNlOworICAgIGlmICh4bWxEb2NQdHIg
c291cmNlRG9jID0geG1sRG9jUHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJj
ZURvYykpIHsKKyAgICAgICAgLy8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBh
cnNpbmcgdGhlIHJlc3VsdCBhcyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4g
Zm9yIGRvY3VtZW50cywKKyAgICAgICAgLy8gYXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9u
IGlzIGFsd2F5cyBpbW1lZGlhdGVseSBwYXJzZWQuCisgICAgICAgIHNoZWV0LT5vbWl0WG1sRGVj
bGFyYXRpb24gPSB0cnVlOworCisgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5z
Zm9ybUNvbnRleHQgPSB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dChzaGVldCwgc291cmNlRG9jKTsK
KyAgICAgICAgcmVnaXN0ZXJYU0xURXh0ZW5zaW9ucyh0cmFuc2Zvcm1Db250ZXh0KTsKKworICAg
ICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBY
U0xUIHByb2Nlc3NvciA8eHNsOnNvcnQ+IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUg
cG9pbnQKKyAgICAgICAgeHNsdFNldEN0eHRTb3J0RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0
VW5pY29kZVNvcnRGdW5jdGlvbik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQg
Zm9yIGEgYnVnIGluIGxpYnhzbHQuCisgICAgICAgIC8vIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQg
aW4gdmVyc2lvbiAxLjEuMTMsIHNvIG9uY2Ugd2Ugc2hpcCB0aGF0IHRoaXMgY2FuIGJlIHJlbW92
ZWQuCisgICAgICAgIGlmICghdHJhbnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycykKKyAgICAgICAg
ICAgdHJhbnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOworCisg
ICAgICAgIGNvbnN0IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJN
YXAobV9wYXJhbWV0ZXJzKTsKKyAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1D
b250ZXh0LCBwYXJhbXMpOworICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5
U3R5bGVzaGVldFVzZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4
dCk7CisKKyAgICAgICAgeHNsdEZyZWVUcmFuc2Zvcm1Db250ZXh0KHRyYW5zZm9ybUNvbnRleHQp
OworICAgICAgICBmcmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKKworICAgICAgICBpZiAoc2hv
dWxkRnJlZVNvdXJjZURvYykKKyAgICAgICAgICAgIHhtbEZyZWVEb2Moc291cmNlRG9jKTsKKwor
ICAgICAgICBpZiAoc3VjY2VzcyA9IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0
LCByZXN1bHRTdHJpbmcpKSB7CisgICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBl
KHJlc3VsdERvYywgc2hlZXQpOworICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciop
cmVzdWx0RG9jLT5lbmNvZGluZzsKKyAgICAgICAgfQorICAgICAgICB4bWxGcmVlRG9jKHJlc3Vs
dERvYyk7CisgICAgfQorCisgICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7CisgICAgc2V0
WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKKyAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQp
OworICAgIG1fc3R5bGVzaGVldCA9IDA7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tIAoxLjYuMC4y
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35058</attachid>
            <date>2009-08-18 11:57:32 -0700</date>
            <delta_ts>2009-08-19 01:00:59 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>40635</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAwNjllZjllYjA2NGUwYmIzNmQ5M2FlZDU5NDJmOTJmMGNmZmMyMmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFR1ZSwgMTggQXVnIDIwMDkgMjI6Mjc6MDcgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvM10g
TW92ZSB0aGUgbGlieHNsdCBzcGVjaWZpYyBwYXJ0IG9mIFhTTFRQcm9jZXNzb3IgdG8gYSBzZXBh
cmF0ZSBmaWxlLgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAz
CgpQYXRjaCBieSBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+IG9uIDIwMDktMDgt
MTgKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpJbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5n
IFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0CnBvcnQsIG1vdmUgdGhl
IGxpYnhzbHQgcGFydCBvZiB0aGUgWFNMVFByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbiBpbnRvCmFu
b3RoZXIgZmlsZSBhbmQgbGVhdmUgdGhlIHBhcnQgdGhhdCBjYW4gYmUgcmV1c2VkIGFuZCBzaGFy
ZWQuCgpBZGRpdGlvbmFsbHksIGZpeCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuCgoqIEdOVW1h
a2VmaWxlLmFtOgoqIFdlYkNvcmUuZ3lwaToKKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKiBXZWJDb3JlU291cmNlcy5ia2w6CiogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgooV2ViQ29y
ZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRyYWls
aW5nIHdoaXRlc3BhY2VzLgooV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKTogUmVt
b3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgooV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNm
b3JtVG9GcmFnbWVudCk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKFdlYkNvcmU6OlhT
TFRQcm9jZXNzb3I6OnJlc2V0KTogTW92ZWQgb3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uLgoq
IHhtbC9YU0xUUHJvY2Vzc29yLmg6IEZpeCBpbmRlbnRhdGlvbi4KKiB4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJv
ckZ1bmMpOiBNb3ZlZC4KKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTog
TW92ZWQuCihXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQuCihXZWJDb3JlOjpzZXRYU0xU
TG9hZENhbGxCYWNrKTogTW92ZWQuCihXZWJDb3JlOjp3cml0ZVRvVmVjdG9yKTogTW92ZWQuCihX
ZWJDb3JlOjpzYXZlUmVzdWx0VG9TdHJpbmcpOiBNb3ZlZC4KKFdlYkNvcmU6OnhzbHRQYXJhbUFy
cmF5RnJvbVBhcmFtZXRlck1hcCk6IE1vdmVkLgooV2ViQ29yZTo6ZnJlZVhzbHRQYXJhbUFycmF5
KTogTW92ZWQuCihXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIpOiBNb3ZlZC4KKFdlYkNv
cmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCihXZWJDb3JlOjpyZXN1bHRNSU1FVHlwZSk6
IE1vdmVkLgooV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3Zl
ZC4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArKysr
CiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAgMSArCiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIHwgICAxNiArLQogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wgICAgICAgICAgICB8ICAgMTkgKy0KIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwICAg
ICAgICAgfCAgMzE2ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFdlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3IuaCAgICAgICAgICAgfCAgIDgwICsrKystLS0tCiBXZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgIHwgIDMzMyArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgNDQ3IGluc2VydGlvbnMoKyksIDM1NiBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGEzYmM1NDMuLjAyNGU0NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMDktMDgtMTggIEpha3Vi
IFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgbGlieHNsdCBzcGVjaWZpYyBwYXJ0IG9m
IFhTTFRQcm9jZXNzb3IgdG8gYSBzZXBhcmF0ZSBmaWxlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKKworICAgICAgICBJbiBwcmVwYXJhdGlv
biBmb3IgYWRkaW5nIFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0Cisg
ICAgICAgIHBvcnQsIG1vdmUgdGhlIGxpYnhzbHQgcGFydCBvZiB0aGUgWFNMVFByb2Nlc3NvciBp
bXBsZW1lbnRhdGlvbiBpbnRvCisgICAgICAgIGFub3RoZXIgZmlsZSBhbmQgbGVhdmUgdGhlIHBh
cnQgdGhhdCBjYW4gYmUgcmV1c2VkIGFuZCBzaGFyZWQuCisKKyAgICAgICAgQWRkaXRpb25hbGx5
LCBmaXggc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiB4
bWwvWFNMVFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpj
cmVhdGVEb2N1bWVudEZyb21Tb3VyY2UpOiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UpOiBSZW1vdmUgdHJhaWxp
bmcgd2hpdGVzcGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zv
cm1Ub0ZyYWdtZW50KTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6WFNMVFByb2Nlc3Nvcjo6cmVzZXQpOiBNb3ZlZCBvdXQgb2YgdGhlIGNsYXNzIGRlZmlu
aXRpb24uCisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuaDogRml4IGluZGVudGF0aW9uLgor
ICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyk6IE1vdmVkLgorICAgICAg
ICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMpOiBNb3ZlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dFhTTFRMb2FkQ2FsbEJhY2spOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9WZWN0
b3IpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNhdmVSZXN1bHRUb1N0cmluZyk6IE1vdmVk
LgorICAgICAgICAoV2ViQ29yZTo6eHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKTogTW92
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmcmVlWHNsdFBhcmFtQXJyYXkpOiBNb3ZlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnhzbHRTdHlsZXNoZWV0UG9pbnRlcik6IE1vdmVkLgorICAgICAgICAoV2Vi
Q29yZTo6eG1sRG9jUHRyRnJvbU5vZGUpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc3Vs
dE1JTUVUeXBlKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub1N0cmluZyk6IE1vdmVkLgorCiAyMDA5LTA4LTE4ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGUyMjQwZjcuLjRmMWFhMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjM2NCw2ICsyMzY0LDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5zaW9ucy5jcHAgXAogCVdl
YkNvcmUveG1sL1hTTFRFeHRlbnNpb25zLmggXAogCVdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
Y3BwIFwKKwlXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgXAogCVdlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuaCBcCiAJV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCBc
CiAJV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWQ3ZmE2Yy4uMmM1MDU4MCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM0MTUsNiArMzQxNSw3IEBACiAgICAgICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25z
LmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25zLmgnLAogICAgICAgICAgICAg
J3htbC9YU0xUUHJvY2Vzc29yLmNwcCcsCisgICAgICAgICAgICAneG1sL1hTTFRQcm9jZXNzb3JM
aWJ4c2x0LmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFRQcm9jZXNzb3IuaCcsCiAgICAgICAg
ICAgICAneG1sL1hTTFRVbmljb2RlU29ydC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xUVW5p
Y29kZVNvcnQuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5ZDA4
YjU2Li5jNGNmZmJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTIz
NjIxLDEyICsyMzYyMSwxNiBAQAogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3IuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3IuaCINCi0JCQkJ
Pg0KLQkJCTwvRmlsZT4NCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHhtbFxYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYU0xUUHJvY2Vzc29yLmgiCisJ
CQkJPgorCQkJPC9GaWxlPgogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNM
VFVuaWNvZGVTb3J0LmNwcCINCiAJCQkJPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggYTQwYzJiMS4uZWFk
ZTUwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlU291cmNlcy5ia2wKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAi
ID8+Ci08IS0tIAorPCEtLQogCiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC04LDEzICs4LDEzIEBAIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1l
dDoKIAogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRApAQCAtNTAsNyArNTAsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAogICAgICAgICBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCiAgICAgPC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0i
MSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSlMiPgogICAgICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKQEAgLTQ5NCw3
ICs0OTQsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRv
IGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAK
ICAgICAgICAgZG9tL1NjcmlwdEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAotICAgICAgICBkb20vU2VsZWN0RWxlbWVudC5jcHAgCisgICAgICAgIGRv
bS9TZWxlY3RFbGVtZW50LmNwcAogICAgICAgICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKICAg
ICAgICAgZG9tL1N0YXRpY05vZGVMaXN0LmNwcAogICAgICAgICBkb20vU3R5bGVFbGVtZW50LmNw
cApAQCAtNTYzLDcgKzU2Myw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxl
cyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgZWRpdGluZy9tYXJrdXAuY3BwCiAg
ICAgICAgIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAg
IDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19ISVNUT1JZIj4KICAgICAgICAg
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCiAgICAgICAgIGhpc3RvcnkvQ2FjaGVkRnJhbWUu
Y3BwCkBAIC01NzEsNyArNTcxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZp
bGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5j
cHAKICAgICAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKICAgICA8L3NldD4KLSAgICAKKwog
ICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19IVE1MIj4KICAgICAgICAg
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0NhbnZh
c1BhdHRlcm4uY3BwCkBAIC03MzAsNyArNzMwLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBs
aXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBsb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKICAgICAgICAgbG9hZGVyL2xvYWRlci5jcHAKICAgICA8
L3NldD4KLSAgICAKKwogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19J
Q09OIj4KICAgICAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAogICAgICAgICBsb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcApAQCAtMTA3NSw2ICsxMDc1LDcgQEAgVGhpcyBmaWxlIGNv
bnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAg
ICB4bWwvWFNMVEV4dGVuc2lvbnMuY3BwCiAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQuY3Bw
CiAgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAorICAgICAgICB4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwCiAgICAgPC9zZXQ+CiAKIDwvbWFrZWZpbGU+CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3Bw
CmluZGV4IDlmZGYzMWYuLjI0MWQ0ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3IuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCkBAIC0yNiwxMCAr
MjYsNyBAQAogCiAjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgogCi0jaW5jbHVkZSAiQ1N0cmlu
Zy5oIgotI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5o
IgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMzgsMTY2ICsz
NSwxNiBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIgLy8gZm9yIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQKICNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgi
Ci0jaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiWFNMVEV4dGVuc2lvbnMuaCIK
LSNpbmNsdWRlICJYU0xUVW5pY29kZVNvcnQuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNs
dWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxsaWJ4c2x0L2ltcG9ydHMuaD4KLSNpbmNsdWRlIDxs
aWJ4c2x0L3ZhcmlhYmxlcy5oPgotI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU29mdExp
bmtpbmcuaCIKLQotU09GVF9MSU5LX0xJQlJBUlkobGlieHNsdCk7Ci1TT0ZUX0xJTksobGlieHNs
dCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2b2lkLCAoeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpLCAo
c2hlZXQpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCwgdm9p
ZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQpLCAoY3R4dCkpCi1TT0ZUX0xJTksobGli
eHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRleHQsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyLCAo
eHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MpLCAoc3R5bGUsIGRvYykpCi1T
T0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5U3R5bGVzaGVldFVzZXIsIHhtbERvY1B0ciwgKHhz
bHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jLCBjb25zdCBjaGFyKiogcGFyYW1z
LCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUqIHByb2ZpbGUsIHhzbHRUcmFuc2Zvcm1Db250ZXh0
UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2MsIHBhcmFtcywgb3V0cHV0LCBwcm9maWxlLCB1c2Vy
Q3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFF1b3RlVXNlclBhcmFtcywgaW50LCAoeHNs
dFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgY29uc3QgY2hhcioqIHBhcmFtcyksIChjdHh0LCBw
YXJhbXMpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRDdHh0U29ydEZ1bmMsIHZvaWQsICh4
c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0U29ydEZ1bmMgaGFuZGxlciksIChjdHh0
LCBoYW5kbGVyKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0TG9hZGVyRnVuYywgdm9pZCwg
KHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNhdmVS
ZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwgeG1sRG9jUHRyIHJlc3VsdCwg
eHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoYnVmLCByZXN1bHQsIHN0eWxlKSkKLVNPRlRfTElO
SyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwgeHNsdFN0eWxlc2hlZXRQdHIsICh4c2x0U3R5bGVz
aGVldFB0ciBzdHlsZSksIChzdHlsZSkpCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIq
LCAuLi4pCi17Ci0gICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0
aGlzIGVycm9yIG1lc3NhZ2UuCi19Ci0gICAgCi12b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCi17Ci0gICAgQ29uc29sZSog
Y29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7Ci0gICAgaWYgKCFjb25z
b2xlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Ci0gICAgc3dp
dGNoIChlcnJvci0+bGV2ZWwpIHsKLSAgICAgICAgY2FzZSBYTUxfRVJSX05PTkU6Ci0gICAgICAg
ICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFhNTF9FUlJfV0FSTklORzoKLSAgICAgICAgICAgIGxldmVsID0gV2FybmluZ01lc3Nh
Z2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfRVJST1I6
Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9GQVRBTDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjb25zb2xlLT5hZGRNZXNzYWdlKFhNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VU
eXBlLCBsZXZlbCwgZXJyb3ItPm1lc3NhZ2UsIGVycm9yLT5saW5lLCBlcnJvci0+ZmlsZSk7Ci19
Ci0KLS8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBubyB3YXkgdG8gY29udHJvbCB0aGUgY3R4
dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUsIHRodXMgd2UgaGF2ZSBnbG9iYWxzLgotc3RhdGlj
IFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9IDA7Ci1zdGF0aWMgRG9jTG9hZGVyKiBn
bG9iYWxEb2NMb2FkZXIgPSAwOwotc3RhdGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0
IHhtbENoYXIqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbERp
Y3RQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGN0eHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2x0TG9hZFR5cGUgdHlwZSkKLXsKLSAgICBp
ZiAoIWdsb2JhbFByb2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgWFNMVF9MT0FEX0RPQ1VNRU5UOiB7Ci0gICAgICAgICAg
ICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0
UHRyKWN0eHQ7Ci0gICAgICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29u
dGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVy
bChLVVJMKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4odXJpKSk7Ci0gICAgICAgICAgICB4bWxGcmVlKGJhc2UpOwotICAg
ICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAgICAg
ICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGds
b2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsK
LSAgICAgICAgICAgIGlmIChyZXF1ZXN0QWxsb3dlZCkgewotICAgICAgICAgICAgICAgIGdsb2Jh
bERvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
dXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAg
ICAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICAgICAgZGF0
YS5jbGVhcigpOwotICAgICAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+cHJpbnRBY2Nlc3NE
ZW5pZWRNZXNzYWdlKHVybCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENvbnNvbGUq
IGNvbnNvbGUgPSAwOwotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGdsb2JhbFByb2Nl
c3Nvci0+eHNsU3R5bGVzaGVldCgpLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAg
ICAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpOwotICAgICAg
ICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpw
YXJzZUVycm9yRnVuYyk7Ci0gICAgICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKGNvbnNv
bGUsIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBXZSBkb24ndCBzcGVjaWZ5IGFuIGVuY29kaW5nIGhlcmUuIE5laXRoZXIgR2Vj
a28gbm9yIFdpbklFIHJlc3BlY3RzCi0gICAgICAgICAgICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lm
aWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCi0gICAgICAgICAgICB4bWxEb2NQdHIgZG9jID0geG1s
UmVhZE1lbW9yeShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIChjb25zdCBjaGFyKil1cmksIDAs
IG9wdGlvbnMpOwotCi0gICAgICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKDAsIDAp
OwotICAgICAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCAwKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIGRvYzsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNI
RUVUOgotICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFByb2Nlc3Nvci0+eHNsU3R5bGVzaGVldCgp
LT5sb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoKCh4c2x0U3R5bGVzaGVldFB0ciljdHh0KS0+
ZG9jLCB1cmkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0WFNMVExvYWRD
YWxsQmFjayh4c2x0RG9jTG9hZGVyRnVuYyBmdW5jLCBYU0xUUHJvY2Vzc29yKiBwcm9jZXNzb3Is
IERvY0xvYWRlciogbG9hZGVyKQotewotICAgIHhzbHRTZXRMb2FkZXJGdW5jKGZ1bmMpOwotICAg
IGdsb2JhbFByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLSAgICBnbG9iYWxEb2NMb2FkZXIgPSBsb2Fk
ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVUb1ZlY3Rvcih2b2lkKiBjb250ZXh0LCBjb25zdCBj
aGFyKiBidWZmZXIsIGludCBsZW4pCi17Ci0gICAgVmVjdG9yPFVDaGFyPiYgcmVzdWx0T3V0cHV0
ID0gKnN0YXRpY19jYXN0PFZlY3RvcjxVQ2hhcj4qPihjb250ZXh0KTsKLSAgICBTdHJpbmcgZGVj
b2RlZENodW5rID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIsIGxlbik7Ci0gICAgcmVzdWx0T3V0
cHV0LmFwcGVuZChkZWNvZGVkQ2h1bmsuY2hhcmFjdGVycygpLCBkZWNvZGVkQ2h1bmsubGVuZ3Ro
KCkpOwotICAgIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmlu
Zyh4bWxEb2NQdHIgcmVzdWx0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCwgU3RyaW5nJiBy
ZXN1bHRTdHJpbmcpCi17Ci0gICAgeG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dEJ1ZiA9IHhtbEFs
bG9jT3V0cHV0QnVmZmVyKDApOwotICAgIGlmICghb3V0cHV0QnVmKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsKLSAgICBvdXRwdXRCdWYt
PmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+d3JpdGVjYWxsYmFjayA9
IHdyaXRlVG9WZWN0b3I7Ci0gICAgCi0gICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8o
b3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKLSAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShv
dXRwdXRCdWYpOwotICAgIGlmIChyZXR2YWwgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0
aGUgcmVzdWx0LgotICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0
b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicpCi0gICAgICAgIHJlc3VsdFZlY3Rv
ci5yZW1vdmVMYXN0KCk7Ci0KLSAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3Vs
dFZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHRy
YW5zZm9ybVRleHRTdHJpbmdUb1hIVE1MRG9jdW1lbnRTdHJpbmcoU3RyaW5nJiB0ZXh0KQogewog
ICAgIC8vIE1vZGlmeSB0aGUgb3V0cHV0IHNvIHRoYXQgaXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRN
TCBkb2N1bWVudCB3aXRoIGEgPHByZT4gdGFnIGVuY2xvc2luZyB0aGUgdGV4dC4KQEAgLTIxMywz
OCArNjAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxE
b2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQpCiAgICAgICAgICI8L2h0bWw+XG4iOwogfQogCi1z
dGF0aWMgY29uc3QgY2hhcioqIHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChYU0xUUHJv
Y2Vzc29yOjpQYXJhbWV0ZXJNYXAmIHBhcmFtZXRlcnMpCi17Ci0gICAgaWYgKHBhcmFtZXRlcnMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGNoYXIqKiBwYXJhbWV0
ZXJBcnJheSA9IChjb25zdCBjaGFyKiopZmFzdE1hbGxvYygoKHBhcmFtZXRlcnMuc2l6ZSgpICog
MikgKyAxKSAqIHNpemVvZihjaGFyKikpOwotCi0gICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVy
TWFwOjppdGVyYXRvciBlbmQgPSBwYXJhbWV0ZXJzLmVuZCgpOwotICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKLSAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgaXQg
PSBwYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBwYXJhbWV0
ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgIHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5zZWNvbmQudXRmOCgpLmRh
dGEoKSk7Ci0gICAgfQotICAgIHBhcmFtZXRlckFycmF5W2luZGV4XSA9IDA7Ci0KLSAgICByZXR1
cm4gcGFyYW1ldGVyQXJyYXk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVYc2x0UGFyYW1BcnJheShj
b25zdCBjaGFyKiogcGFyYW1zKQotewotICAgIGNvbnN0IGNoYXIqKiB0ZW1wID0gcGFyYW1zOwot
ICAgIGlmICghcGFyYW1zKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgd2hpbGUgKCp0ZW1w
KSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7IC8vIHN0cmR1cCByZXR1cm5zIG1h
bGxvYydkIGJsb2Nrcywgc28gd2UgaGF2ZSB0byB1c2UgZnJlZSgpIGhlcmUKLSAgICAgICAgZnJl
ZSgodm9pZCopKih0ZW1wKyspKTsKLSAgICB9Ci0gICAgZmFzdEZyZWUocGFyYW1zKTsKLX0KLQot
CiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21T
b3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsCiAgICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9k
ZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMjU4LDcgKzczLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYg
c291cmMKICAgICAgICAgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhk
b2N1bWVudFNvdXJjZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IG93bmVyRG9jdW1l
bnQtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KHNvdXJjZU1JTUVUeXBlLCBmcmFt
ZSwgZmFsc2UpOwotICAgIAorCiAgICAgLy8gQmVmb3JlIHBhcnNpbmcsIHdlIG5lZWQgdG8gc2F2
ZSAmIGRldGFjaCB0aGUgb2xkIGRvY3VtZW50IGFuZCBnZXQgdGhlIG5ldyBkb2N1bWVudAogICAg
IC8vIGluIHBsYWNlLiBXZSBoYXZlIHRvIGRvIHRoaXMgb25seSBpZiB3ZSdyZSByZW5kZXJpbmcg
dGhlIHJlc3VsdCBkb2N1bWVudC4KICAgICBpZiAoZnJhbWUpIHsKQEAgLTI2NywxNSArODIsMTUg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9t
U291cmNlKGNvbnN0IFN0cmluZyYgc291cmMKICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zvcm1T
b3VyY2VEb2N1bWVudChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGZyYW1lLT5zZXREb2N1
bWVudChyZXN1bHQpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQog
ICAgICAgICByZXN1bHQtPnNldFVSTChvd25lckRvY3VtZW50LT51cmwoKSk7CiAgICAgcmVzdWx0
LT5vcGVuKCk7Ci0gICAgCisKICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlwZSk7CiAgICAgZGVj
b2Rlci0+c2V0RW5jb2Rpbmcoc291cmNlRW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5n
KCkgOiBUZXh0RW5jb2Rpbmcoc291cmNlRW5jb2RpbmcpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpF
bmNvZGluZ0Zyb21YTUxIZWFkZXIpOwogICAgIHJlc3VsdC0+c2V0RGVjb2RlcihkZWNvZGVyLnJl
bGVhc2UoKSk7Ci0gICAgCisKICAgICByZXN1bHQtPndyaXRlKGRvY3VtZW50U291cmNlKTsKICAg
ICByZXN1bHQtPmZpbmlzaFBhcnNpbmcoKTsKICAgICByZXN1bHQtPmNsb3NlKCk7CkBAIC0yODYs
NyArMTAxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9j
dW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmMKIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91
dHB1dERvYykKIHsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1
bWVudEZyYWdtZW50OjpjcmVhdGUob3V0cHV0RG9jKTsKLSAgICAKKwogICAgIGlmIChzb3VyY2VN
SU1FVHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVu
dChzb3VyY2VTdHJpbmcsIGZyYWdtZW50LmdldCgpKTsKICAgICBlbHNlIGlmIChzb3VyY2VNSU1F
VHlwZSA9PSAidGV4dC9wbGFpbiIpCkBAIC0yOTYsMTE4ICsxMTEsMTAgQEAgc3RhdGljIGlubGlu
ZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0
IFN0cmluZyYgc28KICAgICAgICAgaWYgKCFzdWNjZXNzZnVsUGFyc2UpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3
aXRoIFVSTHMgaGVyZT8KLSAgICAgICAgCi0gICAgcmV0dXJuIGZyYWdtZW50OwotfQotCi1zdGF0
aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVyKFJlZlB0cjxYU0xTdHls
ZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5bGVzaGVldFJvb3ROb2RlKQotewot
ICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9vdE5vZGUpIHsKLSAgICAg
ICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZXNoZWV0Um9v
dE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hl
ZXRSb290Tm9kZSwKLSAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9kZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhj
cmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7Ci0gICAgfQotICAgIAotICAgIGlmICgh
Y2FjaGVkU3R5bGVzaGVldCB8fCAhY2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVT
dHlsZVNoZWV0KCk7Ci19CiAKLXN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21O
b2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKLXsKLSAgICBSZWZQdHI8
RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOwotICAgIGJv
b2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkp
OwotICAgIAotICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOwotICAgIGlmIChzb3VyY2VJc0Rv
Y3VtZW50KQotICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQtPnRy
YW5zZm9ybVNvdXJjZSgpOwotICAgIGlmICghc291cmNlRG9jKSB7Ci0gICAgICAgIHNvdXJjZURv
YyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1lbnQtPmRvY0xvYWRl
cigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCi0gICAgICAgICAgICBzb3VyY2VJc0RvY3Vt
ZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmcoKSk7Ci0gICAgICAg
IHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7Ci0gICAgfQotICAgIHJldHVybiBzb3Vy
Y2VEb2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHJlc3VsdE1JTUVUeXBlKHhtbERvY1B0
ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KQotewotICAgIC8vIFRoZXJlIGFy
ZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aDoK
LSAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1bWVudCksIFhNTCAoY3JlYXRlIGFuIFhN
TCBkb2N1bWVudCksCi0gICAgLy8gYW5kIHRleHQgKHdyYXAgaW4gYSA8cHJlPiBhbmQgY3JlYXRl
IGFuIFhNTCBkb2N1bWVudCkuCi0KLSAgICBjb25zdCB4bWxDaGFyKiByZXN1bHRUeXBlID0gMDsK
LSAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5cGUsIHNoZWV0LCBtZXRob2QpOwotICAg
IGlmIChyZXN1bHRUeXBlID09IDAgJiYgcmVzdWx0RG9jLT50eXBlID09IFhNTF9IVE1MX0RPQ1VN
RU5UX05PREUpCi0gICAgICAgIHJlc3VsdFR5cGUgPSAoY29uc3QgeG1sQ2hhciopImh0bWwiOwot
ICAgIAotICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1sQ2hhciopImh0
bWwiKSkKLSAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOwotICAgIGVsc2UgaWYgKHhtbFN0ckVx
dWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikidGV4dCIpKQotICAgICAgICByZXR1cm4g
InRleHQvcGxhaW4iOwotICAgICAgICAKLSAgICByZXR1cm4gImFwcGxpY2F0aW9uL3htbCI7Ci19
Ci0KLWJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9k
ZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0
RW5jb2RpbmcpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNl
Tm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBzZXRYU0xUTG9hZENhbGxCYWNrKGRvY0xvYWRl
ckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpKTsKLSAgICB4c2x0U3R5bGVz
aGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5
bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKLSAgICBpZiAoIXNoZWV0KSB7Ci0gICAgICAgIHNldFhT
TFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOwotCi0gICAgeG1sQ2hhciogb3JpZ01l
dGhvZCA9IHNoZWV0LT5tZXRob2Q7Ci0gICAgaWYgKCFvcmlnTWV0aG9kICYmIG1pbWVUeXBlID09
ICJ0ZXh0L2h0bWwiKQotICAgICAgICBzaGVldC0+bWV0aG9kID0gKHhtbENoYXIqKSJodG1sIjsK
LQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkRnJlZVNvdXJjZURv
YyA9IGZhbHNlOwotICAgIGlmICh4bWxEb2NQdHIgc291cmNlRG9jID0geG1sRG9jUHRyRnJvbU5v
ZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykpIHsKLSAgICAgICAgLy8gVGhlIFhN
TCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcgdGhlIHJlc3VsdCBhcyBhIGZyYWdt
ZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRvY3VtZW50cywgCi0gICAgICAgIC8v
IGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgaW1tZWRpYXRlbHkgcGFy
c2VkLgotICAgICAgICBzaGVldC0+b21pdFhtbERlY2xhcmF0aW9uID0gdHJ1ZTsKLQotICAgICAg
ICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zvcm1Db250ZXh0ID0geHNsdE5ld1RyYW5z
Zm9ybUNvbnRleHQoc2hlZXQsIHNvdXJjZURvYyk7Ci0gICAgICAgIHJlZ2lzdGVyWFNMVEV4dGVu
c2lvbnModHJhbnNmb3JtQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3PjogWFNMVCBwcm9jZXNzb3IgPHhzbDpzb3J0PiBh
bGdvcml0aG0gb25seSBjb21wYXJlcyBieSBjb2RlIHBvaW50Ci0gICAgICAgIHhzbHRTZXRDdHh0
U29ydEZ1bmModHJhbnNmb3JtQ29udGV4dCwgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24pOwotCi0g
ICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBsaWJ4c2x0LiAKLSAg
ICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEuMS4xMywgc28gb25j
ZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgaWYgKHRyYW5zZm9y
bUNvbnRleHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKLSAgICAgICAgICAgdHJhbnNmb3JtQ29udGV4
dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOwotCi0gICAgICAgIGNvbnN0IGNoYXIq
KiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9wYXJhbWV0ZXJzKTsK
LSAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0LCBwYXJhbXMpOwot
ICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVzaGVldFVzZXIoc2hl
ZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7Ci0gICAgICAgIAotICAg
ICAgICB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQodHJhbnNmb3JtQ29udGV4dCk7ICAgICAgICAK
LSAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFtcyk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc2hvdWxkRnJlZVNvdXJjZURvYykKLSAgICAgICAgICAgIHhtbEZyZWVEb2Moc291cmNlRG9j
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdWNjZXNzID0gc2F2ZVJlc3VsdFRvU3RyaW5nKHJl
c3VsdERvYywgc2hlZXQsIHJlc3VsdFN0cmluZykpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0g
cmVzdWx0TUlNRVR5cGUocmVzdWx0RG9jLCBzaGVldCk7Ci0gICAgICAgICAgICByZXN1bHRFbmNv
ZGluZyA9IChjaGFyKilyZXN1bHREb2MtPmVuY29kaW5nOwotICAgICAgICB9Ci0gICAgICAgIHht
bEZyZWVEb2MocmVzdWx0RG9jKTsKLSAgICB9Ci0gICAgCi0gICAgc2hlZXQtPm1ldGhvZCA9IG9y
aWdNZXRob2Q7Ci0gICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKLSAgICB4c2x0RnJl
ZVN0eWxlc2hlZXQoc2hlZXQpOwotICAgIG1fc3R5bGVzaGVldCA9IDA7CisgICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVyZT8KIAotICAgIHJldHVybiBzdWNjZXNz
OworICAgIHJldHVybiBmcmFnbWVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFBy
b2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2VOb2RlKQpAQCAtNDI5LDcg
KzEzNiw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gWFNMVFByb2Nlc3Nvcjo6dHJh
bnNmb3JtVG9GcmFnbWVudChOb2RlKiBzb3VyY2VOb2RlCiAgICAgLy8gSWYgdGhlIG91dHB1dCBk
b2N1bWVudCBpcyBIVE1MLCBkZWZhdWx0IHRvIEhUTUwgbWV0aG9kLgogICAgIGlmIChvdXRwdXRE
b2MtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJlc3VsdE1JTUVUeXBlID0gInRleHQvaHRt
bCI7Ci0gICAgCisKICAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5vZGUsIHJlc3Vs
dE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcsIHJl
c3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwpAQCAtNDU1LDYgKzE2MiwxMyBAQCB2b2lkIFhTTFRQ
cm9jZXNzb3I6OnJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8s
IGNvbnN0IFN0cmluZwogICAgIG1fcGFyYW1ldGVycy5yZW1vdmUobG9jYWxOYW1lKTsKIH0KIAor
dm9pZCBYU0xUUHJvY2Vzc29yOjpyZXNldCgpCit7CisgICAgbV9zdHlsZXNoZWV0LmNsZWFyKCk7
CisgICAgbV9zdHlsZXNoZWV0Um9vdE5vZGUuY2xlYXIoKTsKKyAgICBtX3BhcmFtZXRlcnMuY2xl
YXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFhT
TFQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggYi9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmgKaW5kZXggOWVlMmFhZC4uNDVmNWNiMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aApAQCAtMzQsNDYgKzM0LDQ2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJh
bWU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci0KLWNsYXNzIFhT
TFRQcm9jZXNzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxYU0xUUHJvY2Vzc29yPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nlc3Nvcj4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3IpOyB9Ci0KLSAgICB2b2lkIHNldFhTTFN0eWxlU2hl
ZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9
IHN0eWxlU2hlZXQ7IH0KLSAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwg
U3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVz
dWx0RW5jb2RpbmcpOwotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJv
bVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGlu
ZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUq
IGZyYW1lKTsKLSAgICAKLSAgICAvLyBET00gbWV0aG9kcwotICAgIHZvaWQgaW1wb3J0U3R5bGVz
aGVldChQYXNzUmVmUHRyPE5vZGU+IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJvb3ROb2RlID0gc3R5
bGU7IH0KLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRyYW5zZm9ybVRvRnJhZ21l
bnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3VwdXREb2MpOwotICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IHRyYW5zZm9ybVRvRG9jdW1lbnQoTm9kZSogc291cmNlKTsKLSAgICAKLSAgICB2b2lk
IHNldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25z
dDsKLSAgICB2b2lkIHJlbW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOwotICAgIHZvaWQgY2xlYXJQYXJhbWV0ZXJzKCkgeyBt
X3BhcmFtZXRlcnMuY2xlYXIoKTsgfQotCi0gICAgdm9pZCByZXNldCgpIHsgbV9zdHlsZXNoZWV0
LmNsZWFyKCk7IG1fc3R5bGVzaGVldFJvb3ROb2RlLmNsZWFyKCk7ICBtX3BhcmFtZXRlcnMuY2xl
YXIoKTsgfQotCi0gICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEs
IHhtbEVycm9yKik7Ci0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2Vy
RGF0YSwgY29uc3QgY2hhciogbXNnLCAuLi4pOwotICAgIAotcHVibGljOgotICAgIC8vIE9ubHkg
Zm9yIGxpYlhTTFQgY2FsbGJhY2tzCi0gICAgWFNMU3R5bGVTaGVldCogeHNsU3R5bGVzaGVldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQoKTsgfQotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJNYXA7Ci0KLXByaXZhdGU6Ci0gICAgWFNMVFBy
b2Nlc3NvcigpIHsgfQotCi0gICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1fc3R5bGVzaGVldDsK
LSAgICBSZWZQdHI8Tm9kZT4gbV9zdHlsZXNoZWV0Um9vdE5vZGU7Ci0gICAgUGFyYW1ldGVyTWFw
IG1fcGFyYW1ldGVyczsKLX07CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRG9jdW1lbnQ7
CisgICAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKKworICAgIGNsYXNzIFhTTFRQcm9jZXNzb3Ig
OiBwdWJsaWMgUmVmQ291bnRlZDxYU0xUUHJvY2Vzc29yPiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KKworICAgICAgICB2b2lkIHNldFhTTFN0eWxlU2hl
ZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVzaGVldCA9
IHN0eWxlU2hlZXQ7IH0KKyAgICAgICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3Vy
Y2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcm
IHJlc3VsdEVuY29kaW5nKTsKKyAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9j
dW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2Rl
LCBGcmFtZSogZnJhbWUpOworCisgICAgICAgIC8vIERPTSBtZXRob2RzCisgICAgICAgIHZvaWQg
aW1wb3J0U3R5bGVzaGVldChQYXNzUmVmUHRyPE5vZGU+IHN0eWxlKSB7IG1fc3R5bGVzaGVldFJv
b3ROb2RlID0gc3R5bGU7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0
cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0RG9jKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3Vy
Y2UpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
ICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKKyAgICAgICAgdm9pZCByZW1vdmVQYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKKyAg
ICAgICAgdm9pZCBjbGVhclBhcmFtZXRlcnMoKSB7IG1fcGFyYW1ldGVycy5jbGVhcigpOyB9CisK
KyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JG
dW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciopOworICAgICAgICBzdGF0aWMgdm9pZCBnZW5l
cmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFyKiBtc2csIC4uLik7CisKKyAg
ICBwdWJsaWM6CisgICAgICAgIC8vIE9ubHkgZm9yIGxpYlhTTFQgY2FsbGJhY2tzCisgICAgICAg
IFhTTFN0eWxlU2hlZXQqIHhzbFN0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlc2hl
ZXQuZ2V0KCk7IH0KKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBh
cmFtZXRlck1hcDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFhTTFRQcm9jZXNzb3IoKSB7IH0K
KworICAgICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0OworICAgICAgICBS
ZWZQdHI8Tm9kZT4gbV9zdHlsZXNoZWV0Um9vdE5vZGU7CisgICAgICAgIFBhcmFtZXRlck1hcCBt
X3BhcmFtZXRlcnM7CisgICAgfTsKIAogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yTGlieHNsdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyMzZlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApAQCAtMCwwICsx
LDMzMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRp
b24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisKKyNp
bmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9j
TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVy
LmgiCisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlhTTFRFeHRlbnNpb25z
LmgiCisjaW5jbHVkZSAiWFNMVFVuaWNvZGVTb3J0LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisj
aW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8bGlieHNsdC9pbXBvcnRzLmg+CisjaW5jbHVk
ZSA8bGlieHNsdC92YXJpYWJsZXMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGlscy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIlNv
ZnRMaW5raW5nLmgiCisKK1NPRlRfTElOS19MSUJSQVJZKGxpYnhzbHQpOworU09GVF9MSU5LKGxp
YnhzbHQsIHhzbHRGcmVlU3R5bGVzaGVldCwgdm9pZCwgKHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0
KSwgKHNoZWV0KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQs
IHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0KSwgKGN0eHQpKQorU09GVF9MSU5L
KGxpYnhzbHQsIHhzbHROZXdUcmFuc2Zvcm1Db250ZXh0LCB4c2x0VHJhbnNmb3JtQ29udGV4dFB0
ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jKSwgKHN0eWxlLCBkb2Mp
KQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRBcHBseVN0eWxlc2hlZXRVc2VyLCB4bWxEb2NQdHIs
ICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYywgY29uc3QgY2hhcioqIHBh
cmFtcywgY29uc3QgY2hhciogb3V0cHV0LCBGSUxFKiBwcm9maWxlLCB4c2x0VHJhbnNmb3JtQ29u
dGV4dFB0ciB1c2VyQ3R4dCksIChzdHlsZSwgZG9jLCBwYXJhbXMsIG91dHB1dCwgcHJvZmlsZSwg
dXNlckN0eHQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRRdW90ZVVzZXJQYXJhbXMsIGludCwg
KHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIGNvbnN0IGNoYXIqKiBwYXJhbXMpLCAoY3R4
dCwgcGFyYW1zKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0Q3R4dFNvcnRGdW5jLCB2b2lk
LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeHNsdFNvcnRGdW5jIGhhbmRsZXIpLCAo
Y3R4dCwgaGFuZGxlcikpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldExvYWRlckZ1bmMsIHZv
aWQsICh4c2x0RG9jTG9hZGVyRnVuYyBmKSwgKGYpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRT
YXZlUmVzdWx0VG8sIGludCwgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYsIHhtbERvY1B0ciByZXN1
bHQsIHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKGJ1ZiwgcmVzdWx0LCBzdHlsZSkpCitTT0ZU
X0xJTksobGlieHNsdCwgeHNsdE5leHRJbXBvcnQsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeHNsdFN0
eWxlc2hlZXRQdHIgc3R5bGUpLCAoc3R5bGUpKQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKHZvaWQqLCBjb25zdCBj
aGFyKiwgLi4uKQoreworICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8gc29tZXRoaW5nIHdp
dGggdGhpcyBlcnJvciBtZXNzYWdlLgorfQorCit2b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCit7CisgICAgQ29uc29sZSog
Y29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7CisgICAgaWYgKCFjb25z
b2xlKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7CisgICAgc3dp
dGNoIChlcnJvci0+bGV2ZWwpIHsKKyAgICBjYXNlIFhNTF9FUlJfTk9ORToKKyAgICAgICAgbGV2
ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX0VSUl9X
QVJOSU5HOgorICAgICAgICBsZXZlbCA9IFdhcm5pbmdNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgWE1MX0VSUl9FUlJPUjoKKyAgICBjYXNlIFhNTF9FUlJfRkFUQUw6Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgbGV2ZWwsIGVycm9yLT5tZXNzYWdlLCBlcnJvci0+bGluZSwgZXJy
b3ItPmZpbGUpOworfQorCisvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8gYmUgbm8gd2F5IHRvIGNv
bnRyb2wgdGhlIGN0eHQgcG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0aHVzIHdlIGhhdmUgZ2xv
YmFscy4KK3N0YXRpYyBYU0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNzb3IgPSAwOworc3RhdGlj
IERvY0xvYWRlciogZ2xvYmFsRG9jTG9hZGVyID0gMDsKK3N0YXRpYyB4bWxEb2NQdHIgZG9jTG9h
ZGVyRnVuYyhjb25zdCB4bWxDaGFyKiB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4bWxEaWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBj
dHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNsdExvYWRUeXBlIHR5
cGUpCit7CisgICAgaWYgKCFnbG9iYWxQcm9jZXNzb3IpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsKKyAgICAg
ICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY29udGV4dCA9ICh4c2x0VHJhbnNmb3JtQ29udGV4
dFB0ciljdHh0OworICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4
dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9kZSk7CisgICAgICAgIEtVUkwgdXJsKEtVUkwo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih1cmkpKTsKKyAgICAgICAgeG1sRnJlZShiYXNlKTsKKyAgICAgICAgUmVzb3Vy
Y2VFcnJvciBlcnJvcjsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAg
ICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKworICAgICAgICBib29sIHJlcXVlc3RBbGxvd2VkID0g
Z2xvYmFsRG9jTG9hZGVyLT5mcmFtZSgpICYmIGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKTsKKyAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2Vk
KSB7CisgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5sb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgZXJyb3Is
IHJlc3BvbnNlLCBkYXRhKTsKKyAgICAgICAgICAgIHJlcXVlc3RBbGxvd2VkID0gZ2xvYmFsRG9j
TG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXF1ZXN0QWxsb3dlZCkgeworICAgICAgICAg
ICAgZGF0YS5jbGVhcigpOworICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmludEFjY2Vz
c0RlbmllZE1lc3NhZ2UodXJsKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnNvbGUqIGNvbnNv
bGUgPSAwOworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29yLT54c2xT
dHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGNvbnNv
bGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKKyAgICAgICAgeG1sU2V0U3RydWN0
dXJlZEVycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyk7Cisg
ICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6Z2Vu
ZXJpY0Vycm9yRnVuYyk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBlbmNvZGlu
ZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cworICAgICAgICAvLyB0aGUg
ZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCisgICAgICAgIHhtbERvY1B0
ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNo
YXIqKXVyaSwgMCwgb3B0aW9ucyk7CisKKyAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVu
YygwLCAwKTsKKyAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCAwKTsKKworICAgICAg
ICByZXR1cm4gZG9jOworICAgIH0KKyAgICBjYXNlIFhTTFRfTE9BRF9TVFlMRVNIRUVUOgorICAg
ICAgICByZXR1cm4gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0ZVN0eWxl
c2hlZXRTdWJSZXNvdXJjZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVyaSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9hZENhbGxCYWNrKHhzbHREb2NMb2FkZXJGdW5j
IGZ1bmMsIFhTTFRQcm9jZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9hZGVyKiBsb2FkZXIpCit7Cisg
ICAgeHNsdFNldExvYWRlckZ1bmMoZnVuYyk7CisgICAgZ2xvYmFsUHJvY2Vzc29yID0gcHJvY2Vz
c29yOworICAgIGdsb2JhbERvY0xvYWRlciA9IGxvYWRlcjsKK30KKworc3RhdGljIGludCB3cml0
ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKK3sK
KyAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVD
aGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZyBkZWNvZGVkQ2h1bmsgPSBTdHJpbmc6OmZyb21V
VEY4KGJ1ZmZlciwgbGVuKTsKKyAgICByZXN1bHRPdXRwdXQuYXBwZW5kKGRlY29kZWRDaHVuay5j
aGFyYWN0ZXJzKCksIGRlY29kZWRDaHVuay5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGxlbjsKK30K
Kworc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0ciByZXN1bHREb2MsIHhz
bHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICB4bWxP
dXRwdXRCdWZmZXJQdHIgb3V0cHV0QnVmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoMCk7CisgICAg
aWYgKCFvdXRwdXRCdWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxVQ2hh
cj4gcmVzdWx0VmVjdG9yOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1bHRWZWN0b3I7
CisgICAgb3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsKKworICAgIGlu
dCByZXR2YWwgPSB4c2x0U2F2ZVJlc3VsdFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBzaGVldCk7
CisgICAgeG1sT3V0cHV0QnVmZmVyQ2xvc2Uob3V0cHV0QnVmKTsKKyAgICBpZiAocmV0dmFsIDwg
MCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3IgPGh0dHA6
Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhzbHQgYXBw
ZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQgdG8gdGhlIHJlc3VsdC4KKyAgICBpZiAocmVzdWx0VmVj
dG9yLnNpemUoKSA+IDAgJiYgcmVzdWx0VmVjdG9yW3Jlc3VsdFZlY3Rvci5zaXplKCkgLSAxXSA9
PSAnXG4nKQorICAgICAgICByZXN1bHRWZWN0b3IucmVtb3ZlTGFzdCgpOworCisgICAgcmVzdWx0
U3RyaW5nID0gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFw
KFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVycykKK3sKKyAgICBpZiAocGFy
YW1ldGVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgY2hhcioq
IHBhcmFtZXRlckFycmF5ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFsbG9jKCgocGFyYW1ldGVycy5z
aXplKCkgKiAyKSArIDEpICogc2l6ZW9mKGNoYXIqKSk7CisKKyAgICBYU0xUUHJvY2Vzc29yOjpQ
YXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7CisgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOworICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVy
YXRvciBpdCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IHBhcmFtZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPnNlY29uZC51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKKwor
ICAgIHJldHVybiBwYXJhbWV0ZXJBcnJheTsKK30KKworc3RhdGljIHZvaWQgZnJlZVhzbHRQYXJh
bUFycmF5KGNvbnN0IGNoYXIqKiBwYXJhbXMpCit7CisgICAgY29uc3QgY2hhcioqIHRlbXAgPSBw
YXJhbXM7CisgICAgaWYgKCFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlICgq
dGVtcCkgeworICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOyAvLyBzdHJkdXAgcmV0dXJu
cyBtYWxsb2MnZCBibG9ja3MsIHNvIHdlIGhhdmUgdG8gdXNlIGZyZWUoKSBoZXJlCisgICAgICAg
IGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7CisgICAgfQorICAgIGZhc3RGcmVlKHBhcmFtcyk7Cit9
CisKK3N0YXRpYyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIoUmVmUHRy
PFhTTFN0eWxlU2hlZXQ+JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0Um9vdE5v
ZGUpCit7CisgICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290Tm9kZSkg
eworICAgICAgICBjYWNoZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxl
c2hlZXRSb290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDog
c3R5bGVzaGVldFJvb3ROb2RlLAorICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNl
U3RyaW5nKGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKKyAgICB9CisKKyAgICBp
ZiAoIWNhY2hlZFN0eWxlc2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVT
dHlsZVNoZWV0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21O
b2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3sKKyAgICBSZWZQdHI8
RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOworICAgIGJv
b2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkp
OworCisgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7CisgICAgaWYgKHNvdXJjZUlzRG9jdW1l
bnQpCisgICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+dHJhbnNm
b3JtU291cmNlKCk7CisgICAgaWYgKCFzb3VyY2VEb2MpIHsKKyAgICAgICAgc291cmNlRG9jID0g
KHhtbERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCks
IGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKKyAgICAgICAgICAgIHNvdXJjZUlzRG9jdW1lbnQg
PyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKKyAgICAgICAgc2hv
dWxkRGVsZXRlID0gc291cmNlRG9jOworICAgIH0KKyAgICByZXR1cm4gc291cmNlRG9jOworfQor
CitzdGF0aWMgaW5saW5lIFN0cmluZyByZXN1bHRNSU1FVHlwZSh4bWxEb2NQdHIgcmVzdWx0RG9j
LCB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgdGhyZWUgdHlw
ZXMgb2Ygb3V0cHV0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGg6CisgICAgLy8gSFRN
TCAoY3JlYXRlIGFuIEhUTUwgZG9jdW1lbnQpLCBYTUwgKGNyZWF0ZSBhbiBYTUwgZG9jdW1lbnQp
LAorICAgIC8vIGFuZCB0ZXh0ICh3cmFwIGluIGEgPHByZT4gYW5kIGNyZWF0ZSBhbiBYTUwgZG9j
dW1lbnQpLgorCisgICAgY29uc3QgeG1sQ2hhciogcmVzdWx0VHlwZSA9IDA7CisgICAgWFNMVF9H
RVRfSU1QT1JUX1BUUihyZXN1bHRUeXBlLCBzaGVldCwgbWV0aG9kKTsKKyAgICBpZiAoIXJlc3Vs
dFR5cGUgJiYgcmVzdWx0RG9jLT50eXBlID09IFhNTF9IVE1MX0RPQ1VNRU5UX05PREUpCisgICAg
ICAgIHJlc3VsdFR5cGUgPSAoY29uc3QgeG1sQ2hhciopImh0bWwiOworCisgICAgaWYgKHhtbFN0
ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikiaHRtbCIpKQorICAgICAgICByZXR1
cm4gInRleHQvaHRtbCI7CisgICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4
bWxDaGFyKikidGV4dCIpKQorICAgICAgICByZXR1cm4gInRleHQvcGxhaW4iOworCisgICAgcmV0
dXJuICJhcHBsaWNhdGlvbi94bWwiOworfQorCitib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVz
dWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQoreworICAgIFJlZlB0cjxEb2N1bWVu
dD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisKKyAgICBzZXRYU0xU
TG9hZENhbGxCYWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xvYWRl
cigpKTsKKyAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRl
cihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKKyAgICBpZiAoIXNo
ZWV0KSB7CisgICAgICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOwor
CisgICAgeG1sQ2hhciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7CisgICAgaWYgKCFvcmln
TWV0aG9kICYmIG1pbWVUeXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBzaGVldC0+bWV0aG9k
ID0gKHhtbENoYXIqKSJodG1sIjsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIGJv
b2wgc2hvdWxkRnJlZVNvdXJjZURvYyA9IGZhbHNlOworICAgIGlmICh4bWxEb2NQdHIgc291cmNl
RG9jID0geG1sRG9jUHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykp
IHsKKyAgICAgICAgLy8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcg
dGhlIHJlc3VsdCBhcyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRv
Y3VtZW50cywKKyAgICAgICAgLy8gYXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFs
d2F5cyBpbW1lZGlhdGVseSBwYXJzZWQuCisgICAgICAgIHNoZWV0LT5vbWl0WG1sRGVjbGFyYXRp
b24gPSB0cnVlOworCisgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5zZm9ybUNv
bnRleHQgPSB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dChzaGVldCwgc291cmNlRG9jKTsKKyAgICAg
ICAgcmVnaXN0ZXJYU0xURXh0ZW5zaW9ucyh0cmFuc2Zvcm1Db250ZXh0KTsKKworICAgICAgICAv
LyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHBy
b2Nlc3NvciA8eHNsOnNvcnQ+IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQK
KyAgICAgICAgeHNsdFNldEN0eHRTb3J0RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29k
ZVNvcnRGdW5jdGlvbik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEg
YnVnIGluIGxpYnhzbHQuCisgICAgICAgIC8vIFRoZSBidWcgaGFzIGJlZW4gZml4ZWQgaW4gdmVy
c2lvbiAxLjEuMTMsIHNvIG9uY2Ugd2Ugc2hpcCB0aGF0IHRoaXMgY2FuIGJlIHJlbW92ZWQuCisg
ICAgICAgIGlmICghdHJhbnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycykKKyAgICAgICAgICAgdHJh
bnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOworCisgICAgICAg
IGNvbnN0IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9w
YXJhbWV0ZXJzKTsKKyAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0
LCBwYXJhbXMpOworICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVz
aGVldFVzZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7CisK
KyAgICAgICAgeHNsdEZyZWVUcmFuc2Zvcm1Db250ZXh0KHRyYW5zZm9ybUNvbnRleHQpOworICAg
ICAgICBmcmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKKworICAgICAgICBpZiAoc2hvdWxkRnJl
ZVNvdXJjZURvYykKKyAgICAgICAgICAgIHhtbEZyZWVEb2Moc291cmNlRG9jKTsKKworICAgICAg
ICBpZiAoc3VjY2VzcyA9IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0LCByZXN1
bHRTdHJpbmcpKSB7CisgICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBlKHJlc3Vs
dERvYywgc2hlZXQpOworICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciopcmVzdWx0
RG9jLT5lbmNvZGluZzsKKyAgICAgICAgfQorICAgICAgICB4bWxGcmVlRG9jKHJlc3VsdERvYyk7
CisgICAgfQorCisgICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7CisgICAgc2V0WFNMVExv
YWRDYWxsQmFjaygwLCAwLCAwKTsKKyAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOworICAg
IG1fc3R5bGVzaGVldCA9IDA7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tIAoxLjYuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35060</attachid>
            <date>2009-08-18 12:01:59 -0700</date>
            <delta_ts>2009-09-08 12:54:59 -0700</delta_ts>
            <desc>Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.</desc>
            <filename>0002-Rename-XSLStyleSheet.cpp-to-XSLStyleSheetLibxslt.cpp.patch</filename>
            <type>text/plain</type>
            <size>30247</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBhZTcwYzgwZWMxZjQ0ZWVjNWIzZWIzYzVkYzhiZDAxN2MzOTU0MzZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFR1ZSwgMTggQXVnIDIwMDkgMjA6NDk6MzUgKzAyMDAKU3ViamVjdDogW1BBVENIIDIvM10g
UmVuYW1lIFhTTFN0eWxlU2hlZXQuY3BwIHRvIFhTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcC4KIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwoKUGF0Y2ggYnkgSmFr
dWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPiBvbiAyMDA5LTA4LTE4ClJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgoKSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQg
d2l0aCBRdFhtbFBhdHRlcm5zIHRvIHRoZSBRdApwb3J0LCByZW5hbWUgWFNMU3R5bGVTaGVldC5j
cHAgdG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwIGFzIHdlIHdpbGwKaGF2ZSBvdXIgb3duIGlt
cGxlbWVudGF0aW9uIHdoaWNoIG1vc3QgbGlrZWx5IHdpbGwgbm90IHNoYXJlIGFueSBjb2RlCndp
dGggdGhlIGN1cnJlbnQgb25lLgoKQWRkaXRpb25hbGx5LCBmaXggc29tZSBjb2Rpbmcgc3R5bGUg
aXNzdWVzLgoKKiBHTlVtYWtlZmlsZS5hbToKKiBXZWJDb3JlLmd5cGk6CiogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CiogV2ViQ29yZVNvdXJjZXMuYmtsOgoqIHhtbC9YU0xTdHlsZVNo
ZWV0LmNwcDogUmVuYW1lZCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAuCiogeG1sL1hTTFN0
eWxlU2hlZXQuaDogRml4IGluZGVudGF0aW9uLgoqIHhtbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5j
cHA6IEFkZGVkLgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAg
IDIyICsrKwogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8ICAgIDQgKy0K
IFdlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIHwgICAgMiArLQogV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hl
ZXQuY3BwICAgICAgICAgfCAgMzEyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
V2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oICAgICAgICAgICB8ICAxMjAgKysrKysrKy0tLS0t
LS0KIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCAgfCAgMzEyICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAzOTkgaW5zZXJ0aW9u
cygrKSwgMzc3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldExpYnhzbHQuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwMjRlNDZlLi4yZmQyZDNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDI4IEBACiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgUmVuYW1lIFhTTFN0eWxl
U2hlZXQuY3BwIHRvIFhTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgSW4gcHJlcGFy
YXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zIHRvIHRoZSBR
dAorICAgICAgICBwb3J0LCByZW5hbWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVl
dExpYnhzbHQuY3BwIGFzIHdlIHdpbGwKKyAgICAgICAgaGF2ZSBvdXIgb3duIGltcGxlbWVudGF0
aW9uIHdoaWNoIG1vc3QgbGlrZWx5IHdpbGwgbm90IHNoYXJlIGFueSBjb2RlCisgICAgICAgIHdp
dGggdGhlIGN1cnJlbnQgb25lLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29k
aW5nIHN0eWxlIGlzc3Vlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogeG1sL1hTTFN0eWxlU2hl
ZXQuY3BwOiBSZW5hbWVkIHRvIFhTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcC4KKyAgICAgICAgKiB4
bWwvWFNMU3R5bGVTaGVldC5oOiBGaXggaW5kZW50YXRpb24uCisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXRMaWJ4c2x0LmNwcDogQWRkZWQuCisKKzIwMDktMDgtMTggIEpha3ViIFdpZWN6b3Jl
ayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgTW92ZSB0aGUgbGlieHNsdCBzcGVjaWZpYyBwYXJ0IG9mIFhTTFRQcm9j
ZXNzb3IgdG8gYSBzZXBhcmF0ZSBmaWxlLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGYxYWEzOC4uZTU4YWE3OCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCkBAIC0yMzU5LDcgKzIzNTksNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX1hT
TFQ9MQogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNw
cCBcCiAJV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oIFwKLQlXZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0LmNwcCBcCisJV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwIFwKIAlX
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggXAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNpb25z
LmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMVEV4dGVuc2lvbnMuaCBcCkBAIC0yNTc3LDcgKzI1Nzcs
NyBAQCBlbmRpZiAjIEVORCBFTkFCTEVfTk9USUZJQ0FUSU9OUwogaWYgRU5BQkxFX1NWRwogRkVB
VFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1NWRz0xCiAKLVdFQkNPUkVfQ1NTX1BS
T1BFUlRZX05BTUVTICs9ICQoV2ViQ29yZSkvY3NzL1NWR0NTU1Byb3BlcnR5TmFtZXMuaW4gCitX
RUJDT1JFX0NTU19QUk9QRVJUWV9OQU1FUyArPSAkKFdlYkNvcmUpL2Nzcy9TVkdDU1NQcm9wZXJ0
eU5hbWVzLmluCiBXRUJDT1JFX0NTU19WQUxVRV9LRVlXT1JEUyArPSAkKFdlYkNvcmUpL2Nzcy9T
VkdDU1NWYWx1ZUtleXdvcmRzLmluCiAKIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDJjNTA1ODAuLmMxZDkwNWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDEwLDcgKzM0MTAsNyBAQAogICAgICAgICAgICAg
J3htbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmgnLAogICAgICAgICAgICAgJ3htbC9YU0xJbXBv
cnRSdWxlLmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTEltcG9ydFJ1bGUuaCcsCi0gICAgICAg
ICAgICAneG1sL1hTTFN0eWxlU2hlZXQuY3BwJywKKyAgICAgICAgICAgICd4bWwvWFNMU3R5bGVT
aGVldExpYnhzbHQuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMU3R5bGVTaGVldC5oJywKICAg
ICAgICAgICAgICd4bWwvWFNMVEV4dGVuc2lvbnMuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNM
VEV4dGVuc2lvbnMuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBj
NGNmZmJhLi5kNjM0YzA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTIzNjA0LDcgKzIzNjA0LDcgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFN0eWxlU2hlZXQuY3BwIg0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHhtbFxYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGVhZGU1MGUuLmEzYzE2MDEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJj
ZXMuYmtsCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qg
b2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHhtbC9YUGF0aFZhbHVl
LmNwcAogICAgICAgICB4bWwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAKICAgICAgICAgeG1s
L1hTTEltcG9ydFJ1bGUuY3BwCi0gICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0LmNwcAorICAgICAg
ICB4bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCiAgICAgICAgIHhtbC9YU0xURXh0ZW5zaW9u
cy5jcHAKICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKICAgICAgICAgeG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcCBi
L1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiN2Q1MmY4Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCi0KLSNpZiBFTkFCTEUoWFNM
VCkKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVk
ZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJY
TUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJYTUxUb2tlbml6ZXJTY29wZS5oIgotI2luY2x1ZGUg
IlhTTEltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAi
bG9hZGVyLmgiCi0KLSNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+Ci0jaW5jbHVkZSA8bGlieHNsdC94
c2x0dXRpbHMuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJTb2Z0TGlua2luZy5o
IgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi1TT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0
KQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRJc0JsYW5rLCBpbnQsICh4bWxDaGFyICpzdHIpLCAo
c3RyKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0R2V0TnNQcm9wLCB4bWxDaGFyICosICh4bWxO
b2RlUHRyIG5vZGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKm5hbWVTcGFj
ZSksIChub2RlLCBuYW1lLCBuYW1lU3BhY2UpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRQYXJz
ZVN0eWxlc2hlZXREb2MsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeG1sRG9jUHRyIGRvYyksIChkb2Mp
KQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRMb2FkU3R5bGVzaGVldFBJLCB4c2x0U3R5bGVzaGVl
dFB0ciwgKHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFyZW50
UnVsZSwgY29uc3QgU3RyaW5nJiBocmVmKQotICAgIDogU3R5bGVTaGVldChwYXJlbnRSdWxlLCBo
cmVmKQotICAgICwgbV9vd25lckRvY3VtZW50KDApCi0gICAgLCBtX3N0eWxlc2hlZXREb2MoMCkK
LSAgICAsIG1fZW1iZWRkZWQoZmFsc2UpCi0gICAgLCBtX3Byb2Nlc3NlZChmYWxzZSkgLy8gQ2hp
bGQgc2hlZXRzIGdldCBtYXJrZWQgYXMgcHJvY2Vzc2VkIHdoZW4gdGhlIGxpYnhzbHQgZW5naW5l
IGhhcyBmaW5hbGx5IHNlZW4gdGhlbS4KLSAgICAsIG1fc3R5bGVzaGVldERvY1Rha2VuKGZhbHNl
KQotICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KDApCi17Ci19Ci0KLVhTTFN0eWxlU2hlZXQ6OlhT
TFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCAgYm9vbCBl
bWJlZGRlZCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKLSAgICAsIG1fb3du
ZXJEb2N1bWVudChwYXJlbnROb2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9zdHlsZXNoZWV0RG9j
KDApCi0gICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQotICAgICwgbV9wcm9jZXNzZWQodHJ1ZSkg
Ly8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCi0gICAgLCBtX3N0eWxlc2hl
ZXREb2NUYWtlbihmYWxzZSkKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQotewotfQotCi1Y
U0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCi17Ci0gICAgaWYgKCFtX3N0eWxlc2hlZXRE
b2NUYWtlbikKLSAgICAgICAgeG1sRnJlZURvYyhtX3N0eWxlc2hlZXREb2MpOwotfQotCi1ib29s
IFhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCi17Ci0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIFN0
eWxlQmFzZSogcnVsZSA9IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUo
KSkgewotICAgICAgICAgICAgWFNMSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8WFNM
SW1wb3J0UnVsZSo+KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGltcG9ydC0+aXNMb2FkaW5nKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKLXsKLSAg
ICBpZiAoaXNMb2FkaW5nKCkpIAotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHBhcmVudCgpKQot
ICAgICAgICBwYXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKLSAgICBpZiAob3duZXJOb2RlKCkpCi0g
ICAgICAgIG93bmVyTm9kZSgpLT5zaGVldExvYWRlZCgpOwotfQotCi14bWxEb2NQdHIgWFNMU3R5
bGVTaGVldDo6ZG9jdW1lbnQoKQotewotICAgIGlmIChtX2VtYmVkZGVkICYmIG93bmVyRG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zv
cm1Tb3VyY2UoKTsKLSAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOwotfQotCi12b2lkIFhTTFN0
eWxlU2hlZXQ6OmNsZWFyRG9jdW1lbnRzKCkKLXsKLSAgICBtX3N0eWxlc2hlZXREb2MgPSAwOwot
ICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAg
ICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUq
IGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAg
IGlmIChpbXBvcnQtPnN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICBpbXBvcnQtPnN0eWxl
U2hlZXQoKS0+Y2xlYXJEb2N1bWVudHMoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRG9jTG9h
ZGVyKiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQotewotICAgIGlmICghbV9vd25lckRvY3Vt
ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9vd25lckRvY3VtZW50LT5kb2NM
b2FkZXIoKTsKLX0KLQotYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgYm9vbCkKLXsKLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRv
IGFuIHhtbERvY1B0cgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KCZCT00pOwotICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCi0gICAgICAg
IHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKLSAgICBtX3N0eWxlc2hlZXREb2NUYWtlbiA9
IGZhbHNlOwotCi0gICAgQ29uc29sZSogY29uc29sZSA9IDA7Ci0gICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgY29uc29sZSA9IGZyYW1lLT5k
b21XaW5kb3coKS0+Y29uc29sZSgpOwotCi0gICAgWE1MVG9rZW5pemVyU2NvcGUgc2NvcGUoZG9j
TG9hZGVyKCksIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMsIFhTTFRQcm9jZXNzb3I6
OnBhcnNlRXJyb3JGdW5jLCBjb25zb2xlKTsKLQotICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkpOwotICAgIGlu
dCBzaXplID0gc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLQotICAgIHhtbFBhcnNl
ckN0eHRQdHIgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsK
LQotICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpIHsKLSAgICAgICAgLy8gVGhlIFhTTCB0cmFu
c2Zvcm0gbWF5IGxlYXZlIHRoZSBuZXdseS10cmFuc2Zvcm1lZCBkb2N1bWVudAotICAgICAgICAv
LyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbCBkaWN0aW9uYXJpZXMgb2YgdGhlIHN0eWxl
IHNoZWV0Ci0gICAgICAgIC8vIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLiBYTUwgZG9jdW1lbnQg
ZGlzcG9zYWwgY2FuIGNvcnJ1cHQgbWVtb3J5Ci0gICAgICAgIC8vIGlmIGEgZG9jdW1lbnQgdXNl
cyBtb3JlIHRoYW4gb25lIHN5bWJvbCBkaWN0aW9uYXJ5LCBzbyB3ZQotICAgICAgICAvLyBlbnN1
cmUgdGhhdCBhbGwgY2hpbGQgc3R5bGVzaGVldHMgdXNlIHRoZSBzYW1lIGRpY3Rpb25hcmllcyBh
cyB0aGVpcgotICAgICAgICAvLyBwYXJlbnRzLgotICAgICAgICB4bWxEaWN0RnJlZShjdHh0LT5k
aWN0KTsKLSAgICAgICAgY3R4dC0+ZGljdCA9IG1fcGFyZW50U3R5bGVTaGVldC0+bV9zdHlsZXNo
ZWV0RG9jLT5kaWN0OwotICAgICAgICB4bWxEaWN0UmVmZXJlbmNlKGN0eHQtPmRpY3QpOwotICAg
IH0KLQotICAgIG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KGN0eHQsIGJ1ZmZl
ciwgc2l6ZSwKLSAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIEJPTUhpZ2hC
eXRlID09IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCi0gICAgICAgIFhNTF9QQVJT
RV9OT0VOVCB8IFhNTF9QQVJTRV9EVERBVFRSIHwgWE1MX1BBUlNFX05PV0FSTklORyB8IFhNTF9Q
QVJTRV9OT0NEQVRBKTsKLSAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKLQotICAgIGxvYWRD
aGlsZFNoZWV0cygpOwotCi0gICAgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsKLX0KLQotdm9pZCBY
U0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQotewotICAgIGlmICghZG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHhtbE5vZGVQdHIgc3R5bGVzaGVldFJvb3QgPSBk
b2N1bWVudCgpLT5jaGlsZHJlbjsKLSAgICAKLSAgICAvLyBUb3AgbGV2ZWwgY2hpbGRyZW4gbWF5
IGluY2x1ZGUgb3RoZXIgdGhpbmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25vcmUgdGhvc2Uu
Ci0gICAgd2hpbGUgKHN0eWxlc2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50eXBlICE9IFhN
TF9FTEVNRU5UX05PREUpCi0gICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVzaGVldFJvb3Qt
Pm5leHQ7Ci0gICAgCi0gICAgaWYgKG1fZW1iZWRkZWQpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0
byBsb2NhdGUgKGJ5IElEKSB0aGUgYXBwcm9wcmlhdGUgZW1iZWRkZWQgc3R5bGVzaGVldCBlbGVt
ZW50LCBzbyB0aGF0IHdlIGNhbiB3YWxrIHRoZSAKLSAgICAgICAgLy8gaW1wb3J0L2luY2x1ZGUg
bGlzdC4KLSAgICAgICAgeG1sQXR0clB0ciBpZE5vZGUgPSB4bWxHZXRJRChkb2N1bWVudCgpLCAo
Y29uc3QgeG1sQ2hhciopKGhyZWYoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGlmICghaWRO
b2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZXNoZWV0Um9vdCA9IGlkTm9k
ZS0+cGFyZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRs
ZSBhbiBleHRlcm5hbCBVUkkgd2l0aCBhICMgaW4gaXQuICBUaGlzIGlzIGEgcHJldHR5IG1pbm9y
IGVkZ2UgY2FzZSwgc28gd2UnbGwgZGVhbAotICAgICAgICAvLyB3aXRoIGl0IGxhdGVyLgotICAg
IH0KLSAgICAKLSAgICBpZiAoc3R5bGVzaGVldFJvb3QpIHsKLSAgICAgICAgLy8gV2FsayB0aGUg
Y2hpbGRyZW4gb2YgdGhlIHJvb3QgZWxlbWVudCBhbmQgbG9vayBmb3IgaW1wb3J0L2luY2x1ZGUg
ZWxlbWVudHMuCi0gICAgICAgIC8vIEltcG9ydHMgbXVzdCBvY2N1ciBmaXJzdC4KLSAgICAgICAg
eG1sTm9kZVB0ciBjdXJyID0gc3R5bGVzaGVldFJvb3QtPmNoaWxkcmVuOwotICAgICAgICB3aGls
ZSAoY3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgIT0gWE1MX0VMRU1FTlRfTk9E
RSkgewotICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKElTX1hTTFRfRUxFTShj
dXJyKSAmJiBJU19YU0xUX05BTUUoY3VyciwgImltcG9ydCIpKSB7Ci0gICAgICAgICAgICAgICAg
eG1sQ2hhciogdXJpUmVmID0geHNsdEdldE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhy
ZWYiLCBYU0xUX05BTUVTUEFDRSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxv
YWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVyaVJlZikpOwotICAg
ICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBOb3cgaGFuZGxlIGluY2x1ZGVzLgotICAgICAgICB3aGlsZSAoY3Vy
cikgewotICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSAmJiBJ
U19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbmNsdWRlIikpIHsKLSAg
ICAgICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1cnIsIChjb25z
dCB4bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgICAgICBsb2Fk
Q2hpbGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKil1cmlSZWYpKTsKLSAgICAg
ICAgICAgICAgICB4bWxGcmVlKHVyaVJlZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
dXJyID0gY3Vyci0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBYU0xTdHlsZVNo
ZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpCi17Ci0gICAgUmVmUHRyPFhT
TEltcG9ydFJ1bGU+IGNoaWxkUnVsZSA9IFhTTEltcG9ydFJ1bGU6OmNyZWF0ZSh0aGlzLCBocmVm
KTsKLSAgICBhcHBlbmQoY2hpbGRSdWxlKTsKLSAgICBjaGlsZFJ1bGUtPmxvYWRTaGVldCgpOwot
fQotCi14c2x0U3R5bGVzaGVldFB0ciBYU0xTdHlsZVNoZWV0Ojpjb21waWxlU3R5bGVTaGVldCgp
Ci17Ci0gICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGUgc3R5bGVz
aGVldCBjb21waWxhdGlvbiBwcm9jZXNzLgotICAgIGlmIChtX2VtYmVkZGVkKQotICAgICAgICBy
ZXR1cm4geHNsdExvYWRTdHlsZXNoZWV0UEkoZG9jdW1lbnQoKSk7Ci0gICAgCi0gICAgLy8geHNs
dFBhcnNlU3R5bGVzaGVldERvYyBtYWtlcyB0aGUgZG9jdW1lbnQgcGFydCBvZiB0aGUgc3R5bGVz
aGVldAotICAgIC8vIHNvIHdlIGhhdmUgdG8gcmVsZWFzZSBvdXIgcG9pbnRlciB0byBpdC4KLSAg
ICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKLSAgICB4c2x0U3R5bGVzaGVldFB0ciBy
ZXN1bHQgPSB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jKG1fc3R5bGVzaGVldERvYyk7Ci0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6c2V0UGFyZW50U3R5bGVTaGVldChY
U0xTdHlsZVNoZWV0KiBwYXJlbnQpCi17Ci0gICAgbV9wYXJlbnRTdHlsZVNoZWV0ID0gcGFyZW50
OwotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIG1fb3duZXJEb2N1bWVudCA9IHBhcmVudC0+b3du
ZXJEb2N1bWVudCgpOwotfQotCi14bWxEb2NQdHIgWFNMU3R5bGVTaGVldDo6bG9jYXRlU3R5bGVz
aGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSkK
LXsKLSAgICBib29sIG1hdGNoZWRQYXJlbnQgPSAocGFyZW50RG9jID09IGRvY3VtZW50KCkpOwot
ICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAg
ICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUq
IGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAg
IFhTTFN0eWxlU2hlZXQqIGNoaWxkID0gaW1wb3J0LT5zdHlsZVNoZWV0KCk7Ci0gICAgICAgICAg
ICBpZiAoIWNoaWxkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG1hdGNoZWRQYXJlbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnByb2Nlc3NlZCgp
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gbGlieHNsdCBoYXMgYmVlbiBnaXZl
biB0aGlzIHNoZWV0IGFscmVhZHkuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0IHRoZSBkb2Mg
VVJJLgotICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpYnhtbCBj
YW5vbmljYWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVmCi0gICAgICAg
ICAgICAgICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5vbmljYWxpemUg
aXQgdXNpbmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKLSAgICAgICAgICAgICAgICAvLyB3
aXRoIHRoZSBVUkkgYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQ1N0cmluZyBpbXBvcnRIcmVm
ID0gaW1wb3J0LT5ocmVmKCkudXRmOCgpOwotICAgICAgICAgICAgICAgIHhtbENoYXIqIGJhc2Ug
PSB4bWxOb2RlR2V0QmFzZShwYXJlbnREb2MsICh4bWxOb2RlUHRyKXBhcmVudERvYyk7Ci0gICAg
ICAgICAgICAgICAgeG1sQ2hhciogY2hpbGRVUkkgPSB4bWxCdWlsZFVSSSgoY29uc3QgeG1sQ2hh
ciopaW1wb3J0SHJlZi5kYXRhKCksIGJhc2UpOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWxV
UklzID0geG1sU3RyRXF1YWwodXJpLCBjaGlsZFVSSSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJl
ZShiYXNlKTsKLSAgICAgICAgICAgICAgICB4bWxGcmVlKGNoaWxkVVJJKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxVUklzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLT5tYXJrQXNQ
cm9jZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5kb2N1bWVudCgp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgeG1sRG9jUHRyIHJlc3VsdCA9IGltcG9ydC0+c3R5bGVTaGVldCgpLT5sb2NhdGVTdHlsZXNo
ZWV0U3ViUmVzb3VyY2UocGFyZW50RG9jLCB1cmkpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgWFNMU3R5bGVT
aGVldDo6bWFya0FzUHJvY2Vzc2VkKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc2VkKTsKLSAg
ICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKLSAgICBtX3Byb2Nlc3NlZCA9IHRydWU7
Ci0gICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXQuaCBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAppbmRleCBmZTk3
YjU0Li5lZWYyZmQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKKysr
IGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCkBAIC0zMiw2NiArMzIsNjYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBEb2N1bWVudDsKLWNs
YXNzIFhTTEltcG9ydFJ1bGU7Ci0gICAgCi1jbGFzcyBYU0xTdHlsZVNoZWV0IDogcHVibGljIFN0
eWxlU2hlZXQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+
IGNyZWF0ZShYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnRJ
bXBvcnQsIGhyZWYpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVl
dD4gY3JlYXRlKE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVm
LCBmYWxzZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBj
cmVhdGVFbWJlZGRlZChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwg
aHJlZiwgdHJ1ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgflhTTFN0eWxlU2hlZXQoKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L3ht
bCI7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcgJnN0cmlu
ZywgYm9vbCBzdHJpY3QgPSB0cnVlKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7Ci0KLSAgICB2b2lkIGxvYWRDaGls
ZFNoZWV0cygpOwotICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKTsK
LQotICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7Ci0KLSAgICBEb2NM
b2FkZXIqIGRvY0xvYWRlcigpOwotCi0gICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSB7IHJl
dHVybiBtX293bmVyRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoWFNM
U3R5bGVTaGVldCogcGFyZW50KTsKLQotICAgIHhtbERvY1B0ciBkb2N1bWVudCgpOwotCi0gICAg
dm9pZCBjbGVhckRvY3VtZW50cygpOwotCi0gICAgeG1sRG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRT
dWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBjb25zdCB4bWxDaGFyKiB1cmkpOwotICAg
IAotICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7Ci0gICAgYm9vbCBwcm9jZXNzZWQoKSBjb25z
dCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQotCi1wcml2YXRlOgotICAgIFhTTFN0eWxlU2hlZXQo
Tm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBib29sIGVtYmVkZGVkKTsKLSAg
ICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5n
JiBocmVmKTsKLQotICAgIERvY3VtZW50KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgeG1sRG9jUHRy
IG1fc3R5bGVzaGVldERvYzsKLSAgICBib29sIG1fZW1iZWRkZWQ7Ci0gICAgYm9vbCBtX3Byb2Nl
c3NlZDsKLSAgICBib29sIG1fc3R5bGVzaGVldERvY1Rha2VuOwotICAgIFhTTFN0eWxlU2hlZXQq
IG1fcGFyZW50U3R5bGVTaGVldDsKLX07CisgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNz
IERvY3VtZW50OworICAgIGNsYXNzIFhTTEltcG9ydFJ1bGU7CisKKyAgICBjbGFzcyBYU0xTdHls
ZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKFhTTEltcG9ydFJ1bGUqIHBhcmVudElt
cG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50SW1wb3J0LCBocmVmKSk7CisgICAgICAg
IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUq
IHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGZhbHNl
KSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4g
Y3JlYXRlRW1iZWRkZWQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFy
ZW50Tm9kZSwgaHJlZiwgdHJ1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+WFNM
U3R5bGVTaGVldCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuICJ0ZXh0L3htbCI7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CisKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tM
b2FkZWQoKTsKKworICAgICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOworICAgICAgICB2b2lk
IGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CisKKyAgICAgICAgeHNsdFN0eWxl
c2hlZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQoKTsKKworICAgICAgICBEb2NMb2FkZXIqIGRvY0xv
YWRlcigpOworCisgICAgICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9v
d25lckRvY3VtZW50OyB9CisgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHls
ZVNoZWV0KiBwYXJlbnQpOworCisgICAgICAgIHhtbERvY1B0ciBkb2N1bWVudCgpOworCisgICAg
ICAgIHZvaWQgY2xlYXJEb2N1bWVudHMoKTsKKworICAgICAgICB4bWxEb2NQdHIgbG9jYXRlU3R5
bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVy
aSk7CisKKyAgICAgICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKTsKKyAgICAgICAgYm9vbCBwcm9j
ZXNzZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgWFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYs
IGJvb2wgZW1iZWRkZWQpOworICAgICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBh
cmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKworICAgICAgICBEb2N1bWVudCogbV9v
d25lckRvY3VtZW50OworICAgICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOworICAgICAg
ICBib29sIG1fZW1iZWRkZWQ7CisgICAgICAgIGJvb2wgbV9wcm9jZXNzZWQ7CisgICAgICAgIGJv
b2wgbV9zdHlsZXNoZWV0RG9jVGFrZW47CisgICAgICAgIFhTTFN0eWxlU2hlZXQqIG1fcGFyZW50
U3R5bGVTaGVldDsKKyAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCBiL1dlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXRMaWJ4c2x0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lZDI3NTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExp
YnhzbHQuY3BwCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiWE1MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyU2NvcGUuaCIKKyNpbmNsdWRlICJYU0xJ
bXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImxvYWRl
ci5oIgorCisjaW5jbHVkZSA8bGlieG1sL3VyaS5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0
aWxzLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorU09GVF9MSU5LX0xJQlJBUlkobGlieHNsdCkKK1NP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0SXNCbGFuaywgaW50LCAoeG1sQ2hhciAqc3RyKSwgKHN0cikp
CitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEdldE5zUHJvcCwgeG1sQ2hhciAqLCAoeG1sTm9kZVB0
ciBub2RlLCBjb25zdCB4bWxDaGFyICpuYW1lLCBjb25zdCB4bWxDaGFyICpuYW1lU3BhY2UpLCAo
bm9kZSwgbmFtZSwgbmFtZVNwYWNlKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UGFyc2VTdHls
ZXNoZWV0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciwgKHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKK1NP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0TG9hZFN0eWxlc2hlZXRQSSwgeHNsdFN0eWxlc2hlZXRQdHIs
ICh4bWxEb2NQdHIgZG9jKSwgKGRvYykpCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudFJ1bGUs
IGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICA6IFN0eWxlU2hlZXQocGFyZW50UnVsZSwgaHJlZikK
KyAgICAsIG1fb3duZXJEb2N1bWVudCgwKQorICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCisgICAg
LCBtX2VtYmVkZGVkKGZhbHNlKQorICAgICwgbV9wcm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNo
ZWV0cyBnZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMg
ZmluYWxseSBzZWVuIHRoZW0uCisgICAgLCBtX3N0eWxlc2hlZXREb2NUYWtlbihmYWxzZSkKKyAg
ICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQoreworfQorCitYU0xTdHlsZVNoZWV0OjpYU0xTdHls
ZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgIGJvb2wgZW1iZWRk
ZWQpCisgICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYpCisgICAgLCBtX293bmVyRG9j
dW1lbnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fc3R5bGVzaGVldERvYygwKQor
ICAgICwgbV9lbWJlZGRlZChlbWJlZGRlZCkKKyAgICAsIG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRo
ZSByb290IHNoZWV0IHN0YXJ0cyBvZmYgcHJvY2Vzc2VkLgorICAgICwgbV9zdHlsZXNoZWV0RG9j
VGFrZW4oZmFsc2UpCisgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKK3sKK30KKworWFNMU3R5
bGVTaGVldDo6flhTTFN0eWxlU2hlZXQoKQoreworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFr
ZW4pCisgICAgICAgIHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKK30KKworYm9vbCBYU0xT
dHlsZVNoZWV0Ojppc0xvYWRpbmcoKQoreworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBTdHlsZUJh
c2UqIHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsK
KyAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9y
dFJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgIGlmIChpbXBvcnQtPmlzTG9hZGluZygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCit7CisgICAgaWYg
KGlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHBhcmVudCgpKQorICAgICAg
ICBwYXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICBpZiAob3duZXJOb2RlKCkpCisgICAgICAg
IG93bmVyTm9kZSgpLT5zaGVldExvYWRlZCgpOworfQorCit4bWxEb2NQdHIgWFNMU3R5bGVTaGVl
dDo6ZG9jdW1lbnQoKQoreworICAgIGlmIChtX2VtYmVkZGVkICYmIG93bmVyRG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3Vy
Y2UoKTsKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2b2lkIFhTTFN0eWxlU2hl
ZXQ6OmNsZWFyRG9jdW1lbnRzKCkKK3sKKyAgICBtX3N0eWxlc2hlZXREb2MgPSAwOworICAgIHVu
c2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBpZiAo
cnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGltcG9y
dCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgIGlmIChp
bXBvcnQtPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICBpbXBvcnQtPnN0eWxlU2hlZXQo
KS0+Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworRG9jTG9hZGVyKiBY
U0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQoreworICAgIGlmICghbV9vd25lckRvY3VtZW50KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lckRvY3VtZW50LT5kb2NMb2FkZXIo
KTsKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgYm9vbCkKK3sKKyAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHht
bERvY1B0cgorICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KCZCT00pOworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCisgICAgICAgIHhtbEZy
ZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICBtX3N0eWxlc2hlZXREb2NUYWtlbiA9IGZhbHNl
OworCisgICAgQ29uc29sZSogY29uc29sZSA9IDA7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG93
bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21XaW5k
b3coKS0+Y29uc29sZSgpOworCisgICAgWE1MVG9rZW5pemVyU2NvcGUgc2NvcGUoZG9jTG9hZGVy
KCksIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMsIFhTTFRQcm9jZXNzb3I6OnBhcnNl
RXJyb3JGdW5jLCBjb25zb2xlKTsKKworICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkpOworICAgIGludCBzaXpl
ID0gc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAgIHhtbFBhcnNlckN0eHRQ
dHIgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsKKworICAg
IGlmIChtX3BhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgLy8gVGhlIFhTTCB0cmFuc2Zvcm0g
bWF5IGxlYXZlIHRoZSBuZXdseS10cmFuc2Zvcm1lZCBkb2N1bWVudAorICAgICAgICAvLyB3aXRo
IHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbCBkaWN0aW9uYXJpZXMgb2YgdGhlIHN0eWxlIHNoZWV0
CisgICAgICAgIC8vIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLiBYTUwgZG9jdW1lbnQgZGlzcG9z
YWwgY2FuIGNvcnJ1cHQgbWVtb3J5CisgICAgICAgIC8vIGlmIGEgZG9jdW1lbnQgdXNlcyBtb3Jl
IHRoYW4gb25lIHN5bWJvbCBkaWN0aW9uYXJ5LCBzbyB3ZQorICAgICAgICAvLyBlbnN1cmUgdGhh
dCBhbGwgY2hpbGQgc3R5bGVzaGVldHMgdXNlIHRoZSBzYW1lIGRpY3Rpb25hcmllcyBhcyB0aGVp
cgorICAgICAgICAvLyBwYXJlbnRzLgorICAgICAgICB4bWxEaWN0RnJlZShjdHh0LT5kaWN0KTsK
KyAgICAgICAgY3R4dC0+ZGljdCA9IG1fcGFyZW50U3R5bGVTaGVldC0+bV9zdHlsZXNoZWV0RG9j
LT5kaWN0OworICAgICAgICB4bWxEaWN0UmVmZXJlbmNlKGN0eHQtPmRpY3QpOworICAgIH0KKwor
ICAgIG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KGN0eHQsIGJ1ZmZlciwgc2l6
ZSwKKyAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIEJPTUhpZ2hCeXRlID09
IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwKKyAgICAgICAgWE1MX1BBUlNFX05PRU5U
IHwgWE1MX1BBUlNFX0RUREFUVFIgfCBYTUxfUEFSU0VfTk9XQVJOSU5HIHwgWE1MX1BBUlNFX05P
Q0RBVEEpOworICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworCisgICAgbG9hZENoaWxkU2hl
ZXRzKCk7CisKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2b2lkIFhTTFN0eWxl
U2hlZXQ6OmxvYWRDaGlsZFNoZWV0cygpCit7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICB4bWxOb2RlUHRyIHN0eWxlc2hlZXRSb290ID0gZG9jdW1lbnQoKS0+
Y2hpbGRyZW47CisKKyAgICAvLyBUb3AgbGV2ZWwgY2hpbGRyZW4gbWF5IGluY2x1ZGUgb3RoZXIg
dGhpbmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25vcmUgdGhvc2UuCisgICAgd2hpbGUgKHN0
eWxlc2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUp
CisgICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVzaGVldFJvb3QtPm5leHQ7CisKKyAgICBp
ZiAobV9lbWJlZGRlZCkgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGxvY2F0ZSAoYnkgSUQpIHRo
ZSBhcHByb3ByaWF0ZSBlbWJlZGRlZCBzdHlsZXNoZWV0IGVsZW1lbnQsIHNvIHRoYXQgd2UgY2Fu
IHdhbGsgdGhlCisgICAgICAgIC8vIGltcG9ydC9pbmNsdWRlIGxpc3QuCisgICAgICAgIHhtbEF0
dHJQdHIgaWROb2RlID0geG1sR2V0SUQoZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVm
KCkudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBpZiAoIWlkTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc3R5bGVzaGVldFJvb3QgPSBpZE5vZGUtPnBhcmVudDsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgYW4gZXh0ZXJuYWwgVVJJIHdp
dGggYSAjIGluIGl0LiAgVGhpcyBpcyBhIHByZXR0eSBtaW5vciBlZGdlIGNhc2UsIHNvIHdlJ2xs
IGRlYWwKKyAgICAgICAgLy8gd2l0aCBpdCBsYXRlci4KKyAgICB9CisKKyAgICBpZiAoc3R5bGVz
aGVldFJvb3QpIHsKKyAgICAgICAgLy8gV2FsayB0aGUgY2hpbGRyZW4gb2YgdGhlIHJvb3QgZWxl
bWVudCBhbmQgbG9vayBmb3IgaW1wb3J0L2luY2x1ZGUgZWxlbWVudHMuCisgICAgICAgIC8vIElt
cG9ydHMgbXVzdCBvY2N1ciBmaXJzdC4KKyAgICAgICAgeG1sTm9kZVB0ciBjdXJyID0gc3R5bGVz
aGVldFJvb3QtPmNoaWxkcmVuOworICAgICAgICB3aGlsZSAoY3VycikgeworICAgICAgICAgICAg
aWYgKGN1cnItPnR5cGUgIT0gWE1MX0VMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKElTX1hTTFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUoY3Vy
ciwgImltcG9ydCIpKSB7CisgICAgICAgICAgICAgICAgeG1sQ2hhciogdXJpUmVmID0geHNsdEdl
dE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7Cisg
ICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hh
ciopdXJpUmVmKSk7CisgICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjdXJyID0gY3Vy
ci0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBoYW5kbGUgaW5jbHVkZXMuCisg
ICAgICAgIHdoaWxlIChjdXJyKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+dHlwZSA9PSBYTUxf
RUxFTUVOVF9OT0RFICYmIElTX1hTTFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUoY3Vyciwg
ImluY2x1ZGUiKSkgeworICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXRO
c1Byb3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOworICAg
ICAgICAgICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIq
KXVyaVJlZikpOworICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZikK
K3sKKyAgICBSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY2hpbGRSdWxlID0gWFNMSW1wb3J0UnVsZTo6
Y3JlYXRlKHRoaXMsIGhyZWYpOworICAgIGFwcGVuZChjaGlsZFJ1bGUpOworICAgIGNoaWxkUnVs
ZS0+bG9hZFNoZWV0KCk7Cit9CisKK3hzbHRTdHlsZXNoZWV0UHRyIFhTTFN0eWxlU2hlZXQ6OmNv
bXBpbGVTdHlsZVNoZWV0KCkKK3sKKyAgICAvLyBGSVhNRTogSG9vayB1cCBlcnJvciByZXBvcnRp
bmcgZm9yIHRoZSBzdHlsZXNoZWV0IGNvbXBpbGF0aW9uIHByb2Nlc3MuCisgICAgaWYgKG1fZW1i
ZWRkZWQpCisgICAgICAgIHJldHVybiB4c2x0TG9hZFN0eWxlc2hlZXRQSShkb2N1bWVudCgpKTsK
KworICAgIC8vIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MgbWFrZXMgdGhlIGRvY3VtZW50IHBhcnQg
b2YgdGhlIHN0eWxlc2hlZXQKKyAgICAvLyBzbyB3ZSBoYXZlIHRvIHJlbGVhc2Ugb3VyIHBvaW50
ZXIgdG8gaXQuCisgICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7CisgICAgeHNsdFN0
eWxlc2hlZXRQdHIgcmVzdWx0ID0geHNsdFBhcnNlU3R5bGVzaGVldERvYyhtX3N0eWxlc2hlZXRE
b2MpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIG1fc3R5bGVzaGVldERvY1Rha2VuID0gdHJ1
ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OnNldFBhcmVu
dFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KQoreworICAgIG1fcGFyZW50U3R5bGVT
aGVldCA9IHBhcmVudDsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBtX293bmVyRG9jdW1lbnQg
PSBwYXJlbnQtPm93bmVyRG9jdW1lbnQoKTsKK30KKworeG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6
OmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBjb25zdCB4
bWxDaGFyKiB1cmkpCit7CisgICAgYm9vbCBtYXRjaGVkUGFyZW50ID0gKHBhcmVudERvYyA9PSBk
b2N1bWVudCgpKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBydWxlID0gaXRl
bShpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAgICBY
U0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4ocnVsZSk7
CisgICAgICAgICAgICBYU0xTdHlsZVNoZWV0KiBjaGlsZCA9IGltcG9ydC0+c3R5bGVTaGVldCgp
OworICAgICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChtYXRjaGVkUGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5wcm9jZXNzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGxpYnhzbHQg
aGFzIGJlZW4gZ2l2ZW4gdGhpcyBzaGVldCBhbHJlYWR5LgorCisgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0IHRoZSBkb2MgVVJJ
LgorICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpYnhtbCBjYW5v
bmljYWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVmCisgICAgICAgICAg
ICAgICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5vbmljYWxpemUgaXQg
dXNpbmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKKyAgICAgICAgICAgICAgICAvLyB3aXRo
IHRoZSBVUkkgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgQ1N0cmluZyBpbXBvcnRIcmVmID0g
aW1wb3J0LT5ocmVmKCkudXRmOCgpOworICAgICAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4
bWxOb2RlR2V0QmFzZShwYXJlbnREb2MsICh4bWxOb2RlUHRyKXBhcmVudERvYyk7CisgICAgICAg
ICAgICAgICAgeG1sQ2hhciogY2hpbGRVUkkgPSB4bWxCdWlsZFVSSSgoY29uc3QgeG1sQ2hhciop
aW1wb3J0SHJlZi5kYXRhKCksIGJhc2UpOworICAgICAgICAgICAgICAgIGJvb2wgZXF1YWxVUklz
ID0geG1sU3RyRXF1YWwodXJpLCBjaGlsZFVSSSk7CisgICAgICAgICAgICAgICAgeG1sRnJlZShi
YXNlKTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKGNoaWxkVVJJKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxVUklzKSB7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5tYXJrQXNQcm9j
ZXNzZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5kb2N1bWVudCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
eG1sRG9jUHRyIHJlc3VsdCA9IGltcG9ydC0+c3R5bGVTaGVldCgpLT5sb2NhdGVTdHlsZXNoZWV0
U3ViUmVzb3VyY2UocGFyZW50RG9jLCB1cmkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0Ojpt
YXJrQXNQcm9jZXNzZWQoKQoreworICAgIEFTU0VSVCghbV9wcm9jZXNzZWQpOworICAgIEFTU0VS
VCghbV9zdHlsZXNoZWV0RG9jVGFrZW4pOworICAgIG1fcHJvY2Vzc2VkID0gdHJ1ZTsKKyAgICBt
X3N0eWxlc2hlZXREb2NUYWtlbiA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShYU0xUKQotLSAKMS42LjQKCg==
</data>
<flag name="review"
          id="19244"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19317"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35061</attachid>
            <date>2009-08-18 12:21:27 -0700</date>
            <delta_ts>2009-08-19 01:03:19 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>0003-Qt-Implement-XSLT-support-with-QtXmlPatterns.patch</filename>
            <type>text/plain</type>
            <size>24903</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAwYzJjN2FlNjkwNDllMzM5Y2JhMzM5YjIzZWYwY2Y1NGU3ODdmYzc1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFR1ZSwgMTggQXVnIDIwMDkgMjM6MTU6MjIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBKYXZh
U2NyaXB0Q29yZTogW1F0XSBJbXBsZW1lbnQgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJu
cy4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwoKUGF0Y2gg
YnkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPiBvbiAyMDA5LTA4LTE4ClJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiB3dGYvUGxhdGZvcm0uaDogQWRkIFdURl9VU0VfUVhN
TFFVRVJZICNkZWZpbmUuCgpXZWJDb3JlOiBbUXRdIEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0
aCBRdFhtbFBhdHRlcm5zLgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgzMDMKClBhdGNoIGJ5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdtYWlsLmNvbT4gb24gMjAw
OS0wOC0xOApSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogV2ViQ29yZS5wcm86CiogZG9t
L0RvY3VtZW50LmNwcDoKKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CihXZWJDb3JlOjpE
b2N1bWVudDo6fkRvY3VtZW50KToKKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUcmFuc2Zvcm1Tb3Vy
Y2UpOgoqIGRvbS9Eb2N1bWVudC5oOgooV2ViQ29yZTo6RG9jdW1lbnQ6OnRyYW5zZm9ybVNvdXJj
ZSk6CiogZG9tL1hNTFRva2VuaXplci5oOgoqIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHA6CihXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmRvRW5kKToKKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2VQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgoqIHhtbC9YU0xTdHlsZVNoZWV0Lmg6CihXZWJDb3JlOjpY
U0xTdHlsZVNoZWV0OjpzaGVldFN0cmluZyk6CiogeG1sL1hTTFN0eWxlU2hlZXRRdC5jcHA6IEFk
ZGVkLgooV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldCk6CihXZWJDb3JlOjpY
U0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCk6CihXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojpp
c0xvYWRpbmcpOgooV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQpOgooV2ViQ29y
ZTo6WFNMU3R5bGVTaGVldDo6Y2xlYXJEb2N1bWVudHMpOgooV2ViQ29yZTo6WFNMU3R5bGVTaGVl
dDo6ZG9jTG9hZGVyKToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKToKKFdl
YkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0cyk6CihXZWJDb3JlOjpYU0xTdHls
ZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldCk6CihXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpzZXRQYXJl
bnRTdHlsZVNoZWV0KToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6Om1hcmtBc1Byb2Nlc3NlZCk6
CiogeG1sL1hTTFRQcm9jZXNzb3IuaDoKKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOiBG
b3J3YXJkLWRlY2xhcmUgdGhlIHhtbERvY1B0ckZvclN0cmluZyBmdW5jdGlvbi4KKiB4bWwvWFNM
VFByb2Nlc3NvclF0LmNwcDogQWRkZWQuCihXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpNZXNzYWdl
SGFuZGxlcjo6TWVzc2FnZUhhbmRsZXIpOiBBIHN1YmNsYXNzIG9mIFFNZXNzYWdlSGFuZGxlci4K
KFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6Ok1lc3NhZ2VIYW5kbGVyOjpoYW5kbGVNZXNzYWdlKTog
Rm9yd2FyZHMgYWxsIHN0ZGVyciBvdXRwdXQgdG8gQ29uc29sZS4KKFdlYkNvcmU6OlhTTFRQcm9j
ZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKTogVXNlcyBRWG1sUXVlcnkuCi0tLQogSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nICAgICAgICB8ICAgIDkgKysrCiBKYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaCAgIHwgICAgNiArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAg
MzkgKysrKysrKysrKysKIFdlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgfCAgIDIwICst
LS0tLQogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwICAgICAgICB8ICAgMTQgKystLQogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCAgICAgICAgICB8ICAgMTMgKysrLQogV2ViQ29yZS9kb20vWE1MVG9r
ZW5pemVyLmggICAgICB8ICAgIDggKy0KIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcCAg
fCAgIDQ4ICsrKy0tLS0tLS0tLS0tCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggICAgIHwg
ICAyNiArKysrKystLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcCB8ICAxMDMgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCAg
ICAgfCAgIDIwICsrKysrKy0KIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgfCAgMTM3
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMTIgZmlsZXMgY2hhbmdl
ZCwgMzY4IGluc2VydGlvbnMoKyksIDc1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGFhNTMxNmMuLmQ0ZjRk
MTcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0xOCAgSmFrdWIgV2llY3pv
cmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBh
dHRlcm5zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgzMDMKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgV1RGX1VTRV9RWE1MUVVFUlkg
I2RlZmluZS4KKwogMjAwOS0wOC0xOCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IDk4ZDYyNmMuLjRlZGJlZWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC03MzEsMTEg
KzczMSwxMSBAQAogI2RlZmluZSBFTkFCTEVfQUNUSVZFWF9UWVBFX0NPTlZFUlNJT05fV01QTEFZ
RVIgMQogI2VuZGlmCiAKLS8qIFVzZSB0aGUgUXRYbWxTdHJlYW1SZWFkZXIgaW1wbGVtZW50YXRp
b24gZm9yIFhNTFRva2VuaXplciAqLworLyogVXNlIHRoZSBRWG1sU3RyZWFtUmVhZGVyIGltcGxl
bWVudGF0aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KKy8qIFVzZSB0aGUgUVhtbFF1ZXJ5IGltcGxl
bWVudGF0aW9uIGZvciBYU0xUUHJvY2Vzc29yICovCiAjaWYgUExBVEZPUk0oUVQpCi0jaWYgIUVO
QUJMRShYU0xUKQogI2RlZmluZSBXVEZfVVNFX1FYTUxTVFJFQU0gMQotI2VuZGlmCisjZGVmaW5l
IFdURl9VU0VfUVhNTFFVRVJZIDEKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKFFUKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkZGIzNGJl
Li5jODkyM2Q3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMiw2ICsyLDQ1IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCiAKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQ
YXR0ZXJucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MzAzCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnNldFRyYW5zZm9ybVNvdXJjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6dHJhbnNmb3JtU291cmNlKToKKyAgICAgICAgKiBkb20vWE1M
VG9rZW5pemVyLmg6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbik6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnNoZWV0U3RyaW5n
KToKKyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldFF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0
eWxlU2hlZXQ6OmlzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojpj
aGVja0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3Vt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6WFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0
eWxlU2hlZXQ6OnNldFBhcmVudFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5
bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5o
OgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHA6IEZvcndhcmQtZGVjbGFy
ZSB0aGUgeG1sRG9jUHRyRm9yU3RyaW5nIGZ1bmN0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJv
Y2Vzc29yUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6Ok1l
c3NhZ2VIYW5kbGVyOjpNZXNzYWdlSGFuZGxlcik6IEEgc3ViY2xhc3Mgb2YgUU1lc3NhZ2VIYW5k
bGVyLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6TWVzc2FnZUhhbmRsZXI6Omhh
bmRsZU1lc3NhZ2UpOiBGb3J3YXJkcyBhbGwgc3RkZXJyIG91dHB1dCB0byBDb25zb2xlLgorICAg
ICAgICAoV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBVc2VzIFFY
bWxRdWVyeS4KKworMjAwOS0wOC0xOCAgSmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBSZW5h
bWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwLgogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYThk
ODk0YS4uYzY5YmFiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0xMjYsNyArMTI2LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1NJTkdMRV9USFJFQURFRD0xKSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hC
T0FSRF9TVVBQT1JUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX0ZJ
TFRFUlM9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBF
TkFCTEVfWFBBVEg9MQotIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9YU0xUPTAKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0uKTogREVG
SU5FUyArPSBFTkFCTEVfWFNMVD0xCiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6
IERFRklORVMgKz0gRU5BQkxFX1hCTD0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dDU1M9
Lik6IERFRklORVMgKz0gRU5BQkxFX1dDU1M9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
TUw9Lik6IERFRklORVMgKz0gRU5BQkxFX1dNTD0wCkBAIC04ODMsNyArODgzLDYgQEAgU09VUkNF
UyArPSBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3BwIFwKICAgICBkb20vWE1MVG9rZW5pemVyLmNw
cCBcCiAgICAgZG9tL1hNTFRva2VuaXplclF0LmNwcCBcCi0gICAgZG9tL1hNTFRva2VuaXplclNj
b3BlLmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
IFwKICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAgXApAQCAtMTU0NSw3ICsxNTQ0LDYgQEAgSEVBREVSUyArPSBcCiAg
ICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwKICAgICBkb20vV2hlZWxFdmVudC5oIFwK
ICAgICBkb20vWE1MVG9rZW5pemVyLmggXAotICAgIGRvbS9YTUxUb2tlbml6ZXJTY29wZS5oIFwK
ICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmggXApAQCAt
MjY2NywyNSArMjY2NSwxNSBAQCB1bml4OiFtYWM6Q09ORklHICs9IGxpbmtfcGtnY29uZmlnCiAK
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPTEpIHsKICAgICBGRUFUVVJFX0RFRklORVNf
SkFWQVNDUklQVCArPSBFTkFCTEVfWFNMVD0xCi0gICAgUEtHQ09ORklHICs9IGxpYnhtbC0yLjAg
bGlieHNsdAogCi0gICAgbWFjeCB7Ci0gICAgICAgIElOQ0xVREVQQVRIICs9IC91c3IvaW5jbHVk
ZS9saWJ4bWwyCi0gICAgICAgIExJQlMgKz0gLWx4bWwyIC1seHNsdAotICAgIH0KLQotICAgIHdp
bjMyLW1zdmMqIHsKLSAgICAgICAgTElCUyArPSAtbGxpYnhtbDIgLWxsaWJ4c2x0Ci0gICAgfQor
ICAgIFFUICs9IHhtbHBhdHRlcm5zCiAKICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgYmluZGlu
Z3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwIFwKICAgICAgICAgYmluZGluZ3Mv
anMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCBcCi0gICAgICAgIHhtbC9YU0xJbXBvcnRSdWxl
LmNwcCBcCi0gICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0LmNwcCBcCi0gICAgICAgIHhtbC9YU0xU
RXh0ZW5zaW9ucy5jcHAgXAorICAgICAgICB4bWwvWFNMU3R5bGVTaGVldFF0LmNwcCBcCiAgICAg
ICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcCBcCi0gICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQu
Y3BwCisgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9YQkw9MSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRlNDg0ODYuLjAyY2YzNDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBib29sIGlzWEhUTUwpCiAgICAgLCBtX3RpdGxlU2V0RXhwbGljaXRseShmYWxzZSkKICAgICAs
IG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXIodGhpcywgJkRvY3VtZW50Ojp1cGRhdGVGb2N1
c0FwcGVhcmFuY2VUaW1lckZpcmVkKQogICAgICwgbV9leGVjdXRlU2NyaXB0U29vblRpbWVyKHRo
aXMsICZEb2N1bWVudDo6ZXhlY3V0ZVNjcmlwdFNvb25UaW1lckZpcmVkKQotI2lmIEVOQUJMRShY
U0xUKQorI2lmIEVOQUJMRShYU0xUKSAmJiAhVVNFKFFYTUxRVUVSWSkKICAgICAsIG1fdHJhbnNm
b3JtU291cmNlKDApCiAjZW5kaWYKICAgICAsIG1feG1sVmVyc2lvbigiMS4wIikKQEAgLTQ3MSw3
ICs0NzEsNyBAQCBEb2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAgICAgbV9yZW5kZXJBcmVuYSA9
IDA7CiAgICAgfQogCi0jaWYgRU5BQkxFKFhTTFQpCisjaWYgRU5BQkxFKFhTTFQpICYmICFVU0Uo
UVhNTFFVRVJZKQogICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3RyYW5zZm9ybVNvdXJjZSk7
CiAjZW5kaWYKIApAQCAtMzc0OSwxMyArMzc0OSwxNSBAQCB2b2lkIERvY3VtZW50OjphcHBseVhT
TFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKQogICAgIHByb2Nlc3Nvci0+Y3Jl
YXRlRG9jdW1lbnRGcm9tU291cmNlKG5ld1NvdXJjZSwgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1J
TUVUeXBlLCB0aGlzLCBmcmFtZSgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3Jt
U291cmNlKHZvaWQqIGRvYykKK3ZvaWQgRG9jdW1lbnQ6OnNldFRyYW5zZm9ybVNvdXJjZShjb25z
dCBUcmFuc2Zvcm1Tb3VyY2UmIHNvdXJjZSkKIHsKLSAgICBpZiAoZG9jID09IG1fdHJhbnNmb3Jt
U291cmNlKQorI2lmICFVU0UoUVhNTFFVRVJZKQorICAgIGlmIChzb3VyY2UgPT0gbV90cmFuc2Zv
cm1Tb3VyY2UpCiAgICAgICAgIHJldHVybjsKLQogICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0cilt
X3RyYW5zZm9ybVNvdXJjZSk7Ci0gICAgbV90cmFuc2Zvcm1Tb3VyY2UgPSBkb2M7CisjZW5kaWYK
KworICAgIG1fdHJhbnNmb3JtU291cmNlID0gc291cmNlOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4
IGQ4MDk2NDAuLjJjYTM2YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzA2LDEwICs3MDYsMTcgQEAgcHVibGljOgog
CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgdm9pZCBhcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qIHBpKTsKLSAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZSh2b2lkKiBkb2Mp
OwotICAgIGNvbnN0IHZvaWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsgcmV0dXJuIG1fdHJhbnNmb3Jt
U291cmNlOyB9CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtU291cmNlRG9jdW1l
bnQoKSB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50OyB9CiAgICAgdm9pZCBzZXRU
cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1bWVudCogZG9jKSB7IG1fdHJhbnNmb3JtU291cmNl
RG9jdW1lbnQgPSBkb2M7IH0KKworI2lmIFVTRShRWE1MUVVFUlkpCisgICAgdHlwZWRlZiBTdHJp
bmcgVHJhbnNmb3JtU291cmNlOworI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQqIFRyYW5zZm9ybVNv
dXJjZTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2UoY29uc3QgVHJhbnNm
b3JtU291cmNlJiBzb3VyY2UpOworICAgIFRyYW5zZm9ybVNvdXJjZSB0cmFuc2Zvcm1Tb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZTsgfQogI2VuZGlmCiAKICNpZiBFTkFC
TEUoWEJMKQpAQCAtMTAyMSw3ICsxMDI4LDcgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxEb2N1bWVu
dD4gbV9leGVjdXRlU2NyaXB0U29vblRpbWVyOwogICAgIAogI2lmIEVOQUJMRShYU0xUKQotICAg
IHZvaWQqIG1fdHJhbnNmb3JtU291cmNlOworICAgIFRyYW5zZm9ybVNvdXJjZSBtX3RyYW5zZm9y
bVNvdXJjZTsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmggYi9XZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXIuaAppbmRleCAwMTlhODMxLi43ODA4NTY3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6
ZXIuaApAQCAtMTE5LDYgKzExOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgc3RhcnREb2N1
bWVudChjb25zdCB4bWxDaGFyKiB2ZXJzaW9uLCBjb25zdCB4bWxDaGFyKiBlbmNvZGluZywgaW50
IHN0YW5kYWxvbmUpOwogICAgICAgICB2b2lkIGludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIq
IG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlE
KTsKICAgICAgICAgdm9pZCBlbmREb2N1bWVudCgpOworICAgICAgICAKKyNpZiBFTkFCTEUoWFNM
VCkKKyAgICAgICAgdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKERvY0xvYWRlciosIGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCk7CisjZW5kaWYKICNlbmRpZgogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBib29sIHBhcnNlWE1MRG9jdW1lbnRGcmFnbWVudChjb25z
dCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFy
ZW50KTsKQEAgLTE4MCwxMCArMTg0LDYgQEAgcHVibGljOgogICAgICAgICBTZWdtZW50ZWRTdHJp
bmcgbV9wZW5kaW5nU3JjOwogICAgIH07CiAKLSNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERv
Y1B0ckZvclN0cmluZyhEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB1cmwpOwotI2VuZGlmCi0KIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmLCBib29sJiBhdHRyc09LKTsKIGJvb2wgcGFyc2VYTUxEb2N1bWVu
dEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBwYXJl
bnQgPSAwKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwIGIv
V2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCmluZGV4IDc5OWVlZjMuLmEzMzYyZWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXJRdC5jcHAKQEAgLTI0OCw0NSArMjQ4LDE5IEBAIHZvaWQgWE1MVG9rZW5p
emVyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBjaGFyKiBjaHVuaykKIHZvaWQgWE1M
VG9rZW5pemVyOjpkb0VuZCgpCiB7CiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgI3dhcm5pbmcgTG9v
ayBhdCBYTUxUb2tlbml6ZXJMaWJYbWwuY3BwCi0jZW5kaWYKLQotICAgIGlmIChtX3N0cmVhbS5l
cnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvciB8
fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50KSkgewotICAgICAgICBoYW5kbGVF
cnJvcihmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJl
cigpLAotICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7CisgICAgaWYgKG1fc2F3
WFNMVHJhbnNmb3JtKSB7CisgICAgICAgIG1fZG9jLT5zZXRUcmFuc2Zvcm1Tb3VyY2UobV9vcmln
aW5hbFNvdXJjZUZvclRyYW5zZm9ybSk7CisgICAgICAgIG1fZG9jLT5zZXRQYXJzaW5nKGZhbHNl
KTsgLy8gTWFrZSB0aGUgZG9jIHRoaW5rIGl0J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wg
c2hlZXRzLgorICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgICAgICBt
X2RvYy0+c2V0UGFyc2luZyh0cnVlKTsKKyAgICAgICAgbV9wYXJzZXJTdG9wcGVkID0gdHJ1ZTsK
ICAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLXZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhE
b2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
dXJsKQotewotICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIC8vIFBhcnNlIGluIGEgc2luZ2xlIGNodW5rIGludG8gYW4geG1sRG9jUHRyCi0gICAgLy8g
RklYTUU6IEhvb2sgdXAgZXJyb3IgaGFuZGxlcnMgc28gdGhhdCBhIGZhaWx1cmUgdG8gcGFyc2Ug
dGhlIG1haW4gZG9jdW1lbnQgcmVzdWx0cyBpbgotICAgIC8vIGdvb2QgZXJyb3IgbWVzc2FnZXMu
Ci0gICAgY29uc3QgVUNoYXIgQk9NID0gMHhGRUZGOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
Qk9NSGlnaEJ5dGUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJkJP
TSk7Ci0KLSAgICB4bWxHZW5lcmljRXJyb3JGdW5jIG9sZEVycm9yRnVuYyA9IHhtbEdlbmVyaWNF
cnJvcjsKLSAgICB2b2lkKiBvbGRFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0
OwotICAgIAotICAgIHNldExvYWRlckZvckxpYlhNTENhbGxiYWNrcyhkb2NMb2FkZXIpOyAgICAg
ICAgCi0gICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygwLCBlcnJvckZ1bmMpOwotICAgIAotICAg
IHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxSZWFkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHNvdXJjZS5jaGFyYWN0ZXJzKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhciksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLmxhdGluMSgpLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZG
ID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhTTFRfUEFSU0VfT1BUSU9OUyk7Ci0gICAgCi0gICAgc2V0TG9hZGVyRm9y
TGliWE1MQ2FsbGJhY2tzKDApOwotICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMob2xkRXJyb3JD
b250ZXh0LCBvbGRFcnJvckZ1bmMpOworI2VuZGlmCiAgICAgCi0gICAgcmV0dXJuIHNvdXJjZURv
YzsKKyAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1
cmVFbmRPZkRvY3VtZW50RXJyb3IKKyAgICAgICAgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0Zp
cnN0RWxlbWVudCAmJiAhbV9zYXdYU0xUcmFuc2Zvcm0pKQorICAgICAgICBoYW5kbGVFcnJvcihm
YXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLCBj
b2x1bW5OdW1iZXIoKSk7CiB9Ci0jZW5kaWYKIAogaW50IFhNTFRva2VuaXplcjo6bGluZU51bWJl
cigpIGNvbnN0CiB7CkBAIC02ODMsNyArNjU3LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNl
UHJvY2Vzc2luZ0luc3RydWN0aW9uKCkKIAogI2lmIEVOQUJMRShYU0xUKQogICAgIG1fc2F3WFNM
VHJhbnNmb3JtID0gIW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOwotICAgIGlmICht
X3Nhd1hTTFRyYW5zZm9ybSAmJiAhbV9kb2MtPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpKQor
ICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhbV9kb2MtPnRyYW5zZm9ybVNvdXJjZURvY3Vt
ZW50KCkpCiAgICAgICAgIHN0b3BQYXJzaW5nKCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaCBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaApp
bmRleCBlZWYyZmQ0Li45YmVhZDE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNo
ZWV0LmgKKysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCkBAIC0yNiw4ICsyNiwxMiBA
QAogI2lmIEVOQUJMRShYU0xUKQogCiAjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgorCisjaWYgIVVT
RShRWE1MUVVFUlkpCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhz
bHQvdHJhbnNmb3JtLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEwICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBYU0xTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgewogICAg
IHB1YmxpYzoKKyNpZiAhVVNFKFFYTUxRVUVSWSkKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
WFNMU3R5bGVTaGVldD4gY3JlYXRlKFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3Qg
U3RyaW5nJiBocmVmKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFhTTFN0eWxlU2hlZXQocGFyZW50SW1wb3J0LCBocmVmKSk7CiAgICAgICAgIH0KKyNlbmRpZgog
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBjcmVhdGUoTm9kZSogcGFy
ZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgZmFsc2UpKTsK
QEAgLTY1LDMxICs3MSw0MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbG9h
ZENoaWxkU2hlZXRzKCk7CiAgICAgICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5n
JiBocmVmKTsKIAotICAgICAgICB4c2x0U3R5bGVzaGVldFB0ciBjb21waWxlU3R5bGVTaGVldCgp
OwotCiAgICAgICAgIERvY0xvYWRlciogZG9jTG9hZGVyKCk7CiAKICAgICAgICAgRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQoKSB7IHJldHVybiBtX293bmVyRG9jdW1lbnQ7IH0KICAgICAgICAgdm9p
ZCBzZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7CiAKKyNpZiBVU0Uo
UVhNTFFVRVJZKQorICAgICAgICBTdHJpbmcgc2hlZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBt
X3NoZWV0U3RyaW5nOyB9CisjZWxzZQogICAgICAgICB4bWxEb2NQdHIgZG9jdW1lbnQoKTsKKyAg
ICAgICAgeHNsdFN0eWxlc2hlZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQoKTsKKyAgICAgICAgeG1s
RG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBj
b25zdCB4bWxDaGFyKiB1cmkpOworI2VuZGlmCiAKICAgICAgICAgdm9pZCBjbGVhckRvY3VtZW50
cygpOwogCi0gICAgICAgIHhtbERvY1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1s
RG9jUHRyIHBhcmVudERvYywgY29uc3QgeG1sQ2hhciogdXJpKTsKLQogICAgICAgICB2b2lkIG1h
cmtBc1Byb2Nlc3NlZCgpOwogICAgICAgICBib29sIHByb2Nlc3NlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvY2Vzc2VkOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBYU0xTdHlsZVNoZWV0KE5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgYm9vbCBlbWJlZGRlZCk7CisjaWYg
IVVTRShRWE1MUVVFUlkpCiAgICAgICAgIFhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFy
ZW50SW1wb3J0LCBjb25zdCBTdHJpbmcmIGhyZWYpOworI2VuZGlmCiAKICAgICAgICAgRG9jdW1l
bnQqIG1fb3duZXJEb2N1bWVudDsKLSAgICAgICAgeG1sRG9jUHRyIG1fc3R5bGVzaGVldERvYzsK
ICAgICAgICAgYm9vbCBtX2VtYmVkZGVkOwogICAgICAgICBib29sIG1fcHJvY2Vzc2VkOworCisj
aWYgVVNFKFFYTUxRVUVSWSkKKyAgICAgICAgU3RyaW5nIG1fc2hlZXRTdHJpbmc7CisjZWxzZQor
ICAgICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOwogICAgICAgICBib29sIG1fc3R5bGVz
aGVldERvY1Rha2VuOworI2VuZGlmCisKICAgICAgICAgWFNMU3R5bGVTaGVldCogbV9wYXJlbnRT
dHlsZVNoZWV0OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hl
ZXRRdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWRhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisK
KyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlhTTFRQcm9j
ZXNzb3IuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitY
U0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmlu
ZyYgaHJlZiwgIGJvb2wgZW1iZWRkZWQpCisgICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhy
ZWYpCisgICAgLCBtX293bmVyRG9jdW1lbnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAs
IG1fZW1iZWRkZWQoZW1iZWRkZWQpCit7Cit9CisKK1hTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNo
ZWV0KCkKK3sKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFhTTFN0eWxlU2hl
ZXQ6OmNoZWNrTG9hZGVkKCkKK3sKKyAgICBpZiAob3duZXJOb2RlKCkpCisgICAgICAgIG93bmVy
Tm9kZSgpLT5zaGVldExvYWRlZCgpOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmNsZWFyRG9j
dW1lbnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitEb2NMb2FkZXIqIFhTTFN0
eWxlU2hlZXQ6OmRvY0xvYWRlcigpCit7CisgICAgaWYgKCFtX293bmVyRG9jdW1lbnQpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBtX293bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpOwor
fQorCitib29sIFhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBib29sKQoreworICAgIC8vIEZJWE1FOiBGaXggUVhtbFF1ZXJ5IHNvIHRoYXQgaXQgYWxsb3dz
IGNvbXBpbGluZyB0aGUgc3R5bGVzaGVldCBiZWZvcmUgc2V0dGluZyB0aGUgZG9jdW1lbnQKKyAg
ICAvLyB0byBiZSB0cmFuc2Zvcm1lZC4gVGhpcyB3YXkgd2UgY291bGQgbm90IG9ubHkgY2hlY2sg
aWYgdGhlIHN0eWxlc2hlZXQgaXMgY29ycmVjdCBiZWZvcmUgdXNpbmcgaXQKKyAgICAvLyBidXQg
YWxzbyB0dXJuIFhTTFN0eWxlU2hlZXQ6OnNoZWV0U3RyaW5nKCkgaW50byBYU0xTdHlsZVNoZWV0
OjpxdWVyeSgpIHRoYXQgcmV0dXJucyBhIFFYbWxRdWVyeS4KKworICAgIG1fc2hlZXRTdHJpbmcg
PSBzdHJpbmc7CisgICAgcmV0dXJuICFtX3NoZWV0U3RyaW5nLmlzRW1wdHkoKTsKK30KKwordm9p
ZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5n
JiBocmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVl
dDo6c2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjptYXJrQXNQcm9jZXNzZWQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5oIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCmluZGV4IDQ1ZjVjYjEuLmQw
MTU3NDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAorKysgYi9XZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKQEAgLTI4LDEwICsyOCwxNCBAQAogI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5o
IgorI2lmICFVU0UoUVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMu
aD4KICNpbmNsdWRlIDxsaWJ4c2x0L2RvY3VtZW50cy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAorI2luY2x1ZGUgPHFhYnN0cmFjdG1lc3NhZ2VoYW5kbGVyLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lOwpAQCAtNTgsMTYgKzYyLDMwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHJlc2V0KCk7CiAKKyNpZiAhVVNF
KFFYTUxRVUVSWSkKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCogdXNl
ckRhdGEsIHhtbEVycm9yKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNFcnJvckZ1bmMo
dm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKIAotICAgIHB1YmxpYzoKICAg
ICAgICAgLy8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKICAgICAgICAgWFNMU3R5bGVTaGVl
dCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQoKTsgfQor
I2VuZGlmCiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0
ZXJNYXA7CiAKICAgICBwcml2YXRlOgorI2lmIFVTRShRWE1MUVVFUlkpCisgICAgICAgIGNsYXNz
IE1lc3NhZ2VIYW5kbGVyIDogcHVibGljIFFBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyIHsKKworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBNZXNzYWdlSGFuZGxlcihEb2N1bWVudCogZG9jdW1l
bnQgPSAwKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVNZXNzYWdlKFF0TXNnVHlw
ZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwmIGlkZW50aWZpZXIsIGNvbnN0IFFTb3VyY2VM
b2NhdGlvbiYgc291cmNlTG9jYXRpb24pOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBEb2N1bWVudCAqbV9kb2N1bWVudDsKKyAgICAgICAgfTsKKyNlbmRpZgorCiAgICAgICAgIFhT
TFRQcm9jZXNzb3IoKSB7IH0KIAogICAgICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHls
ZXNoZWV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcCBiL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjNjMGUxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3JRdC5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYWt1
YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAi
Q29uc29sZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpbmNsdWRlIDxxYWJzdHJhY3RtZXNzYWdlaGFuZGxlci5oPgorI2luY2x1ZGUg
PHFidWZmZXIuaD4KKyNpbmNsdWRlIDxxc291cmNlbG9jYXRpb24uaD4KKyNpbmNsdWRlIDxxeG1s
cXVlcnkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYU0xUUHJvY2Vzc29yOjpNZXNzYWdl
SGFuZGxlcjo6TWVzc2FnZUhhbmRsZXIoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogUUFic3Ry
YWN0TWVzc2FnZUhhbmRsZXIoKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKK3sKK30KKwor
dm9pZCBYU0xUUHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlcjo6aGFuZGxlTWVzc2FnZShRdE1zZ1R5
cGUgdHlwZSwgY29uc3QgUVN0cmluZyYgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCYgaWRlbnRpZmllciwgY29u
c3QgUVNvdXJjZUxvY2F0aW9uJiBzb3VyY2VMb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fZG9jdW1l
bnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFF0RGVidWdNc2c6CisgICAgICAgIGxldmVs
ID0gVGlwTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0V2FybmluZ01z
ZzoKKyAgICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFF0Q3JpdGljYWxNc2c6CisgICAgY2FzZSBRdEZhdGFsTXNnOgorICAgICAgICBs
ZXZlbCA9IEVycm9yTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBsZXZlbCA9IExvZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgQ29uc29sZSogY29uc29sZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmRvbVdpbmRvdygp
LT5jb25zb2xlKCk7CisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgbGV2ZWwsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlTG9jYXRpb24ubGluZSgpLCBzb3VyY2VMb2NhdGlvbi51cmkoKS50b1N0cmluZygp
KTsKK30KKworYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3Vy
Y2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiBy
ZXN1bHRFbmNvZGluZykKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIFJlZlB0
cjxYU0xTdHlsZVNoZWV0PiBzdHlsZXNoZWV0ID0gbV9zdHlsZXNoZWV0OworICAgIGlmICghc3R5
bGVzaGVldCAmJiBtX3N0eWxlc2hlZXRSb290Tm9kZSkgeworICAgICAgICBOb2RlKiBub2RlID0g
bV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCk7CisgICAgICAgIHN0eWxlc2hlZXQgPSBYU0xTdHls
ZVNoZWV0OjpjcmVhdGUobm9kZS0+cGFyZW50KCkgPyBub2RlLT5wYXJlbnQoKSA6IG5vZGUsIG5v
ZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgc3R5bGVzaGVldC0+cGFy
c2VTdHJpbmcoY3JlYXRlTWFya3VwKG5vZGUpKTsKKyAgICB9CisKKyAgICBpZiAoIXN0eWxlc2hl
ZXQgfHwgc3R5bGVzaGVldC0+c2hlZXRTdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdWNjZXNzOworCisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNl
Tm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9k
ZSA9PSBvd25lckRvY3VtZW50LmdldCgpKTsKKworICAgIFFYbWxRdWVyeSBxdWVyeShRWG1sUXVl
cnk6OlhTTFQyMCk7CisKKyAgICBYU0xUUHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlciBtZXNzYWdl
SGFuZGxlcihvd25lckRvY3VtZW50LmdldCgpKTsKKyAgICBxdWVyeS5zZXRNZXNzYWdlSGFuZGxl
cigmbWVzc2FnZUhhbmRsZXIpOworCisgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CisgICAgZm9yIChYU0xUUHJvY2Vzc29y
OjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmcoaXQtPmZpcnN0
KSwgUVhtbEl0ZW0oUVZhcmlhbnQoaXQtPnNlY29uZCkpKTsKKworICAgIFFTdHJpbmcgc291cmNl
OworICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQorICAgICAgICBzb3VyY2UgPSBvd25lckRvY3Vt
ZW50LT50cmFuc2Zvcm1Tb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZUlzRG9jdW1lbnQgfHwgc291
cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlID0gY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUp
OworCisgICAgUUJ1ZmZlciBpbnB1dEJ1ZmZlcjsKKyAgICBRQnVmZmVyIHN0eWxlU2hlZXRCdWZm
ZXI7CisgICAgUUJ1ZmZlciBvdXRwdXRCdWZmZXI7CisKKyAgICBpbnB1dEJ1ZmZlci5zZXREYXRh
KHNvdXJjZS50b1V0ZjgoKSk7CisgICAgc3R5bGVTaGVldEJ1ZmZlci5zZXREYXRhKFFTdHJpbmco
c3R5bGVzaGVldC0+c2hlZXRTdHJpbmcoKSkudG9VdGY4KCkpOworCisgICAgaW5wdXRCdWZmZXIu
b3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICBzdHlsZVNoZWV0QnVmZmVyLm9wZW4oUUlP
RGV2aWNlOjpSZWFkT25seSk7CisgICAgb3V0cHV0QnVmZmVyLm9wZW4oUUlPRGV2aWNlOjpSZWFk
V3JpdGUpOworCisgICAgcXVlcnkuc2V0Rm9jdXMoJmlucHV0QnVmZmVyKTsKKyAgICBxdWVyeS5z
ZXRRdWVyeSgmc3R5bGVTaGVldEJ1ZmZlciwgUVVybChzdHlsZXNoZWV0LT5ocmVmKCkpKTsKKyAg
ICBzdWNjZXNzID0gcXVlcnkuZXZhbHVhdGVUbygmb3V0cHV0QnVmZmVyKTsKKyAgICBvdXRwdXRC
dWZmZXIucmVzZXQoKTsKKyAgICByZXN1bHRTdHJpbmcgPSBRU3RyaW5nOjpmcm9tVXRmOChvdXRw
dXRCdWZmZXIucmVhZEFsbCgpKS50cmltbWVkKCk7CisKKyAgICBpZiAobV9zdHlsZXNoZWV0KSB7
CisgICAgICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAgbV9zdHls
ZXNoZWV0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tIAoxLjYuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35107</attachid>
            <date>2009-08-19 01:00:59 -0700</date>
            <delta_ts>2009-09-08 11:41:42 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>40637</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAzOTQ2YWQ3MTdkNzIwODdmNzhjMWRiYWFhNmU1YTRkYzRhZTc3YTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFdlZCwgMTkgQXVnIDIwMDkgMTE6NTY6NTUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKClBh
dGNoIGJ5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdtYWlsLmNvbT4gb24gMjAwOS0wOC0xOQpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkluIHByZXBhcmF0aW9uIGZvciBhZGRpbmcgWFNM
VCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0byB0aGUgUXQKcG9ydCwgbW92ZSB0aGUgbGli
eHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29yIGltcGxlbWVudGF0aW9uIGludG8KYW5vdGhl
ciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0aGF0IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4K
CkFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KCiogR05VbWFrZWZp
bGUuYW06CiogV2ViQ29yZS5neXBpOgoqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgoq
IFdlYkNvcmVTb3VyY2VzLmJrbDoKKiB4bWwvWFNMVFByb2Nlc3Nvci5jcHA6CihXZWJDb3JlOjpY
U0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UpOiBSZW1vdmUgdHJhaWxpbmcg
d2hpdGVzcGFjZXMuCihXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UpOiBSZW1vdmUg
dHJhaWxpbmcgd2hpdGVzcGFjZXMuCihXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1U
b0ZyYWdtZW50KTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgooV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6cmVzZXQpOiBNb3ZlZCBvdXQgb2YgdGhlIGNsYXNzIGRlZmluaXRpb24uCiogeG1s
L1hTTFRQcm9jZXNzb3IuaDogRml4IGluZGVudGF0aW9uLgoqIHhtbC9YU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHA6IEFkZGVkLgooV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVu
Yyk6IE1vdmVkLgooV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMpOiBNb3Zl
ZC4KKFdlYkNvcmU6OmRvY0xvYWRlckZ1bmMpOiBNb3ZlZC4KKFdlYkNvcmU6OnNldFhTTFRMb2Fk
Q2FsbEJhY2spOiBNb3ZlZC4KKFdlYkNvcmU6OndyaXRlVG9WZWN0b3IpOiBNb3ZlZC4KKFdlYkNv
cmU6OnNhdmVSZXN1bHRUb1N0cmluZyk6IE1vdmVkLgooV2ViQ29yZTo6eHNsdFBhcmFtQXJyYXlG
cm9tUGFyYW1ldGVyTWFwKTogTW92ZWQuCihXZWJDb3JlOjpmcmVlWHNsdFBhcmFtQXJyYXkpOiBN
b3ZlZC4KKFdlYkNvcmU6OnhzbHRTdHlsZXNoZWV0UG9pbnRlcik6IE1vdmVkLgooV2ViQ29yZTo6
eG1sRG9jUHRyRnJvbU5vZGUpOiBNb3ZlZC4KKFdlYkNvcmU6OnJlc3VsdE1JTUVUeXBlKTogTW92
ZWQuCihXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyk6IE1vdmVkLgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrKysKIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUvV2Vi
Q29yZS5neXBpICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogfCAgIDE2ICstCiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCAg
ICAgICAgICAgIHwgICAxOSArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAgICAgICAg
ICB8ICAzMTUgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5oICAgICAgICAgICB8ICAgODAgKysrKy0tLS0KIFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JMaWJ4c2x0LmNwcCAgfCAgMzMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0NDcgaW5zZXJ0aW9ucygrKSwgMzU1IGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggODFjYjZkYi4uZWMxYmYzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAwOS0wOC0xOSAgSmFrdWIgV2ll
Y3pvcmVrICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNM
VFByb2Nlc3NvciB0byBhIHNlcGFyYXRlIGZpbGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisgICAgICAgIEluIHByZXBhcmF0aW9uIGZv
ciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0byB0aGUgUXQKKyAgICAg
ICAgcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29yIGltcGxl
bWVudGF0aW9uIGludG8KKyAgICAgICAgYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0
aGF0IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KKworICAgICAgICBBZGRpdGlvbmFsbHksIGZp
eCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHhtbC9Y
U0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmNyZWF0
ZURvY3VtZW50RnJvbVNvdXJjZSk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZSk6IFJlbW92ZSB0cmFpbGluZyB3
aGl0ZXNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRv
RnJhZ21lbnQpOiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpYU0xUUHJvY2Vzc29yOjpyZXNldCk6IE1vdmVkIG91dCBvZiB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5oOiBGaXggaW5kZW50YXRpb24uCisgICAg
ICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKTogTW92ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyk6IE1vdmVkLgorICAgICAgICAo
V2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0WFNM
VExvYWRDYWxsQmFjayk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb1ZlY3Rvcik6
IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJlc3VsdFRvU3RyaW5nKTogTW92ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXApOiBNb3ZlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZyZWVYc2x0UGFyYW1BcnJheSk6IE1vdmVkLgorICAgICAgICAo
V2ViQ29yZTo6eHNsdFN0eWxlc2hlZXRQb2ludGVyKTogTW92ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojp4bWxEb2NQdHJGcm9tTm9kZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6cmVzdWx0TUlN
RVR5cGUpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvU3RyaW5nKTogTW92ZWQuCisKIDIwMDktMDgtMTggIE1pa2UgRmVudG9uICA8bWlrZS5mZW50
b25AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggZTIyNDBmNy4uNGYxYWEzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMzY0LDYgKzIzNjQsNyBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNpb25zLmNwcCBcCiAJ
V2ViQ29yZS94bWwvWFNMVEV4dGVuc2lvbnMuaCBcCiAJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5jcHAgXAorCVdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBcCiAJV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3Nvci5oIFwKIAlXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3Bw
IFwKIAlXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2NTExMGUyLi4yZTk5Nzk4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzQyNCw2ICszNDI0LDcgQEAKICAgICAgICAgICAgICd4bWwvWFNMVEV4dGVuc2lv
bnMuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVEV4dGVuc2lvbnMuaCcsCiAgICAgICAgICAg
ICAneG1sL1hTTFRQcm9jZXNzb3IuY3BwJywKKyAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nvci5oJywKICAgICAg
ICAgICAgICd4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFRV
bmljb2RlU29ydC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDlk
MDhiNTYuLmM0Y2ZmYmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MjM2MjEsMTIgKzIzNjIxLDE2IEBACiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3Nvci5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQot
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMVFByb2Nlc3Nvci5oIg0KLQkJ
CQk+DQotCQkJPC9GaWxlPg0KKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3IuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxY
U0xUVW5pY29kZVNvcnQuY3BwIg0KIAkJCQk+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCBhNDBjMmIxLi5l
YWRlNTBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEu
MCIgPz4KLTwhLS0gCis8IS0tCiAKIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllci4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTgsMTMgKzgsMTMgQEAgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUg
bWV0OgogCiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC01MCw3ICs1MCw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCiAgICAgICAgIGFjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAgIDxzZXQgYXBwZW5k
PSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19KUyI+CiAgICAgICAgIGJpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcApAQCAtNDk0
LDcgKzQ5NCw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQg
dG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNw
cAogICAgICAgICBkb20vU2NyaXB0RWxlbWVudC5jcHAKICAgICAgICAgZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCi0gICAgICAgIGRvbS9TZWxlY3RFbGVtZW50LmNwcCAKKyAgICAgICAg
ZG9tL1NlbGVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAog
ICAgICAgICBkb20vU3RhdGljTm9kZUxpc3QuY3BwCiAgICAgICAgIGRvbS9TdHlsZUVsZW1lbnQu
Y3BwCkBAIC01NjMsNyArNTYzLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZp
bGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBlZGl0aW5nL21hcmt1cC5jcHAK
ICAgICAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAogICAgIDwvc2V0PgotICAgIAorCiAg
ICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0hJU1RPUlkiPgogICAgICAg
ICBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKICAgICAgICAgaGlzdG9yeS9DYWNoZWRGcmFt
ZS5jcHAKQEAgLTU3MSw3ICs1NzEsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2Yg
ZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGhpc3RvcnkvUGFnZUNhY2hl
LmNwcAogICAgICAgICBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAogICAgIDwvc2V0PgotICAgIAor
CiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0hUTUwiPgogICAgICAg
ICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvQ2Fu
dmFzUGF0dGVybi5jcHAKQEAgLTczMCw3ICs3MzAsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGxvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAogICAgICAgICBsb2FkZXIvbG9hZGVyLmNwcAogICAg
IDwvc2V0PgotICAgIAorCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VT
X0lDT04iPgogICAgICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCiAgICAgICAgIGxv
YWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCkBAIC0xMDc1LDYgKzEwNzUsNyBAQCBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAg
ICAgIHhtbC9YU0xURXh0ZW5zaW9ucy5jcHAKICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5j
cHAKICAgICAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCisgICAgICAgIHhtbC9YU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAKICAgICA8L3NldD4KIAogPC9tYWtlZmlsZT4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5j
cHAKaW5kZXggOWZkZjMxZi4uYjE4MjI0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5jcHAKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKQEAgLTI2LDEw
ICsyNiw3IEBACiAKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlICJDU3Ry
aW5nLmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9u
LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOCwxNjYg
KzM1LDE3IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRva2Vu
aXplci5oIiAvLyBmb3IgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudAogI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJYU0xURXh0ZW5zaW9ucy5o
IgotI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2lu
Y2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0cy5oPgotI2luY2x1ZGUg
PGxpYnhzbHQvdmFyaWFibGVzLmg+Ci0jaW5jbHVkZSA8bGlieHNsdC94c2x0dXRpbHMuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgotCi1TT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KTsKLVNPRlRfTElOSyhsaWJ4
c2x0LCB4c2x0RnJlZVN0eWxlc2hlZXQsIHZvaWQsICh4c2x0U3R5bGVzaGVldFB0ciBzaGVldCks
IChzaGVldCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVUcmFuc2Zvcm1Db250ZXh0LCB2
b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCksIChjdHh0KSkKLVNPRlRfTElOSyhs
aWJ4c2x0LCB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dCwgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIs
ICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYyksIChzdHlsZSwgZG9jKSkK
LVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlciwgeG1sRG9jUHRyLCAo
eHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MsIGNvbnN0IGNoYXIqKiBwYXJh
bXMsIGNvbnN0IGNoYXIqIG91dHB1dCwgRklMRSogcHJvZmlsZSwgeHNsdFRyYW5zZm9ybUNvbnRl
eHRQdHIgdXNlckN0eHQpLCAoc3R5bGUsIGRvYywgcGFyYW1zLCBvdXRwdXQsIHByb2ZpbGUsIHVz
ZXJDdHh0KSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UXVvdGVVc2VyUGFyYW1zLCBpbnQsICh4
c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCBjb25zdCBjaGFyKiogcGFyYW1zKSwgKGN0eHQs
IHBhcmFtcykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldEN0eHRTb3J0RnVuYywgdm9pZCwg
KHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhzbHRTb3J0RnVuYyBoYW5kbGVyKSwgKGN0
eHQsIGhhbmRsZXIpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRMb2FkZXJGdW5jLCB2b2lk
LCAoeHNsdERvY0xvYWRlckZ1bmMgZiksIChmKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2F2
ZVJlc3VsdFRvLCBpbnQsICh4bWxPdXRwdXRCdWZmZXJQdHIgYnVmLCB4bWxEb2NQdHIgcmVzdWx0
LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChidWYsIHJlc3VsdCwgc3R5bGUpKQotU09GVF9M
SU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0U3R5bGVzaGVldFB0ciwgKHhzbHRTdHls
ZXNoZWV0UHRyIHN0eWxlKSwgKHN0eWxlKSkKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyh2b2lkKiwgY29uc3QgY2hh
ciosIC4uLikKLXsKLSAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIHNvbWV0aGluZyB3aXRo
IHRoaXMgZXJyb3IgbWVzc2FnZS4KLX0KLSAgICAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6cGFyc2VF
cnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKiBlcnJvcikKLXsKLSAgICBDb25zb2xl
KiBjb25zb2xlID0gc3RhdGljX2Nhc3Q8Q29uc29sZSo+KHVzZXJEYXRhKTsKLSAgICBpZiAoIWNv
bnNvbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKLSAgICBz
d2l0Y2ggKGVycm9yLT5sZXZlbCkgewotICAgICAgICBjYXNlIFhNTF9FUlJfTk9ORToKLSAgICAg
ICAgICAgIGxldmVsID0gVGlwTWVzc2FnZUxldmVsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgWE1MX0VSUl9XQVJOSU5HOgotICAgICAgICAgICAgbGV2ZWwgPSBXYXJuaW5nTWVz
c2FnZUxldmVsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9FUlJP
UjoKLSAgICAgICAgY2FzZSBYTUxfRVJSX0ZBVEFMOgotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVycm9yLT5maWxlKTsK
LX0KLQotLy8gRklYTUU6IFRoZXJlIHNlZW1zIHRvIGJlIG5vIHdheSB0byBjb250cm9sIHRoZSBj
dHh0IHBvaW50ZXIgZm9yIGxvYWRpbmcgaGVyZSwgdGh1cyB3ZSBoYXZlIGdsb2JhbHMuCi1zdGF0
aWMgWFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29yID0gMDsKLXN0YXRpYyBEb2NMb2FkZXIq
IGdsb2JhbERvY0xvYWRlciA9IDA7Ci1zdGF0aWMgeG1sRG9jUHRyIGRvY0xvYWRlckZ1bmMoY29u
c3QgeG1sQ2hhciogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1s
RGljdFB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY3R4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzbHRMb2FkVHlwZSB0eXBlKQotewotICAg
IGlmICghZ2xvYmFsUHJvY2Vzc29yKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsKLSAgICAgICAg
ICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRyYW5zZm9ybUNvbnRl
eHRQdHIpY3R4dDsKLSAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShj
b250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKLSAgICAgICAgICAgIEtVUkwg
dXJsKEtVUkwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih1cmkpKTsKLSAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0g
ICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yOwotICAgICAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKLQotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICAg
ICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkgJiYg
Z2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwp
OwotICAgICAgICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICAgICAgZ2xv
YmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0g
ICAgICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgICAgICBk
YXRhLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmludEFjY2Vz
c0RlbmllZE1lc3NhZ2UodXJsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29uc29s
ZSogY29uc29sZSA9IDA7Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJv
Y2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAg
ICAgICAgICAgICBjb25zb2xlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7Ci0gICAg
ICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6
OnBhcnNlRXJyb3JGdW5jKTsKLSAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29u
c29sZSwgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBH
ZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKLSAgICAgICAgICAgIC8vIHRoZSBlbmNvZGluZyBzcGVj
aWZpZWQgaW4gdGhlIEhUVFAgaGVhZGVycy4KLSAgICAgICAgICAgIHhtbERvY1B0ciBkb2MgPSB4
bWxSZWFkTWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNoYXIqKXVyaSwg
MCwgb3B0aW9ucyk7Ci0KLSAgICAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwg
MCk7Ci0gICAgICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKDAsIDApOwotCi0gICAgICAg
ICAgICByZXR1cm4gZG9jOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgWFNMVF9MT0FEX1NUWUxF
U0hFRVQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0
KCktPmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQp
LT5kb2MsIHVyaSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9h
ZENhbGxCYWNrKHhzbHREb2NMb2FkZXJGdW5jIGZ1bmMsIFhTTFRQcm9jZXNzb3IqIHByb2Nlc3Nv
ciwgRG9jTG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgeHNsdFNldExvYWRlckZ1bmMoZnVuYyk7Ci0g
ICAgZ2xvYmFsUHJvY2Vzc29yID0gcHJvY2Vzc29yOwotICAgIGdsb2JhbERvY0xvYWRlciA9IGxv
YWRlcjsKLX0KLQotc3RhdGljIGludCB3cml0ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0
IGNoYXIqIGJ1ZmZlciwgaW50IGxlbikKLXsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRw
dXQgPSAqc3RhdGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOwotICAgIFN0cmluZyBk
ZWNvZGVkQ2h1bmsgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlciwgbGVuKTsKLSAgICByZXN1bHRP
dXRwdXQuYXBwZW5kKGRlY29kZWRDaHVuay5jaGFyYWN0ZXJzKCksIGRlY29kZWRDaHVuay5sZW5n
dGgoKSk7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3Ry
aW5nKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcm
IHJlc3VsdFN0cmluZykKLXsKLSAgICB4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0QnVmID0geG1s
QWxsb2NPdXRwdXRCdWZmZXIoMCk7Ci0gICAgaWYgKCFvdXRwdXRCdWYpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1
Zi0+Y29udGV4dCA9ICZyZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVmLT53cml0ZWNhbGxiYWNr
ID0gd3JpdGVUb1ZlY3RvcjsKLSAgICAKLSAgICBpbnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRU
byhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hlZXQpOwotICAgIHhtbE91dHB1dEJ1ZmZlckNsb3Nl
KG91dHB1dEJ1Zik7Ci0gICAgaWYgKHJldHZhbCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRv
IHRoZSByZXN1bHQuCi0gICAgaWYgKHJlc3VsdFZlY3Rvci5zaXplKCkgPiAwICYmIHJlc3VsdFZl
Y3RvcltyZXN1bHRWZWN0b3Iuc2l6ZSgpIC0gMV0gPT0gJ1xuJykKLSAgICAgICAgcmVzdWx0VmVj
dG9yLnJlbW92ZUxhc3QoKTsKLQotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVz
dWx0VmVjdG9yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQg
dHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQpCiB7
CiAgICAgLy8gTW9kaWZ5IHRoZSBvdXRwdXQgc28gdGhhdCBpdCBpcyBhIHdlbGwtZm9ybWVkIFhI
VE1MIGRvY3VtZW50IHdpdGggYSA8cHJlPiB0YWcgZW5jbG9zaW5nIHRoZSB0ZXh0LgpAQCAtMjEz
LDM4ICs2MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRN
TERvY3VtZW50U3RyaW5nKFN0cmluZyYgdGV4dCkKICAgICAgICAgIjwvaHRtbD5cbiI7CiB9CiAK
LXN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQ
cm9jZXNzb3I6OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVycykKLXsKLSAgICBpZiAocGFyYW1ldGVy
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgY2hhcioqIHBhcmFt
ZXRlckFycmF5ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFsbG9jKCgocGFyYW1ldGVycy5zaXplKCkg
KiAyKSArIDEpICogc2l6ZW9mKGNoYXIqKSk7Ci0KLSAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7Ci0gICAgdW5zaWduZWQgaW5k
ZXggPSAwOwotICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBp
dCA9IHBhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHBhcmFt
ZXRlckFycmF5W2luZGV4KytdID0gc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPnNlY29uZC51dGY4KCku
ZGF0YSgpKTsKLSAgICB9Ci0gICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKLQotICAgIHJl
dHVybiBwYXJhbWV0ZXJBcnJheTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZVhzbHRQYXJhbUFycmF5
KGNvbnN0IGNoYXIqKiBwYXJhbXMpCi17Ci0gICAgY29uc3QgY2hhcioqIHRlbXAgPSBwYXJhbXM7
Ci0gICAgaWYgKCFwYXJhbXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3aGlsZSAoKnRl
bXApIHsKLSAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsgLy8gc3RyZHVwIHJldHVybnMg
bWFsbG9jJ2QgYmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVzZSBmcmVlKCkgaGVyZQotICAgICAgICBm
cmVlKCh2b2lkKikqKHRlbXArKykpOwotICAgIH0KLSAgICBmYXN0RnJlZShwYXJhbXMpOwotfQot
Ci0KIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJv
bVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywKICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VO
b2RlLCBGcmFtZSogZnJhbWUpCiB7CkBAIC0yNTgsNyArNzQsNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyYwogICAgICAgICB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5n
KGRvY3VtZW50U291cmNlKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gb3duZXJEb2N1
bWVudC0+aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoc291cmNlTUlNRVR5cGUsIGZy
YW1lLCBmYWxzZSk7Ci0gICAgCisKICAgICAvLyBCZWZvcmUgcGFyc2luZywgd2UgbmVlZCB0byBz
YXZlICYgZGV0YWNoIHRoZSBvbGQgZG9jdW1lbnQgYW5kIGdldCB0aGUgbmV3IGRvY3VtZW50CiAg
ICAgLy8gaW4gcGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBvbmx5IGlmIHdlJ3JlIHJlbmRlcmlu
ZyB0aGUgcmVzdWx0IGRvY3VtZW50LgogICAgIGlmIChmcmFtZSkgewpAQCAtMjY3LDE1ICs4Mywx
NSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZy
b21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9y
bVNvdXJjZURvY3VtZW50KGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgZnJhbWUtPnNldERv
Y3VtZW50KHJlc3VsdCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQp
CiAgICAgICAgIHJlc3VsdC0+c2V0VVJMKG93bmVyRG9jdW1lbnQtPnVybCgpKTsKICAgICByZXN1
bHQtPm9wZW4oKTsKLSAgICAKKwogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNv
ZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKHNvdXJjZU1JTUVUeXBlKTsKICAgICBk
ZWNvZGVyLT5zZXRFbmNvZGluZyhzb3VyY2VFbmNvZGluZy5pc0VtcHR5KCkgPyBVVEY4RW5jb2Rp
bmcoKSA6IFRleHRFbmNvZGluZyhzb3VyY2VFbmNvZGluZyksIFRleHRSZXNvdXJjZURlY29kZXI6
OkVuY29kaW5nRnJvbVhNTEhlYWRlcik7CiAgICAgcmVzdWx0LT5zZXREZWNvZGVyKGRlY29kZXIu
cmVsZWFzZSgpKTsKLSAgICAKKwogICAgIHJlc3VsdC0+d3JpdGUoZG9jdW1lbnRTb3VyY2UpOwog
ICAgIHJlc3VsdC0+ZmluaXNoUGFyc2luZygpOwogICAgIHJlc3VsdC0+Y2xvc2UoKTsKQEAgLTI4
Niw3ICsxMDIsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVE
b2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogc3RhdGljIGlubGluZSBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBEb2N1bWVudCog
b3V0cHV0RG9jKQogewogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERv
Y3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShvdXRwdXREb2MpOwotICAgIAorCiAgICAgaWYgKHNvdXJj
ZU1JTUVUeXBlID09ICJ0ZXh0L2h0bWwiKQogICAgICAgICBwYXJzZUhUTUxEb2N1bWVudEZyYWdt
ZW50KHNvdXJjZVN0cmluZywgZnJhZ21lbnQuZ2V0KCkpOwogICAgIGVsc2UgaWYgKHNvdXJjZU1J
TUVUeXBlID09ICJ0ZXh0L3BsYWluIikKQEAgLTI5NiwxMTggKzExMiwxMCBAQCBzdGF0aWMgaW5s
aW5lIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UoY29u
c3QgU3RyaW5nJiBzbwogICAgICAgICBpZiAoIXN1Y2Nlc3NmdWxQYXJzZSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBtZXNz
IHdpdGggVVJMcyBoZXJlPwotICAgICAgICAKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0KLXN0
YXRpYyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIoUmVmUHRyPFhTTFN0
eWxlU2hlZXQ+JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0Um9vdE5vZGUpCi17
Ci0gICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290Tm9kZSkgewotICAg
ICAgICBjYWNoZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlc2hlZXRS
b290Tm9kZS0+cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDogc3R5bGVz
aGVldFJvb3ROb2RlLAotICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5n
KGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KCFjYWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gY2FjaGVkU3R5bGVzaGVldC0+Y29tcGls
ZVN0eWxlU2hlZXQoKTsKLX0KIAotc3RhdGljIGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJv
bU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRlKQotewotICAgIFJlZlB0
cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
Ym9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQo
KSk7Ci0gICAgCi0gICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7Ci0gICAgaWYgKHNvdXJjZUlz
RG9jdW1lbnQpCi0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+
dHJhbnNmb3JtU291cmNlKCk7Ci0gICAgaWYgKCFzb3VyY2VEb2MpIHsKLSAgICAgICAgc291cmNl
RG9jID0gKHhtbERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9h
ZGVyKCksIGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKLSAgICAgICAgICAgIHNvdXJjZUlzRG9j
dW1lbnQgPyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKLSAgICAg
ICAgc2hvdWxkRGVsZXRlID0gKHNvdXJjZURvYyAhPSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNv
dXJjZURvYzsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRG9j
UHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIHRocmVlIHR5cGVzIG9mIG91dHB1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRo
OgotICAgIC8vIEhUTUwgKGNyZWF0ZSBhbiBIVE1MIGRvY3VtZW50KSwgWE1MIChjcmVhdGUgYW4g
WE1MIGRvY3VtZW50KSwKLSAgICAvLyBhbmQgdGV4dCAod3JhcCBpbiBhIDxwcmU+IGFuZCBjcmVh
dGUgYW4gWE1MIGRvY3VtZW50KS4KLQotICAgIGNvbnN0IHhtbENoYXIqIHJlc3VsdFR5cGUgPSAw
OwotICAgIFhTTFRfR0VUX0lNUE9SVF9QVFIocmVzdWx0VHlwZSwgc2hlZXQsIG1ldGhvZCk7Ci0g
ICAgaWYgKHJlc3VsdFR5cGUgPT0gMCAmJiByZXN1bHREb2MtPnR5cGUgPT0gWE1MX0hUTUxfRE9D
VU1FTlRfTk9ERSkKLSAgICAgICAgcmVzdWx0VHlwZSA9IChjb25zdCB4bWxDaGFyKikiaHRtbCI7
Ci0gICAgCi0gICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKiki
aHRtbCIpKQotICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7Ci0gICAgZWxzZSBpZiAoeG1sU3Ry
RXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJ0ZXh0IikpCi0gICAgICAgIHJldHVy
biAidGV4dC9wbGFpbiI7Ci0gICAgICAgIAotICAgIHJldHVybiAiYXBwbGljYXRpb24veG1sIjsK
LX0KLQotYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VO
b2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1
bHRFbmNvZGluZykKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3Vy
Y2VOb2RlLT5kb2N1bWVudCgpOwotICAgIAotICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soZG9jTG9h
ZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOwotICAgIHhzbHRTdHls
ZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVldCwgbV9z
dHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOwotICAgIGlmICghc2hlZXQpIHsKLSAgICAgICAgc2V0
WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBtX3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7Ci0KLSAgICB4bWxDaGFyKiBvcmln
TWV0aG9kID0gc2hlZXQtPm1ldGhvZDsKLSAgICBpZiAoIW9yaWdNZXRob2QgJiYgbWltZVR5cGUg
PT0gInRleHQvaHRtbCIpCi0gICAgICAgIHNoZWV0LT5tZXRob2QgPSAoeG1sQ2hhciopImh0bWwi
OwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRGcmVlU291cmNl
RG9jID0gZmFsc2U7Ci0gICAgaWYgKHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxEb2NQdHJGcm9t
Tm9kZShzb3VyY2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9jKSkgewotICAgICAgICAvLyBUaGUg
WE1MIGRlY2xhcmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2luZyB0aGUgcmVzdWx0IGFzIGEgZnJh
Z21lbnQsIGFuZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3IgZG9jdW1lbnRzLCAKLSAgICAgICAg
Ly8gYXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBpbW1lZGlhdGVseSBw
YXJzZWQuCi0gICAgICAgIHNoZWV0LT5vbWl0WG1sRGVjbGFyYXRpb24gPSB0cnVlOwotCi0gICAg
ICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5zZm9ybUNvbnRleHQgPSB4c2x0TmV3VHJh
bnNmb3JtQ29udGV4dChzaGVldCwgc291cmNlRG9jKTsKLSAgICAgICAgcmVnaXN0ZXJYU0xURXh0
ZW5zaW9ucyh0cmFuc2Zvcm1Db250ZXh0KTsKLQotICAgICAgICAvLyA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3NvciA8eHNsOnNvcnQ+
IGFsZ29yaXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKLSAgICAgICAgeHNsdFNldEN0
eHRTb3J0RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik7Ci0K
LSAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIGxpYnhzbHQuIAot
ICAgICAgICAvLyBUaGUgYnVnIGhhcyBiZWVuIGZpeGVkIGluIHZlcnNpb24gMS4xLjEzLCBzbyBv
bmNlIHdlIHNoaXAgdGhhdCB0aGlzIGNhbiBiZSByZW1vdmVkLgotICAgICAgICBpZiAodHJhbnNm
b3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9PSBOVUxMKQotICAgICAgICAgICB0cmFuc2Zvcm1Db250
ZXh0LT5nbG9iYWxWYXJzID0geG1sSGFzaENyZWF0ZSgyMCk7Ci0KLSAgICAgICAgY29uc3QgY2hh
cioqIHBhcmFtcyA9IHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChtX3BhcmFtZXRlcnMp
OwotICAgICAgICB4c2x0UXVvdGVVc2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRleHQsIHBhcmFtcyk7
Ci0gICAgICAgIHhtbERvY1B0ciByZXN1bHREb2MgPSB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlcihz
aGVldCwgc291cmNlRG9jLCAwLCAwLCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsKLSAgICAgICAgCi0g
ICAgICAgIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1Db250ZXh0KTsgICAgICAg
IAotICAgICAgICBmcmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChzaG91bGRGcmVlU291cmNlRG9jKQotICAgICAgICAgICAgeG1sRnJlZURvYyhzb3VyY2VE
b2MpOwotICAgICAgICAKLSAgICAgICAgaWYgKHN1Y2Nlc3MgPSBzYXZlUmVzdWx0VG9TdHJpbmco
cmVzdWx0RG9jLCBzaGVldCwgcmVzdWx0U3RyaW5nKSkgewotICAgICAgICAgICAgbWltZVR5cGUg
PSByZXN1bHRNSU1FVHlwZShyZXN1bHREb2MsIHNoZWV0KTsKLSAgICAgICAgICAgIHJlc3VsdEVu
Y29kaW5nID0gKGNoYXIqKXJlc3VsdERvYy0+ZW5jb2Rpbmc7Ci0gICAgICAgIH0KLSAgICAgICAg
eG1sRnJlZURvYyhyZXN1bHREb2MpOwotICAgIH0KLSAgICAKLSAgICBzaGVldC0+bWV0aG9kID0g
b3JpZ01ldGhvZDsKLSAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDApOwotICAgIHhzbHRG
cmVlU3R5bGVzaGVldChzaGVldCk7Ci0gICAgbV9zdHlsZXNoZWV0ID0gMDsKKyAgICAvLyBGSVhN
RTogRG8gd2UgbmVlZCB0byBtZXNzIHdpdGggVVJMcyBoZXJlPwogCi0gICAgcmV0dXJuIHN1Y2Nl
c3M7CisgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xU
UHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZU5vZGUpCkBAIC00Mjks
NyArMTM3LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2Vzc29yOjp0
cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZU5vZGUKICAgICAvLyBJZiB0aGUgb3V0cHV0
IGRvY3VtZW50IGlzIEhUTUwsIGRlZmF1bHQgdG8gSFRNTCBtZXRob2QuCiAgICAgaWYgKG91dHB1
dERvYy0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgcmVzdWx0TUlNRVR5cGUgPSAidGV4dC9o
dG1sIjsKLSAgICAKKwogICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVz
dWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywg
cmVzdWx0TUlNRVR5cGUsIG91dHB1dERvYyk7CkBAIC00NTUsNiArMTYzLDEzIEBAIHZvaWQgWFNM
VFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgLypuYW1lc3BhY2VVUkkq
LywgY29uc3QgU3RyaW5nCiAgICAgbV9wYXJhbWV0ZXJzLnJlbW92ZShsb2NhbE5hbWUpOwogfQog
Cit2b2lkIFhTTFRQcm9jZXNzb3I6OnJlc2V0KCkKK3sKKyAgICBtX3N0eWxlc2hlZXQuY2xlYXIo
KTsKKyAgICBtX3N0eWxlc2hlZXRSb290Tm9kZS5jbGVhcigpOworICAgIG1fcGFyYW1ldGVycy5j
bGVhcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
WFNMVCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBiL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuaAppbmRleCA5ZWUyYWFkLi40NWY1Y2IxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5oCkBAIC0zNCw0NiArMzQsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBG
cmFtZTsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLQotY2xhc3Mg
WFNMVFByb2Nlc3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KLQotICAgIHZvaWQgc2V0WFNMU3R5bGVT
aGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0
ID0gc3R5bGVTaGVldDsgfQotICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNl
LCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiBy
ZXN1bHRFbmNvZGluZyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnRG
cm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29k
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFt
ZSogZnJhbWUpOwotICAgIAotICAgIC8vIERPTSBtZXRob2RzCi0gICAgdm9pZCBpbXBvcnRTdHls
ZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9zdHlsZXNoZWV0Um9vdE5vZGUgPSBz
dHlsZTsgfQotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdHJhbnNmb3JtVG9GcmFn
bWVudChOb2RlKiBzb3VyY2UsIERvY3VtZW50KiBvdXB1dERvYyk7Ci0gICAgUGFzc1JlZlB0cjxE
b2N1bWVudD4gdHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2UpOwotICAgIAotICAgIHZv
aWQgc2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcm
IGxvY2FsTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFBhcmFtZXRl
cihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNv
bnN0OwotICAgIHZvaWQgcmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJ
LCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSk7Ci0gICAgdm9pZCBjbGVhclBhcmFtZXRlcnMoKSB7
IG1fcGFyYW1ldGVycy5jbGVhcigpOyB9Ci0KLSAgICB2b2lkIHJlc2V0KCkgeyBtX3N0eWxlc2hl
ZXQuY2xlYXIoKTsgbV9zdHlsZXNoZWV0Um9vdE5vZGUuY2xlYXIoKTsgIG1fcGFyYW1ldGVycy5j
bGVhcigpOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJzZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0
YSwgeG1sRXJyb3IqKTsKLSAgICBzdGF0aWMgdm9pZCBnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVz
ZXJEYXRhLCBjb25zdCBjaGFyKiBtc2csIC4uLik7Ci0gICAgCi1wdWJsaWM6Ci0gICAgLy8gT25s
eSBmb3IgbGliWFNMVCBjYWxsYmFja3MKLSAgICBYU0xTdHlsZVNoZWV0KiB4c2xTdHlsZXNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZXNoZWV0LmdldCgpOyB9Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKLQotcHJpdmF0ZToKLSAgICBYU0xU
UHJvY2Vzc29yKCkgeyB9Ci0KLSAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0
OwotICAgIFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKLSAgICBQYXJhbWV0ZXJN
YXAgbV9wYXJhbWV0ZXJzOwotfTsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBEb2N1bWVu
dDsKKyAgICBjbGFzcyBEb2N1bWVudEZyYWdtZW50OworCisgICAgY2xhc3MgWFNMVFByb2Nlc3Nv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQorCisgICAgICAgIHZvaWQgc2V0WFNMU3R5bGVT
aGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0
ID0gc3R5bGVTaGVldDsgfQorICAgICAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNv
dXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmlu
ZyYgcmVzdWx0RW5jb2RpbmcpOworICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVE
b2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgc291
cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5v
ZGUsIEZyYW1lKiBmcmFtZSk7CisKKyAgICAgICAgLy8gRE9NIG1ldGhvZHMKKyAgICAgICAgdm9p
ZCBpbXBvcnRTdHlsZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9zdHlsZXNoZWV0
Um9vdE5vZGUgPSBzdHlsZTsgfQorICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IHRyYW5zZm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3VwdXREb2MpOwor
ICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNv
dXJjZSk7CisKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAg
ICAgICAgU3RyaW5nIGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZVBhcmFtZXRl
cihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOwor
ICAgICAgICB2b2lkIGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0K
KworICAgICAgICB2b2lkIHJlc2V0KCk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VFcnJv
ckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGdl
bmVyaWNFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKKwor
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKKyAgICAg
ICAgWFNMU3R5bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVz
aGVldC5nZXQoKTsgfQorCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
UGFyYW1ldGVyTWFwOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgWFNMVFByb2Nlc3NvcigpIHsg
fQorCisgICAgICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlc2hlZXQ7CisgICAgICAg
IFJlZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKKyAgICAgICAgUGFyYW1ldGVyTWFw
IG1fcGFyYW1ldGVyczsKKyAgICB9OwogCiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDIzNmU3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0wLDAg
KzEsMzMzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRh
dGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKwor
I2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJE
b2NMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6
ZXIuaCIKKyNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiWFNMVEV4dGVuc2lv
bnMuaCIKKyNpbmNsdWRlICJYU0xUVW5pY29kZVNvcnQuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIK
KyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDxsaWJ4c2x0L2ltcG9ydHMuaD4KKyNpbmNs
dWRlIDxsaWJ4c2x0L3ZhcmlhYmxlcy5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAi
U29mdExpbmtpbmcuaCIKKworU09GVF9MSU5LX0xJQlJBUlkobGlieHNsdCk7CitTT0ZUX0xJTkso
bGlieHNsdCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2b2lkLCAoeHNsdFN0eWxlc2hlZXRQdHIgc2hl
ZXQpLCAoc2hlZXQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4
dCwgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQpLCAoY3R4dCkpCitTT0ZUX0xJ
TksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRleHQsIHhzbHRUcmFuc2Zvcm1Db250ZXh0
UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MpLCAoc3R5bGUsIGRv
YykpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5U3R5bGVzaGVldFVzZXIsIHhtbERvY1B0
ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9jLCBjb25zdCBjaGFyKiog
cGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUqIHByb2ZpbGUsIHhzbHRUcmFuc2Zvcm1D
b250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2MsIHBhcmFtcywgb3V0cHV0LCBwcm9maWxl
LCB1c2VyQ3R4dCkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFF1b3RlVXNlclBhcmFtcywgaW50
LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgY29uc3QgY2hhcioqIHBhcmFtcyksIChj
dHh0LCBwYXJhbXMpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRDdHh0U29ydEZ1bmMsIHZv
aWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0U29ydEZ1bmMgaGFuZGxlciks
IChjdHh0LCBoYW5kbGVyKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0TG9hZGVyRnVuYywg
dm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikpCitTT0ZUX0xJTksobGlieHNsdCwgeHNs
dFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVmZmVyUHRyIGJ1ZiwgeG1sRG9jUHRyIHJl
c3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoYnVmLCByZXN1bHQsIHN0eWxlKSkKK1NP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwgeHNsdFN0eWxlc2hlZXRQdHIsICh4c2x0
U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkpCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmModm9pZCosIGNvbnN0
IGNoYXIqLCAuLi4pCit7CisgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBkbyBzb21ldGhpbmcg
d2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCit9CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6cGFyc2VF
cnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKiBlcnJvcikKK3sKKyAgICBDb25zb2xl
KiBjb25zb2xlID0gc3RhdGljX2Nhc3Q8Q29uc29sZSo+KHVzZXJEYXRhKTsKKyAgICBpZiAoIWNv
bnNvbGUpCisgICAgICAgIHJldHVybjsKKworICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICBz
d2l0Y2ggKGVycm9yLT5sZXZlbCkgeworICAgIGNhc2UgWE1MX0VSUl9OT05FOgorICAgICAgICBs
ZXZlbCA9IFRpcE1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYTUxfRVJS
X1dBUk5JTkc6CisgICAgICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBYTUxfRVJSX0VSUk9SOgorICAgIGNhc2UgWE1MX0VSUl9GQVRBTDoK
KyAgICBkZWZhdWx0OgorICAgICAgICBsZXZlbCA9IEVycm9yTWVzc2FnZUxldmVsOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKFhNTE1lc3NhZ2VTb3Vy
Y2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZXJyb3ItPm1lc3NhZ2UsIGVycm9yLT5saW5lLCBl
cnJvci0+ZmlsZSk7Cit9CisKKy8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBubyB3YXkgdG8g
Y29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUsIHRodXMgd2UgaGF2ZSBn
bG9iYWxzLgorc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9IDA7CitzdGF0
aWMgRG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOworc3RhdGljIHhtbERvY1B0ciBkb2NM
b2FkZXJGdW5jKGNvbnN0IHhtbENoYXIqIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhtbERpY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
IGN0eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2x0TG9hZFR5cGUg
dHlwZSkKK3sKKyAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFhTTFRfTE9BRF9ET0NVTUVOVDogeworICAg
ICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250
ZXh0UHRyKWN0eHQ7CisgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShjb250
ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKKyAgICAgICAgS1VSTCB1cmwoS1VS
TChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihiYXNlKSksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHVyaSkpOworICAgICAgICB4bWxGcmVlKGJhc2UpOworICAgICAgICBSZXNv
dXJjZUVycm9yIGVycm9yOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisg
ICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOworCisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQg
PSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworICAgICAgICBpZiAocmVxdWVzdEFsbG93
ZWQpIHsKKyAgICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxE
b2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVy
bCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAg
ICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPnByaW50QWNj
ZXNzRGVuaWVkTWVzc2FnZSh1cmwpOworICAgICAgICB9CisKKyAgICAgICAgQ29uc29sZSogY29u
c29sZSA9IDA7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBnbG9iYWxQcm9jZXNzb3ItPnhz
bFN0eWxlc2hlZXQoKS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgY29u
c29sZSA9IGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpOworICAgICAgICB4bWxTZXRTdHJ1
Y3R1cmVkRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTsK
KyAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpn
ZW5lcmljRXJyb3JGdW5jKTsKKworICAgICAgICAvLyBXZSBkb24ndCBzcGVjaWZ5IGFuIGVuY29k
aW5nIGhlcmUuIE5laXRoZXIgR2Vja28gbm9yIFdpbklFIHJlc3BlY3RzCisgICAgICAgIC8vIHRo
ZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIEhUVFAgaGVhZGVycy4KKyAgICAgICAgeG1sRG9j
UHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAoY29uc3Qg
Y2hhciopdXJpLCAwLCBvcHRpb25zKTsKKworICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JG
dW5jKDAsIDApOworICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKDAsIDApOworCisgICAg
ICAgIHJldHVybiBkb2M7CisgICAgfQorICAgIGNhc2UgWFNMVF9MT0FEX1NUWUxFU0hFRVQ6Cisg
ICAgICAgIHJldHVybiBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+bG9jYXRlU3R5
bGVzaGVldFN1YlJlc291cmNlKCgoeHNsdFN0eWxlc2hlZXRQdHIpY3R4dCktPmRvYywgdXJpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeHNsdERvY0xvYWRlckZ1
bmMgZnVuYywgWFNMVFByb2Nlc3NvciogcHJvY2Vzc29yLCBEb2NMb2FkZXIqIGxvYWRlcikKK3sK
KyAgICB4c2x0U2V0TG9hZGVyRnVuYyhmdW5jKTsKKyAgICBnbG9iYWxQcm9jZXNzb3IgPSBwcm9j
ZXNzb3I7CisgICAgZ2xvYmFsRG9jTG9hZGVyID0gbG9hZGVyOworfQorCitzdGF0aWMgaW50IHdy
aXRlVG9WZWN0b3Iodm9pZCogY29udGV4dCwgY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuKQor
eworICAgIFZlY3RvcjxVQ2hhcj4mIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNfY2FzdDxWZWN0b3I8
VUNoYXI+Kj4oY29udGV4dCk7CisgICAgU3RyaW5nIGRlY29kZWRDaHVuayA9IFN0cmluZzo6ZnJv
bVVURjgoYnVmZmVyLCBsZW4pOworICAgIHJlc3VsdE91dHB1dC5hcHBlbmQoZGVjb2RlZENodW5r
LmNoYXJhY3RlcnMoKSwgZGVjb2RlZENodW5rLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbGVuOwor
fQorCitzdGF0aWMgYm9vbCBzYXZlUmVzdWx0VG9TdHJpbmcoeG1sRG9jUHRyIHJlc3VsdERvYywg
eHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQsIFN0cmluZyYgcmVzdWx0U3RyaW5nKQoreworICAgIHht
bE91dHB1dEJ1ZmZlclB0ciBvdXRwdXRCdWYgPSB4bWxBbGxvY091dHB1dEJ1ZmZlcigwKTsKKyAg
ICBpZiAoIW91dHB1dEJ1ZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFVD
aGFyPiByZXN1bHRWZWN0b3I7CisgICAgb3V0cHV0QnVmLT5jb250ZXh0ID0gJnJlc3VsdFZlY3Rv
cjsKKyAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJhY2sgPSB3cml0ZVRvVmVjdG9yOworCisgICAg
aW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0
KTsKKyAgICB4bWxPdXRwdXRCdWZmZXJDbG9zZShvdXRwdXRCdWYpOworICAgIGlmIChyZXR2YWwg
PCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0
cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBh
cHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0byB0aGUgcmVzdWx0LgorICAgIGlmIChyZXN1bHRW
ZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRWZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFd
ID09ICdcbicpCisgICAgICAgIHJlc3VsdFZlY3Rvci5yZW1vdmVMYXN0KCk7CisKKyAgICByZXN1
bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJlc3VsdFZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqKiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJN
YXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwJiBwYXJhbWV0ZXJzKQoreworICAgIGlmIChw
YXJhbWV0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFy
KiogcGFyYW1ldGVyQXJyYXkgPSAoY29uc3QgY2hhcioqKWZhc3RNYWxsb2MoKChwYXJhbWV0ZXJz
LnNpemUoKSAqIDIpICsgMSkgKiBzaXplb2YoY2hhciopKTsKKworICAgIFhTTFRQcm9jZXNzb3I6
OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gcGFyYW1ldGVycy5lbmQoKTsKKyAgICB1bnNp
Z25lZCBpbmRleCA9IDA7CisgICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0
ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+c2Vjb25k
LnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwYXJhbWV0ZXJBcnJheVtpbmRleF0gPSAwOwor
CisgICAgcmV0dXJuIHBhcmFtZXRlckFycmF5OworfQorCitzdGF0aWMgdm9pZCBmcmVlWHNsdFBh
cmFtQXJyYXkoY29uc3QgY2hhcioqIHBhcmFtcykKK3sKKyAgICBjb25zdCBjaGFyKiogdGVtcCA9
IHBhcmFtczsKKyAgICBpZiAoIXBhcmFtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUg
KCp0ZW1wKSB7CisgICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7IC8vIHN0cmR1cCByZXR1
cm5zIG1hbGxvYydkIGJsb2Nrcywgc28gd2UgaGF2ZSB0byB1c2UgZnJlZSgpIGhlcmUKKyAgICAg
ICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsKKyAgICB9CisgICAgZmFzdEZyZWUocGFyYW1zKTsK
K30KKworc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQ
dHI8WFNMU3R5bGVTaGVldD4mIGNhY2hlZFN0eWxlc2hlZXQsIE5vZGUqIHN0eWxlc2hlZXRSb290
Tm9kZSkKK3sKKyAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2Rl
KSB7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBYU0xTdHlsZVNoZWV0OjpjcmVhdGUoc3R5
bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA/IHN0eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkg
OiBzdHlsZXNoZWV0Um9vdE5vZGUsCisgICAgICAgICAgICBzdHlsZXNoZWV0Um9vdE5vZGUtPmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldC0+cGFy
c2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hlZXRSb290Tm9kZSkpOworICAgIH0KKworICAg
IGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAhY2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2FjaGVkU3R5bGVzaGVldC0+Y29tcGls
ZVN0eWxlU2hlZXQoKTsKK30KKworc3RhdGljIGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJv
bU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRlKQoreworICAgIFJlZlB0
cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisgICAg
Ym9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQo
KSk7CisKKyAgICB4bWxEb2NQdHIgc291cmNlRG9jID0gMDsKKyAgICBpZiAoc291cmNlSXNEb2N1
bWVudCkKKyAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cilvd25lckRvY3VtZW50LT50cmFu
c2Zvcm1Tb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZURvYykgeworICAgICAgICBzb3VyY2VEb2Mg
PSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0cmluZyhvd25lckRvY3VtZW50LT5kb2NMb2FkZXIo
KSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUpLAorICAgICAgICAgICAgc291cmNlSXNEb2N1bWVu
dCA/IG93bmVyRG9jdW1lbnQtPnVybCgpLnN0cmluZygpIDogU3RyaW5nKCkpOworICAgICAgICBz
aG91bGREZWxldGUgPSBzb3VyY2VEb2M7CisgICAgfQorICAgIHJldHVybiBzb3VyY2VEb2M7Cit9
CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHJlc3VsdE1JTUVUeXBlKHhtbERvY1B0ciByZXN1bHRE
b2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KQoreworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0
eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aDoKKyAgICAvLyBI
VE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1bWVudCksIFhNTCAoY3JlYXRlIGFuIFhNTCBkb2N1bWVu
dCksCisgICAgLy8gYW5kIHRleHQgKHdyYXAgaW4gYSA8cHJlPiBhbmQgY3JlYXRlIGFuIFhNTCBk
b2N1bWVudCkuCisKKyAgICBjb25zdCB4bWxDaGFyKiByZXN1bHRUeXBlID0gMDsKKyAgICBYU0xU
X0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5cGUsIHNoZWV0LCBtZXRob2QpOworICAgIGlmICghcmVz
dWx0VHlwZSAmJiByZXN1bHREb2MtPnR5cGUgPT0gWE1MX0hUTUxfRE9DVU1FTlRfTk9ERSkKKyAg
ICAgICAgcmVzdWx0VHlwZSA9IChjb25zdCB4bWxDaGFyKikiaHRtbCI7CisKKyAgICBpZiAoeG1s
U3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJodG1sIikpCisgICAgICAgIHJl
dHVybiAidGV4dC9odG1sIjsKKyAgICBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0
IHhtbENoYXIqKSJ0ZXh0IikpCisgICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7CisKKyAgICBy
ZXR1cm4gImFwcGxpY2F0aW9uL3htbCI7Cit9CisKK2Jvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNm
b3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiBy
ZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpCit7CisgICAgUmVmUHRyPERvY3Vt
ZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKKworICAgIHNldFhT
TFRMb2FkQ2FsbEJhY2soZG9jTG9hZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9h
ZGVyKCkpOworICAgIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2lu
dGVyKG1fc3R5bGVzaGVldCwgbV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOworICAgIGlmICgh
c2hlZXQpIHsKKyAgICAgICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7
CisKKyAgICB4bWxDaGFyKiBvcmlnTWV0aG9kID0gc2hlZXQtPm1ldGhvZDsKKyAgICBpZiAoIW9y
aWdNZXRob2QgJiYgbWltZVR5cGUgPT0gInRleHQvaHRtbCIpCisgICAgICAgIHNoZWV0LT5tZXRo
b2QgPSAoeG1sQ2hhciopImh0bWwiOworCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAg
Ym9vbCBzaG91bGRGcmVlU291cmNlRG9jID0gZmFsc2U7CisgICAgaWYgKHhtbERvY1B0ciBzb3Vy
Y2VEb2MgPSB4bWxEb2NQdHJGcm9tTm9kZShzb3VyY2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9j
KSkgeworICAgICAgICAvLyBUaGUgWE1MIGRlY2xhcmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2lu
ZyB0aGUgcmVzdWx0IGFzIGEgZnJhZ21lbnQsIGFuZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3Ig
ZG9jdW1lbnRzLAorICAgICAgICAvLyBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMg
YWx3YXlzIGltbWVkaWF0ZWx5IHBhcnNlZC4KKyAgICAgICAgc2hlZXQtPm9taXRYbWxEZWNsYXJh
dGlvbiA9IHRydWU7CisKKyAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgdHJhbnNmb3Jt
Q29udGV4dCA9IHhzbHROZXdUcmFuc2Zvcm1Db250ZXh0KHNoZWV0LCBzb3VyY2VEb2MpOworICAg
ICAgICByZWdpc3RlclhTTFRFeHRlbnNpb25zKHRyYW5zZm9ybUNvbnRleHQpOworCisgICAgICAg
IC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA3Nz46IFhTTFQg
cHJvY2Vzc29yIDx4c2w6c29ydD4gYWxnb3JpdGhtIG9ubHkgY29tcGFyZXMgYnkgY29kZSBwb2lu
dAorICAgICAgICB4c2x0U2V0Q3R4dFNvcnRGdW5jKHRyYW5zZm9ybUNvbnRleHQsIHhzbHRVbmlj
b2RlU29ydEZ1bmN0aW9uKTsKKworICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBidWcgaW4gbGlieHNsdC4KKyAgICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2
ZXJzaW9uIDEuMS4xMywgc28gb25jZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4K
KyAgICAgICAgaWYgKCF0cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJzKQorICAgICAgICAgICB0
cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJzID0geG1sSGFzaENyZWF0ZSgyMCk7CisKKyAgICAg
ICAgY29uc3QgY2hhcioqIHBhcmFtcyA9IHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcCht
X3BhcmFtZXRlcnMpOworICAgICAgICB4c2x0UXVvdGVVc2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRl
eHQsIHBhcmFtcyk7CisgICAgICAgIHhtbERvY1B0ciByZXN1bHREb2MgPSB4c2x0QXBwbHlTdHls
ZXNoZWV0VXNlcihzaGVldCwgc291cmNlRG9jLCAwLCAwLCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsK
KworICAgICAgICB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQodHJhbnNmb3JtQ29udGV4dCk7Cisg
ICAgICAgIGZyZWVYc2x0UGFyYW1BcnJheShwYXJhbXMpOworCisgICAgICAgIGlmIChzaG91bGRG
cmVlU291cmNlRG9jKQorICAgICAgICAgICAgeG1sRnJlZURvYyhzb3VyY2VEb2MpOworCisgICAg
ICAgIGlmIChzdWNjZXNzID0gc2F2ZVJlc3VsdFRvU3RyaW5nKHJlc3VsdERvYywgc2hlZXQsIHJl
c3VsdFN0cmluZykpIHsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gcmVzdWx0TUlNRVR5cGUocmVz
dWx0RG9jLCBzaGVldCk7CisgICAgICAgICAgICByZXN1bHRFbmNvZGluZyA9IChjaGFyKilyZXN1
bHREb2MtPmVuY29kaW5nOworICAgICAgICB9CisgICAgICAgIHhtbEZyZWVEb2MocmVzdWx0RG9j
KTsKKyAgICB9CisKKyAgICBzaGVldC0+bWV0aG9kID0gb3JpZ01ldGhvZDsKKyAgICBzZXRYU0xU
TG9hZENhbGxCYWNrKDAsIDAsIDApOworICAgIHhzbHRGcmVlU3R5bGVzaGVldChzaGVldCk7Cisg
ICAgbV9zdHlsZXNoZWV0ID0gMDsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKLS0gCjEuNi40Cgo=
</data>
<flag name="review"
          id="19298"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19316"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35108</attachid>
            <date>2009-08-19 01:03:19 -0700</date>
            <delta_ts>2009-09-10 14:58:08 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>0003-Qt-Implement-XSLT-support-with-QtXmlPatterns.patch</filename>
            <type>text/plain</type>
            <size>23611</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAzMjg3NmMxN2YwYTkzNmUwYmRlYzcwZjI1NGE2OWY4ZmRhMGRlMGRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFdlZCwgMTkgQXVnIDIwMDkgMTE6NTc6NDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBKYXZh
U2NyaXB0Q29yZTogW1F0XSBJbXBsZW1lbnQgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJu
cy4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMwoKUGF0Y2gg
YnkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPiBvbiAyMDA5LTA4LTE5ClJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiB3dGYvUGxhdGZvcm0uaDogQWRkIFdURl9VU0VfUVhN
TFFVRVJZICNkZWZpbmUuCgpXZWJDb3JlOiBbUXRdIEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0
aCBRdFhtbFBhdHRlcm5zLgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgzMDMKClBhdGNoIGJ5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdtYWlsLmNvbT4gb24gMjAw
OS0wOC0xOQpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogV2ViQ29yZS5wcm86CiogZG9t
L0RvY3VtZW50LmNwcDoKKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CihXZWJDb3JlOjpE
b2N1bWVudDo6fkRvY3VtZW50KToKKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRUcmFuc2Zvcm1Tb3Vy
Y2UpOgoqIGRvbS9Eb2N1bWVudC5oOgooV2ViQ29yZTo6RG9jdW1lbnQ6OnRyYW5zZm9ybVNvdXJj
ZSk6CiogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZG9F
bmQpOgooV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbik6
CiogeG1sL1hTTFN0eWxlU2hlZXQuaDoKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnNoZWV0U3Ry
aW5nKToKKiB4bWwvWFNMU3R5bGVTaGVldFF0LmNwcDogQWRkZWQuCihXZWJDb3JlOjpYU0xTdHls
ZVNoZWV0OjpYU0xTdHlsZVNoZWV0KToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6On5YU0xTdHls
ZVNoZWV0KToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZyk6CihXZWJDb3JlOjpY
U0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCk6CihXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpjbGVh
ckRvY3VtZW50cyk6CihXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIpOgooV2ViQ29y
ZTo6WFNMU3R5bGVTaGVldDo6cGFyc2VTdHJpbmcpOgooV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6
bG9hZENoaWxkU2hlZXRzKToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0
KToKKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnNldFBhcmVudFN0eWxlU2hlZXQpOgooV2ViQ29y
ZTo6WFNMU3R5bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKToKKiB4bWwvWFNMVFByb2Nlc3Nvci5o
OgoqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOiBBZGRlZC4KKFdlYkNvcmU6OlhTTFRQcm9jZXNz
b3I6Ok1lc3NhZ2VIYW5kbGVyOjpNZXNzYWdlSGFuZGxlcik6IEEgc3ViY2xhc3Mgb2YgUU1lc3Nh
Z2VIYW5kbGVyLgooV2ViQ29yZTo6WFNMVFByb2Nlc3Nvcjo6TWVzc2FnZUhhbmRsZXI6OmhhbmRs
ZU1lc3NhZ2UpOiBGb3J3YXJkcyBhbGwgc3RkZXJyIG91dHB1dCB0byBDb25zb2xlLgooV2ViQ29y
ZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBVc2VzIFFYbWxRdWVyeS4KLS0t
CiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgIHwgICAgOSArKysKIEphdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oICAgfCAgICA2ICstCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgIHwgICAzNyArKysrKysrKysrKwogV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAg
ICB8ICAgMjAgKy0tLS0tCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgIHwgICAxNCAr
Ky0tCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oICAgICAgICAgIHwgICAxMyArKystCiBXZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAgIHwgICA0OCArKystLS0tLS0tLS0tLQogV2ViQ29yZS94
bWwvWFNMU3R5bGVTaGVldC5oICAgICB8ICAgMjYgKysrKysrLS0KIFdlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXRRdC5jcHAgfCAgMTAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJD
b3JlL3htbC9YU0xUUHJvY2Vzc29yLmggICAgIHwgICAyMCArKysrKystCiBXZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yUXQuY3BwIHwgIDEzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDM2MiBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcAoKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwppbmRleCA5MzAyZDc1Li40MDUxNjQwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMDktMDgtMTkgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQg
WFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0u
aDogQWRkIFdURl9VU0VfUVhNTFFVRVJZICNkZWZpbmUuCisKIDIwMDktMDgtMTggIE9saXZlciBI
dW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJy
YWNsb3VnaC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggOThkNjI2Yy4uNGVkYmVlYyAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmgKQEAgLTczMSwxMSArNzMxLDExIEBACiAjZGVmaW5lIEVOQUJMRV9BQ1RJ
VkVYX1RZUEVfQ09OVkVSU0lPTl9XTVBMQVlFUiAxCiAjZW5kaWYKIAotLyogVXNlIHRoZSBRdFht
bFN0cmVhbVJlYWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MVG9rZW5pemVyICovCisvKiBVc2Ug
dGhlIFFYbWxTdHJlYW1SZWFkZXIgaW1wbGVtZW50YXRpb24gZm9yIFhNTFRva2VuaXplciAqLwor
LyogVXNlIHRoZSBRWG1sUXVlcnkgaW1wbGVtZW50YXRpb24gZm9yIFhTTFRQcm9jZXNzb3IgKi8K
ICNpZiBQTEFURk9STShRVCkKLSNpZiAhRU5BQkxFKFhTTFQpCiAjZGVmaW5lIFdURl9VU0VfUVhN
TFNUUkVBTSAxCi0jZW5kaWYKKyNkZWZpbmUgV1RGX1VTRV9RWE1MUVVFUlkgMQogI2VuZGlmCiAK
ICNpZiAhUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDA2MDFmYTguLjhjNmZlODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsNDMgQEAKIAogICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbUXRdIEltcGxlbWVu
dCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKKworICAgICAgICAqIFdlYkNvcmUucHJv
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNlKToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0cmFuc2Zvcm1T
b3VyY2UpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmRvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNo
ZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpzaGVldFN0cmluZyk6Cisg
ICAgICAgICogeG1sL1hTTFN0eWxlU2hlZXRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6WFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xT
dHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNo
ZWV0Ojppc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6Y2hlY2tM
b2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6Y2xlYXJEb2N1bWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpYU0xT
dHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNo
ZWV0OjpzZXRQYXJlbnRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hl
ZXQ6Om1hcmtBc1Byb2Nlc3NlZCk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuaDoKKyAg
ICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpYU0xUUHJvY2Vzc29yOjpNZXNzYWdlSGFuZGxlcjo6TWVzc2FnZUhhbmRsZXIpOiBBIHN1YmNs
YXNzIG9mIFFNZXNzYWdlSGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6
Ok1lc3NhZ2VIYW5kbGVyOjpoYW5kbGVNZXNzYWdlKTogRm9yd2FyZHMgYWxsIHN0ZGVyciBvdXRw
dXQgdG8gQ29uc29sZS4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvU3RyaW5nKTogVXNlcyBRWG1sUXVlcnkuCisKKzIwMDktMDgtMTkgIEpha3ViIFdpZWN6b3Jl
ayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgUmVuYW1lIFhTTFN0eWxlU2hlZXQuY3BwIHRvIFhTTFN0eWxlU2hlZXRM
aWJ4c2x0LmNwcC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI4MzAzCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IGE4ZDg5NGEuLmM2OWJhYjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTI2LDcgKzEyNiw3IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TSU5HTEVfVEhSRUFERUQ9MSkgewogIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0uKTogREVGSU5FUyArPSBFTkFCTEVfREFT
SEJPQVJEX1NVUFBPUlQ9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9GSUxURVJTPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9GSUxURVJTPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFBB
VEg9Lik6IERFRklORVMgKz0gRU5BQkxFX1hQQVRIPTEKLSFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfWFNMVD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFNMVD0wCishY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1hTTFQ9Lik6IERFRklORVMgKz0gRU5BQkxFX1hTTFQ9MQogIyFjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQogIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9XQ1NTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XQ1NTPTAKICFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XTUw9MApAQCAtODgz
LDcgKzg4Myw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9XaGVlbEV2ZW50LmNwcCBcCiAgICAg
ZG9tL1hNTFRva2VuaXplci5jcHAgXAogICAgIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAgXAotICAg
IGRvbS9YTUxUb2tlbml6ZXJTY29wZS5jcHAgXAogICAgIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmNwcCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAg
XAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIFwKQEAgLTE1NDUsNyArMTU0NCw2
IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBcCiAgICAg
ZG9tL1doZWVsRXZlbnQuaCBcCiAgICAgZG9tL1hNTFRva2VuaXplci5oIFwKLSAgICBkb20vWE1M
VG9rZW5pemVyU2NvcGUuaCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwKICAg
ICBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQnJlYWtCbG9ja3F1
b3RlQ29tbWFuZC5oIFwKQEAgLTI2NjcsMjUgKzI2NjUsMTUgQEAgdW5peDohbWFjOkNPTkZJRyAr
PSBsaW5rX3BrZ2NvbmZpZwogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CiAg
ICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hTTFQ9MQotICAgIFBLR0NP
TkZJRyArPSBsaWJ4bWwtMi4wIGxpYnhzbHQKIAotICAgIG1hY3ggewotICAgICAgICBJTkNMVURF
UEFUSCArPSAvdXNyL2luY2x1ZGUvbGlieG1sMgotICAgICAgICBMSUJTICs9IC1seG1sMiAtbHhz
bHQKLSAgICB9Ci0KLSAgICB3aW4zMi1tc3ZjKiB7Ci0gICAgICAgIExJQlMgKz0gLWxsaWJ4bWwy
IC1sbGlieHNsdAotICAgIH0KKyAgICBRVCArPSB4bWxwYXR0ZXJucwogCiAgICAgU09VUkNFUyAr
PSBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcCBc
CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAgXAotICAgICAg
ICB4bWwvWFNMSW1wb3J0UnVsZS5jcHAgXAotICAgICAgICB4bWwvWFNMU3R5bGVTaGVldC5jcHAg
XAotICAgICAgICB4bWwvWFNMVEV4dGVuc2lvbnMuY3BwIFwKKyAgICAgICAgeG1sL1hTTFN0eWxl
U2hlZXRRdC5jcHAgXAogICAgICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAgXAotICAgICAgICB4
bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAorICAgICAgICB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcAog
fQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPTEpIHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiN2Q5
MTBjLi5lNTc3MDg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgRG9jdW1lbnQ6OkRv
Y3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogICAgICwgbV90aXRsZVNldEV4cGxp
Y2l0bHkoZmFsc2UpCiAgICAgLCBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyKHRoaXMsICZE
b2N1bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXJGaXJlZCkKICAgICAsIG1fZXhlY3V0
ZVNjcmlwdFNvb25UaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmV4ZWN1dGVTY3JpcHRTb29uVGltZXJG
aXJlZCkKLSNpZiBFTkFCTEUoWFNMVCkKKyNpZiBFTkFCTEUoWFNMVCkgJiYgIVVTRShRWE1MUVVF
UlkpCiAgICAgLCBtX3RyYW5zZm9ybVNvdXJjZSgwKQogI2VuZGlmCiAgICAgLCBtX3htbFZlcnNp
b24oIjEuMCIpCkBAIC00NzEsNyArNDcxLDcgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAg
ICAgIG1fcmVuZGVyQXJlbmEgPSAwOwogICAgIH0KIAotI2lmIEVOQUJMRShYU0xUKQorI2lmIEVO
QUJMRShYU0xUKSAmJiAhVVNFKFFYTUxRVUVSWSkKICAgICB4bWxGcmVlRG9jKCh4bWxEb2NQdHIp
bV90cmFuc2Zvcm1Tb3VyY2UpOwogI2VuZGlmCiAKQEAgLTM3NDksMTMgKzM3NDksMTUgQEAgdm9p
ZCBEb2N1bWVudDo6YXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaSkK
ICAgICBwcm9jZXNzb3ItPmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShuZXdTb3VyY2UsIHJlc3Vs
dEVuY29kaW5nLCByZXN1bHRNSU1FVHlwZSwgdGhpcywgZnJhbWUoKSk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnNldFRyYW5zZm9ybVNvdXJjZSh2b2lkKiBkb2MpCit2b2lkIERvY3VtZW50OjpzZXRU
cmFuc2Zvcm1Tb3VyY2UoY29uc3QgVHJhbnNmb3JtU291cmNlJiBzb3VyY2UpCiB7Ci0gICAgaWYg
KGRvYyA9PSBtX3RyYW5zZm9ybVNvdXJjZSkKKyNpZiAhVVNFKFFYTUxRVUVSWSkKKyAgICBpZiAo
c291cmNlID09IG1fdHJhbnNmb3JtU291cmNlKQogICAgICAgICByZXR1cm47Ci0KICAgICB4bWxG
cmVlRG9jKCh4bWxEb2NQdHIpbV90cmFuc2Zvcm1Tb3VyY2UpOwotICAgIG1fdHJhbnNmb3JtU291
cmNlID0gZG9jOworI2VuZGlmCisKKyAgICBtX3RyYW5zZm9ybVNvdXJjZSA9IHNvdXJjZTsKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAppbmRleCBkODA5NjQwLi4yY2EzNmEyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcwNiwxMCAr
NzA2LDE3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShYU0xUKQogICAgIHZvaWQgYXBwbHlYU0xU
cmFuc2Zvcm0oUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaSk7Ci0gICAgdm9pZCBzZXRUcmFuc2Zv
cm1Tb3VyY2Uodm9pZCogZG9jKTsKLSAgICBjb25zdCB2b2lkKiB0cmFuc2Zvcm1Tb3VyY2UoKSB7
IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZTsgfQogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRy
YW5zZm9ybVNvdXJjZURvY3VtZW50KCkgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dDsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykg
eyBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50ID0gZG9jOyB9CisKKyNpZiBVU0UoUVhNTFFVRVJZ
KQorICAgIHR5cGVkZWYgU3RyaW5nIFRyYW5zZm9ybVNvdXJjZTsKKyNlbHNlCisgICAgdHlwZWRl
ZiB2b2lkKiBUcmFuc2Zvcm1Tb3VyY2U7CisjZW5kaWYKKworICAgIHZvaWQgc2V0VHJhbnNmb3Jt
U291cmNlKGNvbnN0IFRyYW5zZm9ybVNvdXJjZSYgc291cmNlKTsKKyAgICBUcmFuc2Zvcm1Tb3Vy
Y2UgdHJhbnNmb3JtU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2U7IH0K
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFhCTCkKQEAgLTEwMjEsNyArMTAyOCw3IEBAIHByaXZhdGU6
CiAgICAgVGltZXI8RG9jdW1lbnQ+IG1fZXhlY3V0ZVNjcmlwdFNvb25UaW1lcjsKICAgICAKICNp
ZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkKiBtX3RyYW5zZm9ybVNvdXJjZTsKKyAgICBUcmFuc2Zv
cm1Tb3VyY2UgbV90cmFuc2Zvcm1Tb3VyY2U7CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX3RyYW5z
Zm9ybVNvdXJjZURvY3VtZW50OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hN
TFRva2VuaXplclF0LmNwcCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAppbmRleCA3
OTllZWYzLi5hMzM2MmVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5j
cHAKKysrIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCkBAIC0yNDgsNDUgKzI0OCwx
OSBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgY2hh
ciogY2h1bmspCiB2b2lkIFhNTFRva2VuaXplcjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xU
KQotICAgICN3YXJuaW5nIExvb2sgYXQgWE1MVG9rZW5pemVyTGliWG1sLmNwcAotI2VuZGlmCi0K
LSAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVF
bmRPZkRvY3VtZW50RXJyb3IgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCkp
IHsKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JT
dHJpbmcoKSksIGxpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVy
KCkpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAgICBtX2RvYy0+c2V0VHJh
bnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pOworICAgICAgICBtX2Rv
Yy0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRvbmUsIHNv
IGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KKyAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2Vs
ZWN0b3IoKTsKKyAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcodHJ1ZSk7CisgICAgICAgIG1fcGFy
c2VyU3RvcHBlZCA9IHRydWU7CiAgICAgfQotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4
bWxEb2NQdHJGb3JTdHJpbmcoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFu
IHhtbERvY1B0cgotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQg
YSBmYWlsdXJlIHRvIHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBn
b29kIGVycm9yIG1lc3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KCZCT00pOwotCi0gICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBvbGRFcnJv
ckZ1bmMgPSB4bWxHZW5lcmljRXJyb3I7Ci0gICAgdm9pZCogb2xkRXJyb3JDb250ZXh0ID0geG1s
R2VuZXJpY0Vycm9yQ29udGV4dDsKLSAgICAKLSAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFj
a3MoZG9jTG9hZGVyKTsgICAgICAgIAotICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgZXJy
b3JGdW5jKTsKLSAgICAKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5s
YXRpbjEoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qk9NSGlnaEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYU0xUX1BBUlNFX09QVElPTlMpOwotICAg
IAotICAgIHNldExvYWRlckZvckxpYlhNTENhbGxiYWNrcygwKTsKLSAgICB4bWxTZXRHZW5lcmlj
RXJyb3JGdW5jKG9sZEVycm9yQ29udGV4dCwgb2xkRXJyb3JGdW5jKTsKKyNlbmRpZgogICAgIAot
ICAgIHJldHVybiBzb3VyY2VEb2M7CisgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0
cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9yCisgICAgICAgIHx8IChtX3dy
b3RlVGV4dCAmJiAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgIW1fc2F3WFNMVHJhbnNmb3JtKSkKKyAg
ICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmco
KSksIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwogfQotI2VuZGlmCiAKIGludCBYTUxU
b2tlbml6ZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogewpAQCAtNjgzLDcgKzY1Nyw3IEBAIHZvaWQg
WE1MVG9rZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCiAKICNpZiBFTkFCTEUo
WFNMVCkKICAgICBtX3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+
aXNYU0woKTsKLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1T
b3VyY2VEb2N1bWVudCgpKSkKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50
cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKQogICAgICAgICBzdG9wUGFyc2luZygpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggYi9XZWJDb3JlL3ht
bC9YU0xTdHlsZVNoZWV0LmgKaW5kZXggZWVmMmZkNC4uOWJlYWQxNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldC5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQu
aApAQCAtMjYsOCArMjYsMTIgQEAKICNpZiBFTkFCTEUoWFNMVCkKIAogI2luY2x1ZGUgIlN0eWxl
U2hlZXQuaCIKKworI2lmICFVU0UoUVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIu
aD4KICNpbmNsdWRlIDxsaWJ4c2x0L3RyYW5zZm9ybS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArNDIsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgWFNMU3R5bGVTaGVldCA6IHB1Ymxp
YyBTdHlsZVNoZWV0IHsKICAgICBwdWJsaWM6CisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShYU0xJbXBvcnRSdWxlKiBw
YXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZikKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudEltcG9ydCwgaHJlZikpOwog
ICAgICAgICB9CisjZW5kaWYKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVl
dD4gY3JlYXRlKE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5v
ZGUsIGhyZWYsIGZhbHNlKSk7CkBAIC02NSwzMSArNzEsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOwogICAgICAgICB2b2lkIGxvYWRDaGls
ZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CiAKLSAgICAgICAgeHNsdFN0eWxlc2hlZXRQdHIg
Y29tcGlsZVN0eWxlU2hlZXQoKTsKLQogICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpOwog
CiAgICAgICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25lckRvY3Vt
ZW50OyB9CiAgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNoZWV0KiBw
YXJlbnQpOwogCisjaWYgVVNFKFFYTUxRVUVSWSkKKyAgICAgICAgU3RyaW5nIHNoZWV0U3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFN0cmluZzsgfQorI2Vsc2UKICAgICAgICAgeG1sRG9j
UHRyIGRvY3VtZW50KCk7CisgICAgICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNo
ZWV0KCk7CisgICAgICAgIHhtbERvY1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1s
RG9jUHRyIHBhcmVudERvYywgY29uc3QgeG1sQ2hhciogdXJpKTsKKyNlbmRpZgogCiAgICAgICAg
IHZvaWQgY2xlYXJEb2N1bWVudHMoKTsKIAotICAgICAgICB4bWxEb2NQdHIgbG9jYXRlU3R5bGVz
aGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSk7
Ci0KICAgICAgICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKTsKICAgICAgICAgYm9vbCBwcm9jZXNz
ZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgWFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGJv
b2wgZW1iZWRkZWQpOworI2lmICFVU0UoUVhNTFFVRVJZKQogICAgICAgICBYU0xTdHlsZVNoZWV0
KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKyNlbmRp
ZgogCiAgICAgICAgIERvY3VtZW50KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgICAgIHhtbERvY1B0
ciBtX3N0eWxlc2hlZXREb2M7CiAgICAgICAgIGJvb2wgbV9lbWJlZGRlZDsKICAgICAgICAgYm9v
bCBtX3Byb2Nlc3NlZDsKKworI2lmIFVTRShRWE1MUVVFUlkpCisgICAgICAgIFN0cmluZyBtX3No
ZWV0U3RyaW5nOworI2Vsc2UKKyAgICAgICAgeG1sRG9jUHRyIG1fc3R5bGVzaGVldERvYzsKICAg
ICAgICAgYm9vbCBtX3N0eWxlc2hlZXREb2NUYWtlbjsKKyNlbmRpZgorCiAgICAgICAgIFhTTFN0
eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmFkYTBlCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcApAQCAtMCwwICsxLDEw
MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50YXRpb24u
CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdtYWls
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKKwor
I2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChOb2RlKiBwYXJl
bnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsICBib29sIGVtYmVkZGVkKQorICAgIDogU3R5bGVT
aGVldChwYXJlbnROb2RlLCBocmVmKQorICAgICwgbV9vd25lckRvY3VtZW50KHBhcmVudE5vZGUt
PmRvY3VtZW50KCkpCisgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQoreworfQorCitYU0xTdHls
ZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCit7Cit9CisKK2Jvb2wgWFNMU3R5bGVTaGVldDo6aXNM
b2FkaW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCit7CisgICAgaWYgKG93bmVyTm9k
ZSgpKQorICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsKK30KKwordm9pZCBYU0xT
dHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworRG9jTG9hZGVyKiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQoreworICAgIGlmICghbV9v
d25lckRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lckRvY3Vt
ZW50LT5kb2NMb2FkZXIoKTsKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogRml4IFFYbWxRdWVy
eSBzbyB0aGF0IGl0IGFsbG93cyBjb21waWxpbmcgdGhlIHN0eWxlc2hlZXQgYmVmb3JlIHNldHRp
bmcgdGhlIGRvY3VtZW50CisgICAgLy8gdG8gYmUgdHJhbnNmb3JtZWQuIFRoaXMgd2F5IHdlIGNv
dWxkIG5vdCBvbmx5IGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGNvcnJlY3QgYmVmb3JlIHVz
aW5nIGl0CisgICAgLy8gYnV0IGFsc28gdHVybiBYU0xTdHlsZVNoZWV0OjpzaGVldFN0cmluZygp
IGludG8gWFNMU3R5bGVTaGVldDo6cXVlcnkoKSB0aGF0IHJldHVybnMgYSBRWG1sUXVlcnkuCisK
KyAgICBtX3NoZWV0U3RyaW5nID0gc3RyaW5nOworICAgIHJldHVybiAhbV9zaGVldFN0cmluZy5p
c0VtcHR5KCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGls
ZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFhTTFN0eWxlU2hlZXQ6OnNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCog
cGFyZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVl
dDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aAppbmRleCA0NWY1Y2IxLi5kMDE1NzQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yLmgKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCkBAIC0yOCwxMCArMjgs
MTQgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1
ZGUgIlhTTFN0eWxlU2hlZXQuaCIKKyNpZiAhVVNFKFFYTUxRVUVSWSkKICNpbmNsdWRlIDxsaWJ4
bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAjaW5jbHVkZSA8bGlieHNsdC9kb2N1bWVudHMuaD4KKyNl
bmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKKyNpbmNsdWRlIDxxYWJzdHJhY3RtZXNz
YWdlaGFuZGxlci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGcmFtZTsK
QEAgLTU4LDE2ICs2MiwzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBy
ZXNldCgpOwogCisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNl
RXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciopOwogICAgICAgICBzdGF0aWMgdm9p
ZCBnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFyKiBtc2csIC4uLik7
CiAKLSAgICBwdWJsaWM6CiAgICAgICAgIC8vIE9ubHkgZm9yIGxpYlhTTFQgY2FsbGJhY2tzCiAg
ICAgICAgIFhTTFN0eWxlU2hlZXQqIHhzbFN0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlc2hlZXQuZ2V0KCk7IH0KKyNlbmRpZgogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gUGFyYW1ldGVyTWFwOwogCiAgICAgcHJpdmF0ZToKKyNpZiBVU0UoUVhNTFFV
RVJZKQorICAgICAgICBjbGFzcyBNZXNzYWdlSGFuZGxlciA6IHB1YmxpYyBRQWJzdHJhY3RNZXNz
YWdlSGFuZGxlciB7CisKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgTWVzc2FnZUhhbmRs
ZXIoRG9jdW1lbnQqIGRvY3VtZW50ID0gMCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlTWVzc2FnZShRdE1zZ1R5cGUgdHlwZSwgY29uc3QgUVN0cmluZyYgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsJiBpZGVudGlm
aWVyLCBjb25zdCBRU291cmNlTG9jYXRpb24mIHNvdXJjZUxvY2F0aW9uKTsKKworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgRG9jdW1lbnQgKm1fZG9jdW1lbnQ7CisgICAgICAgIH07Cisj
ZW5kaWYKKwogICAgICAgICBYU0xUUHJvY2Vzc29yKCkgeyB9CiAKICAgICAgICAgUmVmUHRyPFhT
TFN0eWxlU2hlZXQ+IG1fc3R5bGVzaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JRdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzBlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIlhTTFRQcm9jZXNz
b3IuaCIKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIm1hcmt1cC5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8cWFic3RyYWN0bWVzc2FnZWhh
bmRsZXIuaD4KKyNpbmNsdWRlIDxxYnVmZmVyLmg+CisjaW5jbHVkZSA8cXNvdXJjZWxvY2F0aW9u
Lmg+CisjaW5jbHVkZSA8cXhtbHF1ZXJ5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFNM
VFByb2Nlc3Nvcjo6TWVzc2FnZUhhbmRsZXI6Ok1lc3NhZ2VIYW5kbGVyKERvY3VtZW50KiBkb2N1
bWVudCkKKyAgICA6IFFBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyKCkKKyAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCit7Cit9CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6TWVzc2FnZUhhbmRsZXI6Omhh
bmRsZU1lc3NhZ2UoUXRNc2dUeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIGRlc2NyaXB0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFV
cmwmIGlkZW50aWZpZXIsIGNvbnN0IFFTb3VyY2VMb2NhdGlvbiYgc291cmNlTG9jYXRpb24pCit7
CisgICAgaWYgKCFtX2RvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBN
ZXNzYWdlTGV2ZWwgbGV2ZWw7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRdERlYnVn
TXNnOgorICAgICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBRdFdhcm5pbmdNc2c6CisgICAgICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZl
bDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRdENyaXRpY2FsTXNnOgorICAgIGNhc2UgUXRG
YXRhbE1zZzoKKyAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGV2ZWwgPSBMb2dNZXNzYWdlTGV2ZWw7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIENvbnNvbGUqIGNvbnNvbGUgPSBtX2RvY3VtZW50LT5m
cmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpOworICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2Uo
WE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBkZXNjcmlwdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUxvY2F0aW9uLmxpbmUoKSwgc291cmNlTG9jYXRp
b24udXJpKCkudG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3Jt
VG9TdHJpbmcoTm9kZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1
bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7CisKKyAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVzaGVldCA9IG1fc3R5bGVz
aGVldDsKKyAgICBpZiAoIXN0eWxlc2hlZXQgJiYgbV9zdHlsZXNoZWV0Um9vdE5vZGUpIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpOworICAgICAgICBz
dHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKG5vZGUtPnBhcmVudCgpID8gbm9kZS0+
cGFyZW50KCkgOiBub2RlLCBub2RlLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAg
ICAgIHN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1cChub2RlKSk7CisgICAgfQor
CisgICAgaWYgKCFzdHlsZXNoZWV0IHx8IHN0eWxlc2hlZXQtPnNoZWV0U3RyaW5nKCkuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gc3VjY2VzczsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gb3du
ZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisgICAgYm9vbCBzb3VyY2VJc0Rv
Y3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQoKSk7CisKKyAgICBRWG1s
UXVlcnkgcXVlcnkoUVhtbFF1ZXJ5OjpYU0xUMjApOworCisgICAgWFNMVFByb2Nlc3Nvcjo6TWVz
c2FnZUhhbmRsZXIgbWVzc2FnZUhhbmRsZXIob3duZXJEb2N1bWVudC5nZXQoKSk7CisgICAgcXVl
cnkuc2V0TWVzc2FnZUhhbmRsZXIoJm1lc3NhZ2VIYW5kbGVyKTsKKworICAgIFhTTFRQcm9jZXNz
b3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9wYXJhbWV0ZXJzLmVuZCgpOworICAg
IGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IG1fcGFyYW1l
dGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHF1ZXJ5LmJpbmRWYXJpYWJs
ZShRU3RyaW5nKGl0LT5maXJzdCksIFFYbWxJdGVtKFFWYXJpYW50KGl0LT5zZWNvbmQpKSk7CisK
KyAgICBRU3RyaW5nIHNvdXJjZTsKKyAgICBpZiAoc291cmNlSXNEb2N1bWVudCkKKyAgICAgICAg
c291cmNlID0gb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCk7CisgICAgaWYgKCFzb3Vy
Y2VJc0RvY3VtZW50IHx8IHNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZSA9IGNyZWF0
ZU1hcmt1cChzb3VyY2VOb2RlKTsKKworICAgIFFCdWZmZXIgaW5wdXRCdWZmZXI7CisgICAgUUJ1
ZmZlciBzdHlsZVNoZWV0QnVmZmVyOworICAgIFFCdWZmZXIgb3V0cHV0QnVmZmVyOworCisgICAg
aW5wdXRCdWZmZXIuc2V0RGF0YShzb3VyY2UudG9VdGY4KCkpOworICAgIHN0eWxlU2hlZXRCdWZm
ZXIuc2V0RGF0YShRU3RyaW5nKHN0eWxlc2hlZXQtPnNoZWV0U3RyaW5nKCkpLnRvVXRmOCgpKTsK
KworICAgIGlucHV0QnVmZmVyLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7CisgICAgc3R5bGVT
aGVldEJ1ZmZlci5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgIG91dHB1dEJ1ZmZlci5v
cGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIHF1ZXJ5LnNldEZvY3VzKCZpbnB1dEJ1
ZmZlcik7CisgICAgcXVlcnkuc2V0UXVlcnkoJnN0eWxlU2hlZXRCdWZmZXIsIFFVcmwoc3R5bGVz
aGVldC0+aHJlZigpKSk7CisgICAgc3VjY2VzcyA9IHF1ZXJ5LmV2YWx1YXRlVG8oJm91dHB1dEJ1
ZmZlcik7CisgICAgb3V0cHV0QnVmZmVyLnJlc2V0KCk7CisgICAgcmVzdWx0U3RyaW5nID0gUVN0
cmluZzo6ZnJvbVV0Zjgob3V0cHV0QnVmZmVyLnJlYWRBbGwoKSkudHJpbW1lZCgpOworCisgICAg
aWYgKG1fc3R5bGVzaGVldCkgeworICAgICAgICBtX3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRz
KCk7CisgICAgICAgIG1fc3R5bGVzaGVldCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN1Y2Nl
c3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShYU0xU
KQotLSAKMS42LjQKCg==
</data>
<flag name="review"
          id="19299"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39198</attachid>
            <date>2009-09-08 11:41:42 -0700</date>
            <delta_ts>2009-09-21 15:41:03 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>0001-Move-the-libxslt-specific-part-of-XSLTProcessor-to-a.patch</filename>
            <type>text/plain</type>
            <size>43291</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSA1MjcyMDU3Mzg3MzM1Y2UzZTQ3ZmMwMDI2MGE3MjFlZjQ1MWMwNDkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFdlZCwgMTkgQXVnIDIwMDkgMTE6NTY6NTUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3Zl
IHRoZSBsaWJ4c2x0IHNwZWNpZmljIHBhcnQgb2YgWFNMVFByb2Nlc3NvciB0byBhIHNlcGFyYXRl
IGZpbGUuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMKCklu
IHByZXBhcmF0aW9uIGZvciBhZGRpbmcgWFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucyB0
byB0aGUgUXQKcG9ydCwgbW92ZSB0aGUgbGlieHNsdCBwYXJ0IG9mIHRoZSBYU0xUUHJvY2Vzc29y
IGltcGxlbWVudGF0aW9uIGludG8KYW5vdGhlciBmaWxlIGFuZCBsZWF2ZSB0aGUgcGFydCB0aGF0
IGNhbiBiZSByZXVzZWQgYW5kIHNoYXJlZC4KCkFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5n
IHN0eWxlIGlzc3Vlcy4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMzggKysrKwogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAg
ICAgfCAgICAxICsKIFdlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMSArCiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qICAgICB8ICAgIDQg
KwogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogfCAgICA0ICsKIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsICAgICAgICAgICAgICAgIHwgICAxOSArLQogV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAgICAgICAgICAgICAgfCAgMzE1ICsrLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCAgICAgICAgICAgICAg
IHwgICA4MCArKysrLS0tLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICAg
ICAgfCAgMzM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQs
IDQ0NyBpbnNlcnRpb25zKCspLCAzNDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0OTY0OGFjLi44MWE4ZDBmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDA5LTA5LTA4ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdAZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgdGhlIGxpYnhzbHQgc3BlY2lmaWMgcGFydCBvZiBYU0xUUHJvY2Vzc29yIHRvIGEgc2VwYXJh
dGUgZmlsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MzAzCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQg
d2l0aCBRdFhtbFBhdHRlcm5zIHRvIHRoZSBRdAorICAgICAgICBwb3J0LCBtb3ZlIHRoZSBsaWJ4
c2x0IHBhcnQgb2YgdGhlIFhTTFRQcm9jZXNzb3IgaW1wbGVtZW50YXRpb24gaW50bworICAgICAg
ICBhbm90aGVyIGZpbGUgYW5kIGxlYXZlIHRoZSBwYXJ0IHRoYXQgY2FuIGJlIHJldXNlZCBhbmQg
c2hhcmVkLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlz
c3Vlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJj
ZXMuYmtsOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZSk6IFJlbW92ZSB0cmFp
bGluZyB3aGl0ZXNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbVNv
dXJjZSk6IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlhT
TFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRnJhZ21lbnQpOiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVz
cGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpyZXNldCk6IE1vdmVkIG91
dCBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3Nvci5o
OiBGaXggaW5kZW50YXRpb24uCisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JG
dW5jKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9y
RnVuYyk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6IE1vdmVkLgor
ICAgICAgICAoV2ViQ29yZTo6c2V0WFNMVExvYWRDYWxsQmFjayk6IE1vdmVkLgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVUb1ZlY3Rvcik6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6c2F2ZVJl
c3VsdFRvU3RyaW5nKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0UGFyYW1BcnJheUZy
b21QYXJhbWV0ZXJNYXApOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZyZWVYc2x0UGFyYW1B
cnJheSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6eHNsdFN0eWxlc2hlZXRQb2ludGVyKTog
TW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp4bWxEb2NQdHJGcm9tTm9kZSk6IE1vdmVkLgorICAg
ICAgICAoV2ViQ29yZTo6cmVzdWx0TUlNRVR5cGUpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKTogTW92ZWQuCisKIDIwMDktMDktMDgg
IEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggNjcxMTQyZi4uNzQ1ZWEzZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMzk2LDYg
KzIzOTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNp
b25zLmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMVEV4dGVuc2lvbnMuaCBcCiAJV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3Nvci5jcHAgXAorCVdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCBcCiAJV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oIFwKIAlXZWJDb3JlL3htbC9YU0xUVW5p
Y29kZVNvcnQuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlYWVi
YjQyLi4zYWRmNTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzQ1MCw2ICszNDUwLDcgQEAKICAgICAgICAgICAgICd4bWwv
WFNMVEV4dGVuc2lvbnMuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVEV4dGVuc2lvbnMuaCcs
CiAgICAgICAgICAgICAneG1sL1hTTFRQcm9jZXNzb3IuY3BwJywKKyAgICAgICAgICAgICd4bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVFByb2Nlc3Nv
ci5oJywKICAgICAgICAgICAgICd4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCcsCiAgICAgICAgICAg
ICAneG1sL1hTTFRVbmljb2RlU29ydC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGJiYTRhMzguLmU3YTMwYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtMjM2ODgsNiArMjM2ODgsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHhtbFxYU0xUUHJvY2Vzc29yLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMTk3MjFiLi5lYjEyZjExIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMyMSw2ICsyMzIx
LDcgQEAKIAkJOTNGMTlBRkYwODI0NUU1OTAwMUU5QUJDIC8qIENsaXBib2FyZE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTA2NjBDMDY2NUQ5
MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi87IH07CiAJCTkzRjE5QjAzMDgyNDVFNTkw
MDFFOUFCQyAvKiBYU0xTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiBYU0xTdHlsZVNo
ZWV0LmNwcCAqLzsgfTsKIAkJOTNGMTlCMDQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
NkYyNEIwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovOyB9OworCQk5M0Yx
OUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNkYyNEQwNkQxOEE3RTAw
NEE2RkEzIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCAqLzsgfTsKIAkJOTNGMTlCMDcwODI0
NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCRTg1NjA1MTA3MDFGOTExMDAyMzk3NjkgLyogV2ViQ29yZVZp
ZXcubSAqLzsgfTsKIAkJOTNGMTlCMDgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkRhc2hib2FyZFJl
Z2lvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1
MEMyQTUwNzAyNjI5ODAwQUY2NDJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tICovOyBzZXR0aW5n
cyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWNhc3QtcXVhbCI7IH07IH07CiAJCTkzRjE5QjEz
MDgyNDVFNTkwMDFFOUFCQyAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzI4NjkzMDI4NDZE
Q0QwMTg2MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKQEAgLTkw
NjEsNiArOTA2Miw3IEBACiAJCUJDMDZGMjRBMDZEMThBN0UwMDRBNkZBMyAvKiBYU0xTdHlsZVNo
ZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFhTTFN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUJDMDZGMjRCMDZEMThBN0UwMDRBNkZBMyAvKiBYU0xUUHJvY2Vz
c29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhTTFRQcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEMwNkQxOEE3RTAwNEE2RkEzIC8qIFhT
TFRQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gWFNMVFByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJQkMwNkYyNEQwNkQxOEE3RTAwNEE2RkEzIC8qIFhT
TFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDMDczQkE5
MEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZsb2F0Q29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzBCMzZBMTBDRDNDNjdDMDBBQzdFQjUgLyogQ29uc29sZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc29sZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMEIzNkEyMENEM0M2N0MwMEFDN0VCNSAvKiBDb25zb2xlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zb2xlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNDc2Nyw2ICsxNDc2OSw3IEBACiAJCQkJRTFGMUU4MkUwQzNDMkJC
OTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25zLmggKi8sCiAJCQkJQkMwNkYyNEIwNkQxOEE3RTAw
NEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovLAogCQkJCUJDMDZGMjRDMDZEMThBN0UwMDRB
NkZBMyAvKiBYU0xUUHJvY2Vzc29yLmggKi8sCisJCQkJQkMwNkYyNEQwNkQxOEE3RTAwNEE2RkEz
IC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCAqLywKIAkJCQlCQ0VGRTFEQzBEQ0E1Q0ZEMDA3
MzkyMTkgLyogWFNMVFByb2Nlc3Nvci5pZGwgKi8sCiAJCQkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVB
OTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8sCiAJCQkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVB
OTU5IC8qIFhTTFRVbmljb2RlU29ydC5oICovLApAQCAtMTk4NDQsNiArMTk4NDcsNyBAQAogCQkJ
CTkzRjE5QjAzMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxRjFFODJGMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUIwNDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nl
c3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyog
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2
QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY1MDI1QzEwMkJBOTAxMDA2NkYzOUEgLyogRE9NTWVkaWEubW0gaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wKaW5kZXggNDAyYjk0Yy4uNWVjMGNiZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKQEAg
LTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08IS0tIAorPCEtLQogCiBDb3B5
cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBA
IC04LDEzICs4LDEzIEBAIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKIAogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAt
NTEsNyArNTEsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVk
IHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlUm93LmNwcAogICAgICAgICBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCiAgICAg
PC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
SlMiPgogICAgICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCiAgICAgICAgIGJpbmRp
bmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCBUaGlzIGZpbGUgY29u
dGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAg
IGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAKICAgICAgICAgZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCiAgICAgICAgIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAotICAgICAgICBk
b20vU2VsZWN0RWxlbWVudC5jcHAgCisgICAgICAgIGRvbS9TZWxlY3RFbGVtZW50LmNwcAogICAg
ICAgICBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKICAgICAgICAgZG9tL1N0YXRpY05vZGVMaXN0
LmNwcAogICAgICAgICBkb20vU3R5bGVFbGVtZW50LmNwcApAQCAtNTY5LDcgKzU2OSw3IEBAIFRo
aXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29y
ZS4KICAgICAgICAgZWRpdGluZy9tYXJrdXAuY3BwCiAgICAgICAgIGVkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldF
QkNPUkVfU09VUkNFU19ISVNUT1JZIj4KICAgICAgICAgaGlzdG9yeS9CYWNrRm9yd2FyZExpc3Qu
Y3BwCiAgICAgICAgIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC01NzcsNyArNTc3LDcgQEAg
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJD
b3JlLgogICAgICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5jcHAKICAgICAgICAgaGlzdG9yeS9IaXN0
b3J5SXRlbS5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9
IldFQkNPUkVfU09VUkNFU19IVE1MIj4KICAgICAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGll
bnQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCkBAIC03MzcsNyAr
NzM3LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBi
dWlsZCBXZWJDb3JlLgogICAgICAgICBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAK
ICAgICAgICAgbG9hZGVyL2xvYWRlci5jcHAKICAgICA8L3NldD4KLSAgICAKKwogICAgIDxzZXQg
YXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19JQ09OIj4KICAgICAgICAgbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAogICAgICAgICBsb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcApA
QCAtMTA5MCw2ICsxMDkwLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVz
IG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICB4bWwvWFNMVEV4dGVuc2lvbnMuY3Bw
CiAgICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQuY3BwCiAgICAgICAgIHhtbC9YU0xUUHJvY2Vz
c29yLmNwcAorICAgICAgICB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCiAgICAgPC9zZXQ+
CiAKIDwvbWFrZWZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNw
cCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCmluZGV4IDhlYWVmNjcuLmIxODIyNDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCisrKyBiL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwCkBAIC0yNiwxMCArMjYsNyBAQAogCiAjaW5jbHVkZSAiWFNM
VFByb2Nlc3Nvci5oIgogCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkNvbnNvbGUu
aCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMzgsMTY2ICszNSwxNyBAQAogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIgLy8gZm9yIHBhcnNlSFRNTERv
Y3VtZW50RnJhZ21lbnQKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJv
ci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVy
LmgiCi0jaW5jbHVkZSAiWFNMVEV4dGVuc2lvbnMuaCIKLSNpbmNsdWRlICJYU0xUVW5pY29kZVNv
cnQuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRl
IDxsaWJ4c2x0L2ltcG9ydHMuaD4KLSNpbmNsdWRlIDxsaWJ4c2x0L3ZhcmlhYmxlcy5oPgotI2lu
Y2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNp
ZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLQotU09GVF9MSU5LX0xJ
QlJBUlkobGlieHNsdCk7Ci1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2
b2lkLCAoeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpLCAoc2hlZXQpKQotU09GVF9MSU5LKGxpYnhz
bHQsIHhzbHRGcmVlVHJhbnNmb3JtQ29udGV4dCwgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0
UHRyIGN0eHQpLCAoY3R4dCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNv
bnRleHQsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUs
IHhtbERvY1B0ciBkb2MpLCAoc3R5bGUsIGRvYykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEFw
cGx5U3R5bGVzaGVldFVzZXIsIHhtbERvY1B0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4
bWxEb2NQdHIgZG9jLCBjb25zdCBjaGFyKiogcGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJ
TEUqIHByb2ZpbGUsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBk
b2MsIHBhcmFtcywgb3V0cHV0LCBwcm9maWxlLCB1c2VyQ3R4dCkpCi1TT0ZUX0xJTksobGlieHNs
dCwgeHNsdFF1b3RlVXNlclBhcmFtcywgaW50LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4
dCwgY29uc3QgY2hhcioqIHBhcmFtcyksIChjdHh0LCBwYXJhbXMpKQotU09GVF9MSU5LKGxpYnhz
bHQsIHhzbHRTZXRDdHh0U29ydEZ1bmMsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBj
dHh0LCB4c2x0U29ydEZ1bmMgaGFuZGxlciksIChjdHh0LCBoYW5kbGVyKSkKLVNPRlRfTElOSyhs
aWJ4c2x0LCB4c2x0U2V0TG9hZGVyRnVuYywgdm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAo
ZikpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0
QnVmZmVyUHRyIGJ1ZiwgeG1sRG9jUHRyIHJlc3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUp
LCAoYnVmLCByZXN1bHQsIHN0eWxlKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9y
dCwgeHNsdFN0eWxlc2hlZXRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkp
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFhTTFRQcm9jZXNzb3I6Omdl
bmVyaWNFcnJvckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCi17Ci0gICAgLy8gSXQgd291
bGQgYmUgbmljZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCi19Ci0g
ICAgCi12b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4
bWxFcnJvciogZXJyb3IpCi17Ci0gICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENv
bnNvbGUqPih1c2VyRGF0YSk7Ci0gICAgaWYgKCFjb25zb2xlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Ci0gICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKLSAg
ICAgICAgY2FzZSBYTUxfRVJSX05PTkU6Ci0gICAgICAgICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VM
ZXZlbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfV0FSTklORzoK
LSAgICAgICAgICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFhNTF9FUlJfRVJST1I6Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9G
QVRBTDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdl
TGV2ZWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb25zb2xlLT5hZGRNZXNz
YWdlKFhNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZXJyb3ItPm1lc3Nh
Z2UsIGVycm9yLT5saW5lLCBlcnJvci0+ZmlsZSk7Ci19Ci0KLS8vIEZJWE1FOiBUaGVyZSBzZWVt
cyB0byBiZSBubyB3YXkgdG8gY29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhl
cmUsIHRodXMgd2UgaGF2ZSBnbG9iYWxzLgotc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFBy
b2Nlc3NvciA9IDA7Ci1zdGF0aWMgRG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOwotc3Rh
dGljIHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbENoYXIqIHVyaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbERpY3RQdHIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQqIGN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4c2x0TG9hZFR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
WFNMVF9MT0FEX0RPQ1VNRU5UOiB7Ci0gICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0
ciBjb250ZXh0ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7Ci0gICAgICAgICAgICB4
bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29u
dGV4dC0+bm9kZSk7Ci0gICAgICAgICAgICBLVVJMIHVybChLVVJMKFBhcnNlZFVSTFN0cmluZywg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPih1cmkpKTsKLSAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgICAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOwotICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZTsKLQotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICAgICAgICAgIGJv
b2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsRG9j
TG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOwotICAgICAg
ICAgICAgaWYgKHJlcXVlc3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRG9jTG9h
ZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFs
bG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgICAg
ICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKLSAgICAgICAgICAgICAgICBkYXRhLmNsZWFy
KCk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1l
c3NhZ2UodXJsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29uc29sZSogY29uc29s
ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29yLT54
c2xTdHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgICAg
ICBjb25zb2xlID0gZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7Ci0gICAgICAgICAgICB4
bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jKTsKLSAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNM
VFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFdlIGRvbid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3Ig
V2luSUUgcmVzcGVjdHMKLSAgICAgICAgICAgIC8vIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4g
dGhlIEhUVFAgaGVhZGVycy4KLSAgICAgICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVt
b3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9u
cyk7Ci0KLSAgICAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwgMCk7Ci0gICAg
ICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKDAsIDApOwotCi0gICAgICAgICAgICByZXR1
cm4gZG9jOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgWFNMVF9MT0FEX1NUWUxFU0hFRVQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0
ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVy
aSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9hZENhbGxCYWNr
KHhzbHREb2NMb2FkZXJGdW5jIGZ1bmMsIFhTTFRQcm9jZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9h
ZGVyKiBsb2FkZXIpCi17Ci0gICAgeHNsdFNldExvYWRlckZ1bmMoZnVuYyk7Ci0gICAgZ2xvYmFs
UHJvY2Vzc29yID0gcHJvY2Vzc29yOwotICAgIGdsb2JhbERvY0xvYWRlciA9IGxvYWRlcjsKLX0K
LQotc3RhdGljIGludCB3cml0ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1
ZmZlciwgaW50IGxlbikKLXsKLSAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3Rh
dGljX2Nhc3Q8VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOwotICAgIFN0cmluZyBkZWNvZGVkQ2h1
bmsgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlciwgbGVuKTsKLSAgICByZXN1bHRPdXRwdXQuYXBw
ZW5kKGRlY29kZWRDaHVuay5jaGFyYWN0ZXJzKCksIGRlY29kZWRDaHVuay5sZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERv
Y1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0
cmluZykKLXsKLSAgICB4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0QnVmID0geG1sQWxsb2NPdXRw
dXRCdWZmZXIoMCk7Ci0gICAgaWYgKCFvdXRwdXRCdWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOwotICAgIG91dHB1dEJ1Zi0+Y29udGV4
dCA9ICZyZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVU
b1ZlY3RvcjsKLSAgICAKLSAgICBpbnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRC
dWYsIHJlc3VsdERvYywgc2hlZXQpOwotICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1
Zik7Ci0gICAgaWYgKHJldHZhbCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFdvcmthcm91bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD00OTU2Njg+OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1
bHQuCi0gICAgaWYgKHJlc3VsdFZlY3Rvci5zaXplKCkgPiAwICYmIHJlc3VsdFZlY3RvcltyZXN1
bHRWZWN0b3Iuc2l6ZSgpIC0gMV0gPT0gJ1xuJykKLSAgICAgICAgcmVzdWx0VmVjdG9yLnJlbW92
ZUxhc3QoKTsKLQotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9y
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmb3Jt
VGV4dFN0cmluZ1RvWEhUTUxEb2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQpCiB7CiAgICAgLy8g
TW9kaWZ5IHRoZSBvdXRwdXQgc28gdGhhdCBpdCBpcyBhIHdlbGwtZm9ybWVkIFhIVE1MIGRvY3Vt
ZW50IHdpdGggYSA8cHJlPiB0YWcgZW5jbG9zaW5nIHRoZSB0ZXh0LgpAQCAtMjEzLDM4ICs2MSw2
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50
U3RyaW5nKFN0cmluZyYgdGV4dCkKICAgICAgICAgIjwvaHRtbD5cbiI7CiB9CiAKLXN0YXRpYyBj
b25zdCBjaGFyKiogeHNsdFBhcmFtQXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6
OlBhcmFtZXRlck1hcCYgcGFyYW1ldGVycykKLXsKLSAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgY2hhcioqIHBhcmFtZXRlckFycmF5
ID0gKGNvbnN0IGNoYXIqKilmYXN0TWFsbG9jKCgocGFyYW1ldGVycy5zaXplKCkgKiAyKSArIDEp
ICogc2l6ZW9mKGNoYXIqKSk7Ci0KLSAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0
ZXJhdG9yIGVuZCA9IHBhcmFtZXRlcnMuZW5kKCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSAwOwot
ICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRvciBpdCA9IHBhcmFt
ZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIHBhcmFtZXRlckFycmF5
W2luZGV4KytdID0gc3RyZHVwKGl0LT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcGFy
YW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsK
LSAgICB9Ci0gICAgcGFyYW1ldGVyQXJyYXlbaW5kZXhdID0gMDsKLQotICAgIHJldHVybiBwYXJh
bWV0ZXJBcnJheTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZVhzbHRQYXJhbUFycmF5KGNvbnN0IGNo
YXIqKiBwYXJhbXMpCi17Ci0gICAgY29uc3QgY2hhcioqIHRlbXAgPSBwYXJhbXM7Ci0gICAgaWYg
KCFwYXJhbXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3aGlsZSAoKnRlbXApIHsKLSAg
ICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsgLy8gc3RyZHVwIHJldHVybnMgbWFsbG9jJ2Qg
YmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVzZSBmcmVlKCkgaGVyZQotICAgICAgICBmcmVlKCh2b2lk
KikqKHRlbXArKykpOwotICAgIH0KLSAgICBmYXN0RnJlZShwYXJhbXMpOwotfQotCi0KIFBhc3NS
ZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShj
b25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29k
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFt
ZSogZnJhbWUpCiB7CkBAIC0yNTgsNyArNzQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xU
UHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwog
ICAgICAgICB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERvY3VtZW50U3RyaW5nKGRvY3VtZW50
U291cmNlKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gb3duZXJEb2N1bWVudC0+aW1w
bGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoc291cmNlTUlNRVR5cGUsIGZyYW1lLCBmYWxz
ZSk7Ci0gICAgCisKICAgICAvLyBCZWZvcmUgcGFyc2luZywgd2UgbmVlZCB0byBzYXZlICYgZGV0
YWNoIHRoZSBvbGQgZG9jdW1lbnQgYW5kIGdldCB0aGUgbmV3IGRvY3VtZW50CiAgICAgLy8gaW4g
cGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBvbmx5IGlmIHdlJ3JlIHJlbmRlcmluZyB0aGUgcmVz
dWx0IGRvY3VtZW50LgogICAgIGlmIChmcmFtZSkgewpAQCAtMjY3LDE1ICs4MywxNSBAQCBQYXNz
UmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2Uo
Y29uc3QgU3RyaW5nJiBzb3VyYwogICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURv
Y3VtZW50KGZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgZnJhbWUtPnNldERvY3VtZW50KHJl
c3VsdCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCiAgICAgICAg
IHJlc3VsdC0+c2V0VVJMKG93bmVyRG9jdW1lbnQtPnVybCgpKTsKICAgICByZXN1bHQtPm9wZW4o
KTsKLSAgICAKKwogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4
dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKHNvdXJjZU1JTUVUeXBlKTsKICAgICBkZWNvZGVyLT5z
ZXRFbmNvZGluZyhzb3VyY2VFbmNvZGluZy5pc0VtcHR5KCkgPyBVVEY4RW5jb2RpbmcoKSA6IFRl
eHRFbmNvZGluZyhzb3VyY2VFbmNvZGluZyksIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5n
RnJvbVhNTEhlYWRlcik7CiAgICAgcmVzdWx0LT5zZXREZWNvZGVyKGRlY29kZXIucmVsZWFzZSgp
KTsKLSAgICAKKwogICAgIHJlc3VsdC0+d3JpdGUoZG9jdW1lbnRTb3VyY2UpOwogICAgIHJlc3Vs
dC0+ZmluaXNoUGFyc2luZygpOwogICAgIHJlc3VsdC0+Y2xvc2UoKTsKQEAgLTI4Niw3ICsxMDIs
NyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZy
b21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyYwogc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0RG9j
KQogewogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJh
Z21lbnQ6OmNyZWF0ZShvdXRwdXREb2MpOwotICAgIAorCiAgICAgaWYgKHNvdXJjZU1JTUVUeXBl
ID09ICJ0ZXh0L2h0bWwiKQogICAgICAgICBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50KHNvdXJj
ZVN0cmluZywgZnJhZ21lbnQuZ2V0KCkpOwogICAgIGVsc2UgaWYgKHNvdXJjZU1JTUVUeXBlID09
ICJ0ZXh0L3BsYWluIikKQEAgLTI5NiwxMTggKzExMiwxMCBAQCBzdGF0aWMgaW5saW5lIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5n
JiBzbwogICAgICAgICBpZiAoIXN1Y2Nlc3NmdWxQYXJzZSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBtZXNzIHdpdGggVVJM
cyBoZXJlPwotICAgICAgICAKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0KLXN0YXRpYyB4c2x0
U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIoUmVmUHRyPFhTTFN0eWxlU2hlZXQ+
JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0Um9vdE5vZGUpCi17Ci0gICAgaWYg
KCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290Tm9kZSkgewotICAgICAgICBjYWNo
ZWRTdHlsZXNoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlc2hlZXRSb290Tm9kZS0+
cGFyZW50KCkgPyBzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpIDogc3R5bGVzaGVldFJvb3RO
b2RlLAotICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSk7Ci0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1h
cmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFjYWNoZWRT
dHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICByZXR1cm4gY2FjaGVkU3R5bGVzaGVldC0+Y29tcGlsZVN0eWxlU2hl
ZXQoKTsKLX0KIAotc3RhdGljIGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJvbU5vZGUoTm9k
ZSogc291cmNlTm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRlKQotewotICAgIFJlZlB0cjxEb2N1bWVu
dD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAgYm9vbCBzb3Vy
Y2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQoKSk7Ci0gICAg
Ci0gICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7Ci0gICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQp
Ci0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+dHJhbnNmb3Jt
U291cmNlKCk7Ci0gICAgaWYgKCFzb3VyY2VEb2MpIHsKLSAgICAgICAgc291cmNlRG9jID0gKHht
bERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCksIGNy
ZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKLSAgICAgICAgICAgIHNvdXJjZUlzRG9jdW1lbnQgPyBv
d25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKLSAgICAgICAgc2hvdWxk
RGVsZXRlID0gKHNvdXJjZURvYyAhPSAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNvdXJjZURvYzsK
LX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRG9jUHRyIHJlc3Vs
dERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQpCi17Ci0gICAgLy8gVGhlcmUgYXJlIHRocmVl
IHR5cGVzIG9mIG91dHB1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoOgotICAgIC8v
IEhUTUwgKGNyZWF0ZSBhbiBIVE1MIGRvY3VtZW50KSwgWE1MIChjcmVhdGUgYW4gWE1MIGRvY3Vt
ZW50KSwKLSAgICAvLyBhbmQgdGV4dCAod3JhcCBpbiBhIDxwcmU+IGFuZCBjcmVhdGUgYW4gWE1M
IGRvY3VtZW50KS4KLQotICAgIGNvbnN0IHhtbENoYXIqIHJlc3VsdFR5cGUgPSAwOwotICAgIFhT
TFRfR0VUX0lNUE9SVF9QVFIocmVzdWx0VHlwZSwgc2hlZXQsIG1ldGhvZCk7Ci0gICAgaWYgKHJl
c3VsdFR5cGUgPT0gMCAmJiByZXN1bHREb2MtPnR5cGUgPT0gWE1MX0hUTUxfRE9DVU1FTlRfTk9E
RSkKLSAgICAgICAgcmVzdWx0VHlwZSA9IChjb25zdCB4bWxDaGFyKikiaHRtbCI7Ci0gICAgCi0g
ICAgaWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikiaHRtbCIpKQot
ICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7Ci0gICAgZWxzZSBpZiAoeG1sU3RyRXF1YWwocmVz
dWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJ0ZXh0IikpCi0gICAgICAgIHJldHVybiAidGV4dC9w
bGFpbiI7Ci0gICAgICAgIAotICAgIHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKLX0KLQotYm9v
bCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJp
bmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGlu
ZykKLXsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5k
b2N1bWVudCgpOwotICAgIAotICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soZG9jTG9hZGVyRnVuYywg
dGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOwotICAgIHhzbHRTdHlsZXNoZWV0UHRy
IHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVldCwgbV9zdHlsZXNoZWV0
Um9vdE5vZGUuZ2V0KCkpOwotICAgIGlmICghc2hlZXQpIHsKLSAgICAgICAgc2V0WFNMVExvYWRD
YWxsQmFjaygwLCAwLCAwKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtX3N0
eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7Ci0KLSAgICB4bWxDaGFyKiBvcmlnTWV0aG9kID0g
c2hlZXQtPm1ldGhvZDsKLSAgICBpZiAoIW9yaWdNZXRob2QgJiYgbWltZVR5cGUgPT0gInRleHQv
aHRtbCIpCi0gICAgICAgIHNoZWV0LT5tZXRob2QgPSAoeG1sQ2hhciopImh0bWwiOwotCi0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRGcmVlU291cmNlRG9jID0gZmFs
c2U7Ci0gICAgaWYgKHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxEb2NQdHJGcm9tTm9kZShzb3Vy
Y2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9jKSkgewotICAgICAgICAvLyBUaGUgWE1MIGRlY2xh
cmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2luZyB0aGUgcmVzdWx0IGFzIGEgZnJhZ21lbnQsIGFu
ZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3IgZG9jdW1lbnRzLCAKLSAgICAgICAgLy8gYXMgdGhl
IHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBpbW1lZGlhdGVseSBwYXJzZWQuCi0g
ICAgICAgIHNoZWV0LT5vbWl0WG1sRGVjbGFyYXRpb24gPSB0cnVlOwotCi0gICAgICAgIHhzbHRU
cmFuc2Zvcm1Db250ZXh0UHRyIHRyYW5zZm9ybUNvbnRleHQgPSB4c2x0TmV3VHJhbnNmb3JtQ29u
dGV4dChzaGVldCwgc291cmNlRG9jKTsKLSAgICAgICAgcmVnaXN0ZXJYU0xURXh0ZW5zaW9ucyh0
cmFuc2Zvcm1Db250ZXh0KTsKLQotICAgICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3NvciA8eHNsOnNvcnQ+IGFsZ29yaXRo
bSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKLSAgICAgICAgeHNsdFNldEN0eHRTb3J0RnVu
Yyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik7Ci0KLSAgICAgICAg
Ly8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIGxpYnhzbHQuIAotICAgICAgICAv
LyBUaGUgYnVnIGhhcyBiZWVuIGZpeGVkIGluIHZlcnNpb24gMS4xLjEzLCBzbyBvbmNlIHdlIHNo
aXAgdGhhdCB0aGlzIGNhbiBiZSByZW1vdmVkLgotICAgICAgICBpZiAodHJhbnNmb3JtQ29udGV4
dC0+Z2xvYmFsVmFycyA9PSBOVUxMKQotICAgICAgICAgICB0cmFuc2Zvcm1Db250ZXh0LT5nbG9i
YWxWYXJzID0geG1sSGFzaENyZWF0ZSgyMCk7Ci0KLSAgICAgICAgY29uc3QgY2hhcioqIHBhcmFt
cyA9IHhzbHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChtX3BhcmFtZXRlcnMpOwotICAgICAg
ICB4c2x0UXVvdGVVc2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRleHQsIHBhcmFtcyk7Ci0gICAgICAg
IHhtbERvY1B0ciByZXN1bHREb2MgPSB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlcihzaGVldCwgc291
cmNlRG9jLCAwLCAwLCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHhz
bHRGcmVlVHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1Db250ZXh0KTsgICAgICAgIAotICAgICAg
ICBmcmVlWHNsdFBhcmFtQXJyYXkocGFyYW1zKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91
bGRGcmVlU291cmNlRG9jKQotICAgICAgICAgICAgeG1sRnJlZURvYyhzb3VyY2VEb2MpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKHN1Y2Nlc3MgPSBzYXZlUmVzdWx0VG9TdHJpbmcocmVzdWx0RG9j
LCBzaGVldCwgcmVzdWx0U3RyaW5nKSkgewotICAgICAgICAgICAgbWltZVR5cGUgPSByZXN1bHRN
SU1FVHlwZShyZXN1bHREb2MsIHNoZWV0KTsKLSAgICAgICAgICAgIHJlc3VsdEVuY29kaW5nID0g
KGNoYXIqKXJlc3VsdERvYy0+ZW5jb2Rpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgeG1sRnJlZURv
YyhyZXN1bHREb2MpOwotICAgIH0KLSAgICAKLSAgICBzaGVldC0+bWV0aG9kID0gb3JpZ01ldGhv
ZDsKLSAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDApOwotICAgIHhzbHRGcmVlU3R5bGVz
aGVldChzaGVldCk7Ci0gICAgbV9zdHlsZXNoZWV0ID0gMDsKKyAgICAvLyBGSVhNRTogRG8gd2Ug
bmVlZCB0byBtZXNzIHdpdGggVVJMcyBoZXJlPwogCi0gICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAg
cmV0dXJuIGZyYWdtZW50OwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29y
Ojp0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZU5vZGUpCkBAIC00MjksNyArMTM3LDcg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1U
b0ZyYWdtZW50KE5vZGUqIHNvdXJjZU5vZGUKICAgICAvLyBJZiB0aGUgb3V0cHV0IGRvY3VtZW50
IGlzIEhUTUwsIGRlZmF1bHQgdG8gSFRNTCBtZXRob2QuCiAgICAgaWYgKG91dHB1dERvYy0+aXNI
VE1MRG9jdW1lbnQoKSkKICAgICAgICAgcmVzdWx0TUlNRVR5cGUgPSAidGV4dC9odG1sIjsKLSAg
ICAKKwogICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5
cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0TUlN
RVR5cGUsIG91dHB1dERvYyk7CkBAIC00NTUsNiArMTYzLDEzIEBAIHZvaWQgWFNMVFByb2Nlc3Nv
cjo6cmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgLypuYW1lc3BhY2VVUkkqLywgY29uc3Qg
U3RyaW5nCiAgICAgbV9wYXJhbWV0ZXJzLnJlbW92ZShsb2NhbE5hbWUpOwogfQogCit2b2lkIFhT
TFRQcm9jZXNzb3I6OnJlc2V0KCkKK3sKKyAgICBtX3N0eWxlc2hlZXQuY2xlYXIoKTsKKyAgICBt
X3N0eWxlc2hlZXRSb290Tm9kZS5jbGVhcigpOworICAgIG1fcGFyYW1ldGVycy5jbGVhcigpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBiL1dlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuaAppbmRleCA5ZWUyYWFkLi40NWY1Y2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmgKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCkBAIC0z
NCw0NiArMzQsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFtZTsKLWNs
YXNzIERvY3VtZW50OwotY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLQotY2xhc3MgWFNMVFByb2Nl
c3NvciA6IHB1YmxpYyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxYU0xUUHJvY2Vzc29yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgWFNMVFByb2Nlc3Nvcik7IH0KLQotICAgIHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNz
UmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVT
aGVldDsgfQotICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcm
IHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNv
ZGluZyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZUVuY29kaW5nLCBjb25z
dCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3VyY2VOb2RlLCBGcmFtZSogZnJhbWUp
OwotICAgIAotICAgIC8vIERPTSBtZXRob2RzCi0gICAgdm9pZCBpbXBvcnRTdHlsZXNoZWV0KFBh
c3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9zdHlsZXNoZWV0Um9vdE5vZGUgPSBzdHlsZTsgfQot
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdHJhbnNmb3JtVG9GcmFnbWVudChOb2Rl
KiBzb3VyY2UsIERvY3VtZW50KiBvdXB1dERvYyk7Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudD4g
dHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2UpOwotICAgIAotICAgIHZvaWQgc2V0UGFy
YW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwotICAg
IHZvaWQgcmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSk7Ci0gICAgdm9pZCBjbGVhclBhcmFtZXRlcnMoKSB7IG1fcGFyYW1l
dGVycy5jbGVhcigpOyB9Ci0KLSAgICB2b2lkIHJlc2V0KCkgeyBtX3N0eWxlc2hlZXQuY2xlYXIo
KTsgbV9zdHlsZXNoZWV0Um9vdE5vZGUuY2xlYXIoKTsgIG1fcGFyYW1ldGVycy5jbGVhcigpOyB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBwYXJzZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgeG1sRXJy
b3IqKTsKLSAgICBzdGF0aWMgdm9pZCBnZW5lcmljRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCBj
b25zdCBjaGFyKiBtc2csIC4uLik7Ci0gICAgCi1wdWJsaWM6Ci0gICAgLy8gT25seSBmb3IgbGli
WFNMVCBjYWxsYmFja3MKLSAgICBYU0xTdHlsZVNoZWV0KiB4c2xTdHlsZXNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZXNoZWV0LmdldCgpOyB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKLQotcHJpdmF0ZToKLSAgICBYU0xUUHJvY2Vzc29y
KCkgeyB9Ci0KLSAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9zdHlsZXNoZWV0OwotICAgIFJl
ZlB0cjxOb2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKLSAgICBQYXJhbWV0ZXJNYXAgbV9wYXJh
bWV0ZXJzOwotfTsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBj
bGFzcyBEb2N1bWVudEZyYWdtZW50OworCisgICAgY2xhc3MgWFNMVFByb2Nlc3NvciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFhTTFRQcm9jZXNzb3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBYU0xUUHJvY2Vzc29yKTsgfQorCisgICAgICAgIHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNz
UmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVT
aGVldDsgfQorICAgICAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZSwgU3Ry
aW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0
RW5jb2RpbmcpOworICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudEZy
b21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2Rp
bmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1l
KiBmcmFtZSk7CisKKyAgICAgICAgLy8gRE9NIG1ldGhvZHMKKyAgICAgICAgdm9pZCBpbXBvcnRT
dHlsZXNoZWV0KFBhc3NSZWZQdHI8Tm9kZT4gc3R5bGUpIHsgbV9zdHlsZXNoZWV0Um9vdE5vZGUg
PSBzdHlsZTsgfQorICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHRyYW5zZm9y
bVRvRnJhZ21lbnQoTm9kZSogc291cmNlLCBEb2N1bWVudCogb3VwdXREb2MpOworICAgICAgICBQ
YXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZSk7CisK
KyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAgU3Ry
aW5nIGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5n
JiBsb2NhbE5hbWUpIGNvbnN0OworICAgICAgICB2b2lkIHJlbW92ZVBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpOworICAgICAgICB2
b2lkIGNsZWFyUGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KKworICAgICAg
ICB2b2lkIHJlc2V0KCk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9p
ZCogdXNlckRhdGEsIHhtbEVycm9yKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNFcnJv
ckZ1bmModm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKKworICAgIHB1Ymxp
YzoKKyAgICAgICAgLy8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKKyAgICAgICAgWFNMU3R5
bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQo
KTsgfQorCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVy
TWFwOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgWFNMVFByb2Nlc3NvcigpIHsgfQorCisgICAg
ICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlc2hlZXQ7CisgICAgICAgIFJlZlB0cjxO
b2RlPiBtX3N0eWxlc2hlZXRSb290Tm9kZTsKKyAgICAgICAgUGFyYW1ldGVyTWFwIG1fcGFyYW1l
dGVyczsKKyAgICB9OwogCiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JMaWJ4c2x0LmNwcCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJhMGZkCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0wLDAgKzEsMzM0IEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKworI2luY2x1ZGUg
IkNvbnNvbGUuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVk
ZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorI2luY2x1ZGUg
IlhTTFRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiWFNMVFVuaWNvZGVTb3J0LmgiCisjaW5jbHVk
ZSAibG9hZGVyLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8bGlieHNsdC9pbXBv
cnRzLmg+CisjaW5jbHVkZSA8bGlieHNsdC92YXJpYWJsZXMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0
L3hzbHR1dGlscy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0oTUFD
KQorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisKK1NPRlRfTElOS19MSUJSQVJZKGxpYnhzbHQp
OworU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRGcmVlU3R5bGVzaGVldCwgdm9pZCwgKHhzbHRTdHls
ZXNoZWV0UHRyIHNoZWV0KSwgKHNoZWV0KSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVRy
YW5zZm9ybUNvbnRleHQsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0KSwgKGN0
eHQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXdUcmFuc2Zvcm1Db250ZXh0LCB4c2x0VHJh
bnNmb3JtQ29udGV4dFB0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIgZG9j
KSwgKHN0eWxlLCBkb2MpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRBcHBseVN0eWxlc2hlZXRV
c2VyLCB4bWxEb2NQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYywg
Y29uc3QgY2hhcioqIHBhcmFtcywgY29uc3QgY2hhciogb3V0cHV0LCBGSUxFKiBwcm9maWxlLCB4
c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB1c2VyQ3R4dCksIChzdHlsZSwgZG9jLCBwYXJhbXMsIG91
dHB1dCwgcHJvZmlsZSwgdXNlckN0eHQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRRdW90ZVVz
ZXJQYXJhbXMsIGludCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIGNvbnN0IGNoYXIq
KiBwYXJhbXMpLCAoY3R4dCwgcGFyYW1zKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0U2V0Q3R4
dFNvcnRGdW5jLCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeHNsdFNvcnRG
dW5jIGhhbmRsZXIpLCAoY3R4dCwgaGFuZGxlcikpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFNl
dExvYWRlckZ1bmMsIHZvaWQsICh4c2x0RG9jTG9hZGVyRnVuYyBmKSwgKGYpKQorU09GVF9MSU5L
KGxpYnhzbHQsIHhzbHRTYXZlUmVzdWx0VG8sIGludCwgKHhtbE91dHB1dEJ1ZmZlclB0ciBidWYs
IHhtbERvY1B0ciByZXN1bHQsIHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKGJ1ZiwgcmVzdWx0
LCBzdHlsZSkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdE5leHRJbXBvcnQsIHhzbHRTdHlsZXNo
ZWV0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoc3R5bGUpKQorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5j
KHZvaWQqLCBjb25zdCBjaGFyKiwgLi4uKQoreworICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8g
ZG8gc29tZXRoaW5nIHdpdGggdGhpcyBlcnJvciBtZXNzYWdlLgorfQorCit2b2lkIFhTTFRQcm9j
ZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCit7
CisgICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7
CisgICAgaWYgKCFjb25zb2xlKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNzYWdlTGV2ZWwg
bGV2ZWw7CisgICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKKyAgICBjYXNlIFhNTF9FUlJfTk9O
RToKKyAgICAgICAgbGV2ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgWE1MX0VSUl9XQVJOSU5HOgorICAgICAgICBsZXZlbCA9IFdhcm5pbmdNZXNzYWdlTGV2
ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWE1MX0VSUl9FUlJPUjoKKyAgICBjYXNlIFhN
TF9FUlJfRkFUQUw6CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VM
ZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY29uc29sZS0+YWRkTWVzc2FnZShY
TUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgbGV2ZWwsIGVycm9yLT5tZXNzYWdlLCBl
cnJvci0+bGluZSwgZXJyb3ItPmZpbGUpOworfQorCisvLyBGSVhNRTogVGhlcmUgc2VlbXMgdG8g
YmUgbm8gd2F5IHRvIGNvbnRyb2wgdGhlIGN0eHQgcG9pbnRlciBmb3IgbG9hZGluZyBoZXJlLCB0
aHVzIHdlIGhhdmUgZ2xvYmFscy4KK3N0YXRpYyBYU0xUUHJvY2Vzc29yKiBnbG9iYWxQcm9jZXNz
b3IgPSAwOworc3RhdGljIERvY0xvYWRlciogZ2xvYmFsRG9jTG9hZGVyID0gMDsKK3N0YXRpYyB4
bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4bWxDaGFyKiB1cmksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4bWxEaWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBjdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eHNsdExvYWRUeXBlIHR5cGUpCit7CisgICAgaWYgKCFnbG9iYWxQcm9jZXNzb3IpCisgICAgICAg
IHJldHVybiAwOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBYU0xUX0xPQURfRE9D
VU1FTlQ6IHsKKyAgICAgICAgeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY29udGV4dCA9ICh4c2x0
VHJhbnNmb3JtQ29udGV4dFB0ciljdHh0OworICAgICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9k
ZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9kZSk7CisgICAgICAg
IEtVUkwgdXJsKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihiYXNlKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVyaSkpOworICAgICAg
ICB4bWxGcmVlKGJhc2UpOworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yOworICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOwor
CisgICAgICAgIGJvb2wgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkg
JiYgZ2xvYmFsRG9jTG9hZGVyLT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1
cmwpOworICAgICAgICBpZiAocmVxdWVzdEFsbG93ZWQpIHsKKyAgICAgICAgICAgIGdsb2JhbERv
Y0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJs
LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAg
ICAgICAgcmVxdWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9y
aWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAg
ICAgICBnbG9iYWxEb2NMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOworICAg
ICAgICB9CisKKyAgICAgICAgQ29uc29sZSogY29uc29sZSA9IDA7CisgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+b3duZXJEb2N1bWVu
dCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21XaW5kb3coKS0+
Y29uc29sZSgpOworICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKGNvbnNvbGUsIFhT
TFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTsKKyAgICAgICAgeG1sU2V0R2VuZXJpY0Vycm9y
RnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKTsKKworICAgICAg
ICAvLyBXZSBkb24ndCBzcGVjaWZ5IGFuIGVuY29kaW5nIGhlcmUuIE5laXRoZXIgR2Vja28gbm9y
IFdpbklFIHJlc3BlY3RzCisgICAgICAgIC8vIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhl
IEhUVFAgaGVhZGVycy4KKyAgICAgICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAoY29uc3QgY2hhciopdXJpLCAwLCBvcHRpb25zKTsKKwor
ICAgICAgICB4bWxTZXRTdHJ1Y3R1cmVkRXJyb3JGdW5jKDAsIDApOworICAgICAgICB4bWxTZXRH
ZW5lcmljRXJyb3JGdW5jKDAsIDApOworCisgICAgICAgIHJldHVybiBkb2M7CisgICAgfQorICAg
IGNhc2UgWFNMVF9MT0FEX1NUWUxFU0hFRVQ6CisgICAgICAgIHJldHVybiBnbG9iYWxQcm9jZXNz
b3ItPnhzbFN0eWxlc2hlZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKCgoeHNsdFN0
eWxlc2hlZXRQdHIpY3R4dCktPmRvYywgdXJpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldFhT
TFRMb2FkQ2FsbEJhY2soeHNsdERvY0xvYWRlckZ1bmMgZnVuYywgWFNMVFByb2Nlc3NvciogcHJv
Y2Vzc29yLCBEb2NMb2FkZXIqIGxvYWRlcikKK3sKKyAgICB4c2x0U2V0TG9hZGVyRnVuYyhmdW5j
KTsKKyAgICBnbG9iYWxQcm9jZXNzb3IgPSBwcm9jZXNzb3I7CisgICAgZ2xvYmFsRG9jTG9hZGVy
ID0gbG9hZGVyOworfQorCitzdGF0aWMgaW50IHdyaXRlVG9WZWN0b3Iodm9pZCogY29udGV4dCwg
Y29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuKQoreworICAgIFZlY3RvcjxVQ2hhcj4mIHJlc3Vs
dE91dHB1dCA9ICpzdGF0aWNfY2FzdDxWZWN0b3I8VUNoYXI+Kj4oY29udGV4dCk7CisgICAgU3Ry
aW5nIGRlY29kZWRDaHVuayA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLCBsZW4pOworICAgIHJl
c3VsdE91dHB1dC5hcHBlbmQoZGVjb2RlZENodW5rLmNoYXJhY3RlcnMoKSwgZGVjb2RlZENodW5r
Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgYm9vbCBzYXZlUmVzdWx0
VG9TdHJpbmcoeG1sRG9jUHRyIHJlc3VsdERvYywgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQsIFN0
cmluZyYgcmVzdWx0U3RyaW5nKQoreworICAgIHhtbE91dHB1dEJ1ZmZlclB0ciBvdXRwdXRCdWYg
PSB4bWxBbGxvY091dHB1dEJ1ZmZlcigwKTsKKyAgICBpZiAoIW91dHB1dEJ1ZikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7CisgICAgb3V0
cHV0QnVmLT5jb250ZXh0ID0gJnJlc3VsdFZlY3RvcjsKKyAgICBvdXRwdXRCdWYtPndyaXRlY2Fs
bGJhY2sgPSB3cml0ZVRvVmVjdG9yOworCisgICAgaW50IHJldHZhbCA9IHhzbHRTYXZlUmVzdWx0
VG8ob3V0cHV0QnVmLCByZXN1bHREb2MsIHNoZWV0KTsKKyAgICB4bWxPdXRwdXRCdWZmZXJDbG9z
ZShvdXRwdXRCdWYpOworICAgIGlmIChyZXR2YWwgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBXb3JrYXJvdW5kIGZvciA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDk1NjY4PjogbGlieHNsdCBhcHBlbmRzIGFuIGV4dHJhIGxpbmUgZmVlZCB0
byB0aGUgcmVzdWx0LgorICAgIGlmIChyZXN1bHRWZWN0b3Iuc2l6ZSgpID4gMCAmJiByZXN1bHRW
ZWN0b3JbcmVzdWx0VmVjdG9yLnNpemUoKSAtIDFdID09ICdcbicpCisgICAgICAgIHJlc3VsdFZl
Y3Rvci5yZW1vdmVMYXN0KCk7CisKKyAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmFkb3B0KHJl
c3VsdFZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIq
KiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVy
TWFwJiBwYXJhbWV0ZXJzKQoreworICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBjaGFyKiogcGFyYW1ldGVyQXJyYXkgPSAoY29uc3Qg
Y2hhcioqKWZhc3RNYWxsb2MoKChwYXJhbWV0ZXJzLnNpemUoKSAqIDIpICsgMSkgKiBzaXplb2Yo
Y2hhciopKTsKKworICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5k
ID0gcGFyYW1ldGVycy5lbmQoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yIChY
U0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10g
PSBzdHJkdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJh
eVtpbmRleCsrXSA9IHN0cmR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAg
ICBwYXJhbWV0ZXJBcnJheVtpbmRleF0gPSAwOworCisgICAgcmV0dXJuIHBhcmFtZXRlckFycmF5
OworfQorCitzdGF0aWMgdm9pZCBmcmVlWHNsdFBhcmFtQXJyYXkoY29uc3QgY2hhcioqIHBhcmFt
cykKK3sKKyAgICBjb25zdCBjaGFyKiogdGVtcCA9IHBhcmFtczsKKyAgICBpZiAoIXBhcmFtcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCp0ZW1wKSB7CisgICAgICAgIGZyZWUoKHZv
aWQqKSoodGVtcCsrKSk7IC8vIHN0cmR1cCByZXR1cm5zIG1hbGxvYydkIGJsb2Nrcywgc28gd2Ug
aGF2ZSB0byB1c2UgZnJlZSgpIGhlcmUKKyAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKyspKTsK
KyAgICB9CisgICAgZmFzdEZyZWUocGFyYW1zKTsKK30KKworc3RhdGljIHhzbHRTdHlsZXNoZWV0
UHRyIHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQdHI8WFNMU3R5bGVTaGVldD4mIGNhY2hlZFN0
eWxlc2hlZXQsIE5vZGUqIHN0eWxlc2hlZXRSb290Tm9kZSkKK3sKKyAgICBpZiAoIWNhY2hlZFN0
eWxlc2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2RlKSB7CisgICAgICAgIGNhY2hlZFN0eWxlc2hl
ZXQgPSBYU0xTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA/
IHN0eWxlc2hlZXRSb290Tm9kZS0+cGFyZW50KCkgOiBzdHlsZXNoZWV0Um9vdE5vZGUsCisgICAg
ICAgICAgICBzdHlsZXNoZWV0Um9vdE5vZGUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsK
KyAgICAgICAgY2FjaGVkU3R5bGVzaGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxl
c2hlZXRSb290Tm9kZSkpOworICAgIH0KKworICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAh
Y2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gY2FjaGVkU3R5bGVzaGVldC0+Y29tcGlsZVN0eWxlU2hlZXQoKTsKK30KKworc3RhdGlj
IGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJvbU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9v
bCYgc2hvdWxkRGVsZXRlKQoreworICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCA9
IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7CisgICAgYm9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNv
dXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQoKSk7CisKKyAgICB4bWxEb2NQdHIgc291cmNl
RG9jID0gMDsKKyAgICBpZiAoc291cmNlSXNEb2N1bWVudCkKKyAgICAgICAgc291cmNlRG9jID0g
KHhtbERvY1B0cilvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKTsKKyAgICBpZiAoIXNv
dXJjZURvYykgeworICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0
cmluZyhvd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUp
LAorICAgICAgICAgICAgc291cmNlSXNEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQtPnVybCgpLnN0
cmluZygpIDogU3RyaW5nKCkpOworICAgICAgICBzaG91bGREZWxldGUgPSBzb3VyY2VEb2M7Cisg
ICAgfQorICAgIHJldHVybiBzb3VyY2VEb2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHJl
c3VsdE1JTUVUeXBlKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0
KQoreworICAgIC8vIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0byBi
ZSBhYmxlIHRvIGRlYWwgd2l0aDoKKyAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1bWVu
dCksIFhNTCAoY3JlYXRlIGFuIFhNTCBkb2N1bWVudCksCisgICAgLy8gYW5kIHRleHQgKHdyYXAg
aW4gYSA8cHJlPiBhbmQgY3JlYXRlIGFuIFhNTCBkb2N1bWVudCkuCisKKyAgICBjb25zdCB4bWxD
aGFyKiByZXN1bHRUeXBlID0gMDsKKyAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5cGUs
IHNoZWV0LCBtZXRob2QpOworICAgIGlmICghcmVzdWx0VHlwZSAmJiByZXN1bHREb2MtPnR5cGUg
PT0gWE1MX0hUTUxfRE9DVU1FTlRfTk9ERSkKKyAgICAgICAgcmVzdWx0VHlwZSA9IChjb25zdCB4
bWxDaGFyKikiaHRtbCI7CisKKyAgICBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0
IHhtbENoYXIqKSJodG1sIikpCisgICAgICAgIHJldHVybiAidGV4dC9odG1sIjsKKyAgICBpZiAo
eG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJ0ZXh0IikpCisgICAgICAg
IHJldHVybiAidGV4dC9wbGFpbiI7CisKKyAgICByZXR1cm4gImFwcGxpY2F0aW9uL3htbCI7Cit9
CisKK2Jvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlTm9k
ZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0
RW5jb2RpbmcpCit7CisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNl
Tm9kZS0+ZG9jdW1lbnQoKTsKKworICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soZG9jTG9hZGVyRnVu
YywgdGhpcywgb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCkpOworICAgIHhzbHRTdHlsZXNoZWV0
UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVldCwgbV9zdHlsZXNo
ZWV0Um9vdE5vZGUuZ2V0KCkpOworICAgIGlmICghc2hlZXQpIHsKKyAgICAgICAgc2V0WFNMVExv
YWRDYWxsQmFjaygwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBt
X3N0eWxlc2hlZXQtPmNsZWFyRG9jdW1lbnRzKCk7CisKKyAgICB4bWxDaGFyKiBvcmlnTWV0aG9k
ID0gc2hlZXQtPm1ldGhvZDsKKyAgICBpZiAoIW9yaWdNZXRob2QgJiYgbWltZVR5cGUgPT0gInRl
eHQvaHRtbCIpCisgICAgICAgIHNoZWV0LT5tZXRob2QgPSAoeG1sQ2hhciopImh0bWwiOworCisg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgYm9vbCBzaG91bGRGcmVlU291cmNlRG9jID0g
ZmFsc2U7CisgICAgaWYgKHhtbERvY1B0ciBzb3VyY2VEb2MgPSB4bWxEb2NQdHJGcm9tTm9kZShz
b3VyY2VOb2RlLCBzaG91bGRGcmVlU291cmNlRG9jKSkgeworICAgICAgICAvLyBUaGUgWE1MIGRl
Y2xhcmF0aW9uIHdvdWxkIHByZXZlbnQgcGFyc2luZyB0aGUgcmVzdWx0IGFzIGEgZnJhZ21lbnQs
IGFuZCBpdCdzIG5vdCBuZWVkZWQgZXZlbiBmb3IgZG9jdW1lbnRzLAorICAgICAgICAvLyBhcyB0
aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGltbWVkaWF0ZWx5IHBhcnNlZC4K
KyAgICAgICAgc2hlZXQtPm9taXRYbWxEZWNsYXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgeHNs
dFRyYW5zZm9ybUNvbnRleHRQdHIgdHJhbnNmb3JtQ29udGV4dCA9IHhzbHROZXdUcmFuc2Zvcm1D
b250ZXh0KHNoZWV0LCBzb3VyY2VEb2MpOworICAgICAgICByZWdpc3RlclhTTFRFeHRlbnNpb25z
KHRyYW5zZm9ybUNvbnRleHQpOworCisgICAgICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjA3Nz46IFhTTFQgcHJvY2Vzc29yIDx4c2w6c29ydD4gYWxnb3Jp
dGhtIG9ubHkgY29tcGFyZXMgYnkgY29kZSBwb2ludAorICAgICAgICB4c2x0U2V0Q3R4dFNvcnRG
dW5jKHRyYW5zZm9ybUNvbnRleHQsIHhzbHRVbmljb2RlU29ydEZ1bmN0aW9uKTsKKworICAgICAg
ICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gbGlieHNsdC4KKyAgICAgICAg
Ly8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEuMS4xMywgc28gb25jZSB3ZSBz
aGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KKyAgICAgICAgaWYgKCF0cmFuc2Zvcm1Db250
ZXh0LT5nbG9iYWxWYXJzKQorICAgICAgICAgICB0cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJz
ID0geG1sSGFzaENyZWF0ZSgyMCk7CisKKyAgICAgICAgY29uc3QgY2hhcioqIHBhcmFtcyA9IHhz
bHRQYXJhbUFycmF5RnJvbVBhcmFtZXRlck1hcChtX3BhcmFtZXRlcnMpOworICAgICAgICB4c2x0
UXVvdGVVc2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRleHQsIHBhcmFtcyk7CisgICAgICAgIHhtbERv
Y1B0ciByZXN1bHREb2MgPSB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlcihzaGVldCwgc291cmNlRG9j
LCAwLCAwLCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsKKworICAgICAgICB4c2x0RnJlZVRyYW5zZm9y
bUNvbnRleHQodHJhbnNmb3JtQ29udGV4dCk7CisgICAgICAgIGZyZWVYc2x0UGFyYW1BcnJheShw
YXJhbXMpOworCisgICAgICAgIGlmIChzaG91bGRGcmVlU291cmNlRG9jKQorICAgICAgICAgICAg
eG1sRnJlZURvYyhzb3VyY2VEb2MpOworCisgICAgICAgIGlmIChzdWNjZXNzID0gc2F2ZVJlc3Vs
dFRvU3RyaW5nKHJlc3VsdERvYywgc2hlZXQsIHJlc3VsdFN0cmluZykpIHsKKyAgICAgICAgICAg
IG1pbWVUeXBlID0gcmVzdWx0TUlNRVR5cGUocmVzdWx0RG9jLCBzaGVldCk7CisgICAgICAgICAg
ICByZXN1bHRFbmNvZGluZyA9IChjaGFyKilyZXN1bHREb2MtPmVuY29kaW5nOworICAgICAgICB9
CisgICAgICAgIHhtbEZyZWVEb2MocmVzdWx0RG9jKTsKKyAgICB9CisKKyAgICBzaGVldC0+bWV0
aG9kID0gb3JpZ01ldGhvZDsKKyAgICBzZXRYU0xUTG9hZENhbGxCYWNrKDAsIDAsIDApOworICAg
IHhzbHRGcmVlU3R5bGVzaGVldChzaGVldCk7CisgICAgbV9zdHlsZXNoZWV0ID0gMDsKKworICAg
IHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoWFNMVCkKLS0gCjEuNi40LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39207</attachid>
            <date>2009-09-08 12:54:59 -0700</date>
            <delta_ts>2009-09-21 15:43:20 -0700</delta_ts>
            <desc>Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.</desc>
            <filename>0001-Rename-XSLStyleSheet.cpp-to-XSLStyleSheetLibxslt.cpp.patch</filename>
            <type>text/plain</type>
            <size>33894</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSA1MWM2MWRlMGNjOTY4MWE3NTU2ZjNmMjdmNTNlNjEwNWYzMWVkN2QzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IFR1ZSwgMTggQXVnIDIwMDkgMjA6NDk6MzUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBSZW5h
bWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwLgogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgpJbiBwcmVwYXJhdGlvbiBm
b3IgYWRkaW5nIFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0CnBvcnQs
IHJlbmFtZSBYU0xTdHlsZVNoZWV0LmNwcCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgYXMg
d2Ugd2lsbApoYXZlIG91ciBvd24gaW1wbGVtZW50YXRpb24gd2hpY2ggbW9zdCBsaWtlbHkgd2ls
bCBub3Qgc2hhcmUgYW55IGNvZGUKd2l0aCB0aGUgY3VycmVudCBvbmUuCgpBZGRpdGlvbmFsbHks
IGZpeCBzb21lIGNvZGluZyBzdHlsZSBpc3N1ZXMuCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAg
ICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvV2ViQ29yZS5neXBpICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiAgICAgfCAgICAyICstCiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiB8ICAgIDggKy0KIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsICAgICAgICAgICAgICAg
IHwgICAgMiArLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAgICAgICAgICAgICAgfCAg
MzEyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNo
ZWV0LmggICAgICAgICAgICAgICB8ICAxMjAgKysrKysrLS0tLS0tCiBXZWJDb3JlL3htbC9YU0xT
dHlsZVNoZWV0TGlieHNsdC5jcHAgICAgICB8ICAzMTIgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysKIDkgZmlsZXMgY2hhbmdlZCwgNDAzIGluc2VydGlvbnMoKyksIDM4MCBkZWxldGlvbnMo
LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAoKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU2
ODdlZS4uOGY3MWM1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wOS0wOCAgSmFrdWIgV2llY3pvcmVr
ICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW5hbWUgWFNMU3R5bGVTaGVldC5jcHAgdG8gWFNMU3R5bGVTaGVldExp
YnhzbHQuY3BwLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgzMDMKKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIFhTTFQgc3VwcG9y
dCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0CisgICAgICAgIHBvcnQsIHJlbmFtZSBYU0xT
dHlsZVNoZWV0LmNwcCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgYXMgd2Ugd2lsbAorICAg
ICAgICBoYXZlIG91ciBvd24gaW1wbGVtZW50YXRpb24gd2hpY2ggbW9zdCBsaWtlbHkgd2lsbCBu
b3Qgc2hhcmUgYW55IGNvZGUKKyAgICAgICAgd2l0aCB0aGUgY3VycmVudCBvbmUuCisKKyAgICAg
ICAgQWRkaXRpb25hbGx5LCBmaXggc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAg
ICogeG1sL1hTTFN0eWxlU2hlZXQuY3BwOiBSZW5hbWVkIHRvIFhTTFN0eWxlU2hlZXRMaWJ4c2x0
LmNwcC4KKyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldC5oOiBGaXggaW5kZW50YXRpb24uCisg
ICAgICAgICogeG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcDogQWRkZWQuCisKIDIwMDktMDkt
MDggIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZiBHYXJlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDc0NWVhM2YuLjE5NjEwMzcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjM5
MSw3ICsyMzkxLDcgQEAgd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9YU0xUPTEKIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAgXAogCVdlYkNv
cmUveG1sL1hTTEltcG9ydFJ1bGUuaCBcCi0JV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5jcHAg
XAorCVdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCBcCiAJV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldC5oIFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5zaW9ucy5jcHAgXAogCVdl
YkNvcmUveG1sL1hTTFRFeHRlbnNpb25zLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzYWRmNTYxLi4xNmRlZTg3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzQ0NSw3ICszNDQ1LDcgQEAKICAgICAgICAgICAgICd4bWwvWFBhdGhWYXJpYWJsZVJlZmVy
ZW5jZS5oJywKICAgICAgICAgICAgICd4bWwvWFNMSW1wb3J0UnVsZS5jcHAnLAogICAgICAgICAg
ICAgJ3htbC9YU0xJbXBvcnRSdWxlLmgnLAotICAgICAgICAgICAgJ3htbC9YU0xTdHlsZVNoZWV0
LmNwcCcsCisgICAgICAgICAgICAneG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCcsCiAgICAg
ICAgICAgICAneG1sL1hTTFN0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAneG1sL1hTTFRFeHRl
bnNpb25zLmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25zLmgnLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZmY2MjRlNS4uM2I5Y2NiZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMzY2OCw3ICsyMzY2OCw3IEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxY
U0xTdHlsZVNoZWV0LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMU3R5bGVTaGVl
dExpYnhzbHQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYjEyZjExLi4xYjllN2I4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMxOSw3ICsy
MzE5LDcgQEAKIAkJOTNGMTlBRjgwODI0NUU1OTAwMUU5QUJDIC8qIFBvc2l0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFOTFGQzhDMDYxMzM2
NjYwMDVFMzc5MCAvKiBQb3NpdGlvbi5jcHAgKi87IH07CiAJCTkzRjE5QUZEMDgyNDVFNTkwMDFF
OUFCQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZh
c0VsZW1lbnQuY3BwICovOyB9OwogCQk5M0YxOUFGRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ2xpcGJv
YXJkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLzsgfTsKLQkJOTNG
MTlCMDMwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFN0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEz
IC8qIFhTTFN0eWxlU2hlZXQuY3BwICovOyB9OworCQk5M0YxOUIwMzA4MjQ1RTU5MDAxRTlBQkMg
LyogWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hl
ZXRMaWJ4c2x0LmNwcCAqLzsgfTsKIAkJOTNGMTlCMDQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQ
cm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwNkYyNEIwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovOyB9Owog
CQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNkYyNEQwNkQx
OEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCAqLzsgfTsKIAkJOTNGMTlC
MDcwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTg1NjA1MTA3MDFGOTExMDAyMzk3NjkgLyogV2Vi
Q29yZVZpZXcubSAqLzsgfTsKQEAgLTkwNTgsNyArOTA1OCw3IEBACiAJCUJDMDZFREUyMEJGRDZE
MEQwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMDZFRTAyMEJGRDcxQUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRh
YmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZFRTAzMEJG
RDcxQUEwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQzA2RjI0OTA2RDE4QTdFMDA0QTZGQTMgLyogWFNMU3R5bGVTaGVldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBY
U0xTdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CisJCUJDMDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiBYU0xTdHlsZVNo
ZWV0TGlieHNsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzA2RjI0QTA2RDE4QTdF
MDA0QTZGQTMgLyogWFNMU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xTdHlsZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzA2RjI0QjA2RDE4QTdF
MDA0QTZGQTMgLyogWFNMVFByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUUHJvY2Vzc29yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDMDZGMjRD
MDZEMThBN0UwMDRBNkZBMyAvKiBYU0xUUHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRQcm9jZXNzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xNDc2Myw3
ICsxNDc2Myw3IEBACiAJCQkJMUFCN0ZDNjcwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoVmFyaWFi
bGVSZWZlcmVuY2UuaCAqLywKIAkJCQk4NTIxN0UwMDBBNUVDRDQ3MDBEQjhEMDAgLyogWFNMSW1w
b3J0UnVsZS5jcHAgKi8sCiAJCQkJODUyMTdFMDEwQTVFQ0Q0NzAwREI4RDAwIC8qIFhTTEltcG9y
dFJ1bGUuaCAqLywKLQkJCQlCQzA2RjI0OTA2RDE4QTdFMDA0QTZGQTMgLyogWFNMU3R5bGVTaGVl
dC5jcHAgKi8sCisJCQkJQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXRM
aWJ4c2x0LmNwcCAqLywKIAkJCQlCQzA2RjI0QTA2RDE4QTdFMDA0QTZGQTMgLyogWFNMU3R5bGVT
aGVldC5oICovLAogCQkJCUUxRjFFODJEMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9u
cy5jcHAgKi8sCiAJCQkJRTFGMUU4MkUwQzNDMkJCOTAwNkRCMzkxIC8qIFhTTFRFeHRlbnNpb25z
LmggKi8sCkBAIC0xOTg0NCw3ICsxOTg0NCw3IEBACiAJCQkJMUFCN0ZDODUwQThCOTJFQzAwRDlE
MzdCIC8qIFhQYXRoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDODcwQThCOTJF
QzAwRDlEMzdCIC8qIFhQYXRoVmFyaWFibGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODUyMTdFMDIwQTVFQ0Q0NzAwREI4RDAwIC8qIFhTTEltcG9ydFJ1bGUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOTNGMTlCMDMwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFN0eWxlU2hlZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJOTNGMTlCMDMwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFN0eWxl
U2hlZXRMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRjFFODJGMEMzQzJCQjkwMDZE
QjM5MSAvKiBYU0xURXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUIwNDA4
MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IDVlYzBjYmYuLmI2ZjU1MzIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCkBAIC0xMDg2LDcgKzEwODYsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2Yg
ZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHhtbC9YUGF0aFZhbHVlLmNw
cAogICAgICAgICB4bWwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5jcHAKICAgICAgICAgeG1sL1hT
TEltcG9ydFJ1bGUuY3BwCi0gICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0LmNwcAorICAgICAgICB4
bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCiAgICAgICAgIHhtbC9YU0xURXh0ZW5zaW9ucy5j
cHAKICAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKICAgICAgICAgeG1sL1hTTFRQcm9j
ZXNzb3IuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcCBiL1dl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiN2Q1MmY4Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCi0KLSNpZiBFTkFCTEUoWFNMVCkK
LQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAi
RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJYTUxU
b2tlbml6ZXIuaCIKLSNpbmNsdWRlICJYTUxUb2tlbml6ZXJTY29wZS5oIgotI2luY2x1ZGUgIlhT
TEltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAibG9h
ZGVyLmgiCi0KLSNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+Ci0jaW5jbHVkZSA8bGlieHNsdC94c2x0
dXRpbHMuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi1TT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KQot
U09GVF9MSU5LKGxpYnhzbHQsIHhzbHRJc0JsYW5rLCBpbnQsICh4bWxDaGFyICpzdHIpLCAoc3Ry
KSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0R2V0TnNQcm9wLCB4bWxDaGFyICosICh4bWxOb2Rl
UHRyIG5vZGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIgKm5hbWVTcGFjZSks
IChub2RlLCBuYW1lLCBuYW1lU3BhY2UpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRQYXJzZVN0
eWxlc2hlZXREb2MsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeG1sRG9jUHRyIGRvYyksIChkb2MpKQot
U09GVF9MSU5LKGxpYnhzbHQsIHhzbHRMb2FkU3R5bGVzaGVldFBJLCB4c2x0U3R5bGVzaGVldFB0
ciwgKHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFyZW50UnVs
ZSwgY29uc3QgU3RyaW5nJiBocmVmKQotICAgIDogU3R5bGVTaGVldChwYXJlbnRSdWxlLCBocmVm
KQotICAgICwgbV9vd25lckRvY3VtZW50KDApCi0gICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKLSAg
ICAsIG1fZW1iZWRkZWQoZmFsc2UpCi0gICAgLCBtX3Byb2Nlc3NlZChmYWxzZSkgLy8gQ2hpbGQg
c2hlZXRzIGdldCBtYXJrZWQgYXMgcHJvY2Vzc2VkIHdoZW4gdGhlIGxpYnhzbHQgZW5naW5lIGhh
cyBmaW5hbGx5IHNlZW4gdGhlbS4KLSAgICAsIG1fc3R5bGVzaGVldERvY1Rha2VuKGZhbHNlKQot
ICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KDApCi17Ci19Ci0KLVhTTFN0eWxlU2hlZXQ6OlhTTFN0
eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCAgYm9vbCBlbWJl
ZGRlZCkKLSAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKLSAgICAsIG1fb3duZXJE
b2N1bWVudChwYXJlbnROb2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9zdHlsZXNoZWV0RG9jKDAp
Ci0gICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQotICAgICwgbV9wcm9jZXNzZWQodHJ1ZSkgLy8g
VGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCi0gICAgLCBtX3N0eWxlc2hlZXRE
b2NUYWtlbihmYWxzZSkKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQotewotfQotCi1YU0xT
dHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCi17Ci0gICAgaWYgKCFtX3N0eWxlc2hlZXREb2NU
YWtlbikKLSAgICAgICAgeG1sRnJlZURvYyhtX3N0eWxlc2hlZXREb2MpOwotfQotCi1ib29sIFhT
TFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCi17Ci0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIFN0eWxl
QmFzZSogcnVsZSA9IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkg
ewotICAgICAgICAgICAgWFNMSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8WFNMSW1w
b3J0UnVsZSo+KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGltcG9ydC0+aXNMb2FkaW5nKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKLXsKLSAgICBp
ZiAoaXNMb2FkaW5nKCkpIAotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHBhcmVudCgpKQotICAg
ICAgICBwYXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKLSAgICBpZiAob3duZXJOb2RlKCkpCi0gICAg
ICAgIG93bmVyTm9kZSgpLT5zaGVldExvYWRlZCgpOwotfQotCi14bWxEb2NQdHIgWFNMU3R5bGVT
aGVldDo6ZG9jdW1lbnQoKQotewotICAgIGlmIChtX2VtYmVkZGVkICYmIG93bmVyRG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1T
b3VyY2UoKTsKLSAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOwotfQotCi12b2lkIFhTTFN0eWxl
U2hlZXQ6OmNsZWFyRG9jdW1lbnRzKCkKLXsKLSAgICBtX3N0eWxlc2hlZXREb2MgPSAwOwotICAg
IHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAgICBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGlt
cG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIGlm
IChpbXBvcnQtPnN0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICBpbXBvcnQtPnN0eWxlU2hl
ZXQoKS0+Y2xlYXJEb2N1bWVudHMoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRG9jTG9hZGVy
KiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQotewotICAgIGlmICghbV9vd25lckRvY3VtZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9vd25lckRvY3VtZW50LT5kb2NMb2Fk
ZXIoKTsKLX0KLQotYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgYm9vbCkKLXsKLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFu
IHhtbERvY1B0cgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KCZCT00pOwotICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCi0gICAgICAgIHht
bEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKLSAgICBtX3N0eWxlc2hlZXREb2NUYWtlbiA9IGZh
bHNlOwotCi0gICAgQ29uc29sZSogY29uc29sZSA9IDA7Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9
IG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21X
aW5kb3coKS0+Y29uc29sZSgpOwotCi0gICAgWE1MVG9rZW5pemVyU2NvcGUgc2NvcGUoZG9jTG9h
ZGVyKCksIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMsIFhTTFRQcm9jZXNzb3I6OnBh
cnNlRXJyb3JGdW5jLCBjb25zb2xlKTsKLQotICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkpOwotICAgIGludCBz
aXplID0gc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLQotICAgIHhtbFBhcnNlckN0
eHRQdHIgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsKLQot
ICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpIHsKLSAgICAgICAgLy8gVGhlIFhTTCB0cmFuc2Zv
cm0gbWF5IGxlYXZlIHRoZSBuZXdseS10cmFuc2Zvcm1lZCBkb2N1bWVudAotICAgICAgICAvLyB3
aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbCBkaWN0aW9uYXJpZXMgb2YgdGhlIHN0eWxlIHNo
ZWV0Ci0gICAgICAgIC8vIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLiBYTUwgZG9jdW1lbnQgZGlz
cG9zYWwgY2FuIGNvcnJ1cHQgbWVtb3J5Ci0gICAgICAgIC8vIGlmIGEgZG9jdW1lbnQgdXNlcyBt
b3JlIHRoYW4gb25lIHN5bWJvbCBkaWN0aW9uYXJ5LCBzbyB3ZQotICAgICAgICAvLyBlbnN1cmUg
dGhhdCBhbGwgY2hpbGQgc3R5bGVzaGVldHMgdXNlIHRoZSBzYW1lIGRpY3Rpb25hcmllcyBhcyB0
aGVpcgotICAgICAgICAvLyBwYXJlbnRzLgotICAgICAgICB4bWxEaWN0RnJlZShjdHh0LT5kaWN0
KTsKLSAgICAgICAgY3R4dC0+ZGljdCA9IG1fcGFyZW50U3R5bGVTaGVldC0+bV9zdHlsZXNoZWV0
RG9jLT5kaWN0OwotICAgICAgICB4bWxEaWN0UmVmZXJlbmNlKGN0eHQtPmRpY3QpOwotICAgIH0K
LQotICAgIG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KGN0eHQsIGJ1ZmZlciwg
c2l6ZSwKLSAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIEJPTUhpZ2hCeXRl
ID09IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCi0gICAgICAgIFhNTF9QQVJTRV9O
T0VOVCB8IFhNTF9QQVJTRV9EVERBVFRSIHwgWE1MX1BBUlNFX05PV0FSTklORyB8IFhNTF9QQVJT
RV9OT0NEQVRBKTsKLSAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKLQotICAgIGxvYWRDaGls
ZFNoZWV0cygpOwotCi0gICAgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsKLX0KLQotdm9pZCBYU0xT
dHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQotewotICAgIGlmICghZG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHhtbE5vZGVQdHIgc3R5bGVzaGVldFJvb3QgPSBkb2N1
bWVudCgpLT5jaGlsZHJlbjsKLSAgICAKLSAgICAvLyBUb3AgbGV2ZWwgY2hpbGRyZW4gbWF5IGlu
Y2x1ZGUgb3RoZXIgdGhpbmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25vcmUgdGhvc2UuCi0g
ICAgd2hpbGUgKHN0eWxlc2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50eXBlICE9IFhNTF9F
TEVNRU5UX05PREUpCi0gICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVzaGVldFJvb3QtPm5l
eHQ7Ci0gICAgCi0gICAgaWYgKG1fZW1iZWRkZWQpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBs
b2NhdGUgKGJ5IElEKSB0aGUgYXBwcm9wcmlhdGUgZW1iZWRkZWQgc3R5bGVzaGVldCBlbGVtZW50
LCBzbyB0aGF0IHdlIGNhbiB3YWxrIHRoZSAKLSAgICAgICAgLy8gaW1wb3J0L2luY2x1ZGUgbGlz
dC4KLSAgICAgICAgeG1sQXR0clB0ciBpZE5vZGUgPSB4bWxHZXRJRChkb2N1bWVudCgpLCAoY29u
c3QgeG1sQ2hhciopKGhyZWYoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIGlmICghaWROb2Rl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHlsZXNoZWV0Um9vdCA9IGlkTm9kZS0+
cGFyZW50OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSBh
biBleHRlcm5hbCBVUkkgd2l0aCBhICMgaW4gaXQuICBUaGlzIGlzIGEgcHJldHR5IG1pbm9yIGVk
Z2UgY2FzZSwgc28gd2UnbGwgZGVhbAotICAgICAgICAvLyB3aXRoIGl0IGxhdGVyLgotICAgIH0K
LSAgICAKLSAgICBpZiAoc3R5bGVzaGVldFJvb3QpIHsKLSAgICAgICAgLy8gV2FsayB0aGUgY2hp
bGRyZW4gb2YgdGhlIHJvb3QgZWxlbWVudCBhbmQgbG9vayBmb3IgaW1wb3J0L2luY2x1ZGUgZWxl
bWVudHMuCi0gICAgICAgIC8vIEltcG9ydHMgbXVzdCBvY2N1ciBmaXJzdC4KLSAgICAgICAgeG1s
Tm9kZVB0ciBjdXJyID0gc3R5bGVzaGVldFJvb3QtPmNoaWxkcmVuOwotICAgICAgICB3aGlsZSAo
Y3VycikgewotICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgIT0gWE1MX0VMRU1FTlRfTk9ERSkg
ewotICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKElTX1hTTFRfRUxFTShjdXJy
KSAmJiBJU19YU0xUX05BTUUoY3VyciwgImltcG9ydCIpKSB7Ci0gICAgICAgICAgICAgICAgeG1s
Q2hhciogdXJpUmVmID0geHNsdEdldE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhyZWYi
LCBYU0xUX05BTUVTUEFDRSk7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxvYWRD
aGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVyaVJlZikpOwotICAgICAg
ICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBOb3cgaGFuZGxlIGluY2x1ZGVzLgotICAgICAgICB3aGlsZSAoY3Vycikg
ewotICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSAmJiBJU19Y
U0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbmNsdWRlIikpIHsKLSAgICAg
ICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1cnIsIChjb25zdCB4
bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgICAgICBsb2FkQ2hp
bGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKil1cmlSZWYpKTsKLSAgICAgICAg
ICAgICAgICB4bWxGcmVlKHVyaVJlZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJy
ID0gY3Vyci0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBYU0xTdHlsZVNoZWV0
Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpCi17Ci0gICAgUmVmUHRyPFhTTElt
cG9ydFJ1bGU+IGNoaWxkUnVsZSA9IFhTTEltcG9ydFJ1bGU6OmNyZWF0ZSh0aGlzLCBocmVmKTsK
LSAgICBhcHBlbmQoY2hpbGRSdWxlKTsKLSAgICBjaGlsZFJ1bGUtPmxvYWRTaGVldCgpOwotfQot
Ci14c2x0U3R5bGVzaGVldFB0ciBYU0xTdHlsZVNoZWV0Ojpjb21waWxlU3R5bGVTaGVldCgpCi17
Ci0gICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGUgc3R5bGVzaGVl
dCBjb21waWxhdGlvbiBwcm9jZXNzLgotICAgIGlmIChtX2VtYmVkZGVkKQotICAgICAgICByZXR1
cm4geHNsdExvYWRTdHlsZXNoZWV0UEkoZG9jdW1lbnQoKSk7Ci0gICAgCi0gICAgLy8geHNsdFBh
cnNlU3R5bGVzaGVldERvYyBtYWtlcyB0aGUgZG9jdW1lbnQgcGFydCBvZiB0aGUgc3R5bGVzaGVl
dAotICAgIC8vIHNvIHdlIGhhdmUgdG8gcmVsZWFzZSBvdXIgcG9pbnRlciB0byBpdC4KLSAgICBB
U1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKLSAgICB4c2x0U3R5bGVzaGVldFB0ciByZXN1
bHQgPSB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jKG1fc3R5bGVzaGVldERvYyk7Ci0gICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6c2V0UGFyZW50U3R5bGVTaGVldChYU0xT
dHlsZVNoZWV0KiBwYXJlbnQpCi17Ci0gICAgbV9wYXJlbnRTdHlsZVNoZWV0ID0gcGFyZW50Owot
ICAgIGlmIChwYXJlbnQpCi0gICAgICAgIG1fb3duZXJEb2N1bWVudCA9IHBhcmVudC0+b3duZXJE
b2N1bWVudCgpOwotfQotCi14bWxEb2NQdHIgWFNMU3R5bGVTaGVldDo6bG9jYXRlU3R5bGVzaGVl
dFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSkKLXsK
LSAgICBib29sIG1hdGNoZWRQYXJlbnQgPSAocGFyZW50RG9jID09IGRvY3VtZW50KCkpOwotICAg
IHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAgICBp
ZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGlt
cG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIFhT
TFN0eWxlU2hlZXQqIGNoaWxkID0gaW1wb3J0LT5zdHlsZVNoZWV0KCk7Ci0gICAgICAgICAgICBp
ZiAoIWNoaWxkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1h
dGNoZWRQYXJlbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnByb2Nlc3NlZCgpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gbGlieHNsdCBoYXMgYmVlbiBnaXZlbiB0
aGlzIHNoZWV0IGFscmVhZHkuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
Q2hlY2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0IHRoZSBkb2MgVVJJ
LgotICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpYnhtbCBjYW5v
bmljYWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVmCi0gICAgICAgICAg
ICAgICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5vbmljYWxpemUgaXQg
dXNpbmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKLSAgICAgICAgICAgICAgICAvLyB3aXRo
IHRoZSBVUkkgYXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQ1N0cmluZyBpbXBvcnRIcmVmID0g
aW1wb3J0LT5ocmVmKCkudXRmOCgpOwotICAgICAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4
bWxOb2RlR2V0QmFzZShwYXJlbnREb2MsICh4bWxOb2RlUHRyKXBhcmVudERvYyk7Ci0gICAgICAg
ICAgICAgICAgeG1sQ2hhciogY2hpbGRVUkkgPSB4bWxCdWlsZFVSSSgoY29uc3QgeG1sQ2hhciop
aW1wb3J0SHJlZi5kYXRhKCksIGJhc2UpOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWxVUklz
ID0geG1sU3RyRXF1YWwodXJpLCBjaGlsZFVSSSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJlZShi
YXNlKTsKLSAgICAgICAgICAgICAgICB4bWxGcmVlKGNoaWxkVVJJKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZXF1YWxVUklzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLT5tYXJrQXNQcm9j
ZXNzZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5kb2N1bWVudCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
eG1sRG9jUHRyIHJlc3VsdCA9IGltcG9ydC0+c3R5bGVTaGVldCgpLT5sb2NhdGVTdHlsZXNoZWV0
U3ViUmVzb3VyY2UocGFyZW50RG9jLCB1cmkpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVl
dDo6bWFya0FzUHJvY2Vzc2VkKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc2VkKTsKLSAgICBB
U1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKLSAgICBtX3Byb2Nlc3NlZCA9IHRydWU7Ci0g
ICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hT
TFN0eWxlU2hlZXQuaCBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAppbmRleCBmZTk3YjU0
Li5lZWYyZmQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKKysrIGIv
V2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCkBAIC0zMiw2NiArMzIsNjYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNz
IFhTTEltcG9ydFJ1bGU7Ci0gICAgCi1jbGFzcyBYU0xTdHlsZVNoZWV0IDogcHVibGljIFN0eWxl
U2hlZXQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNy
ZWF0ZShYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnRJbXBv
cnQsIGhyZWYpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4g
Y3JlYXRlKE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBm
YWxzZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBjcmVh
dGVFbWJlZGRlZChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJl
ZiwgdHJ1ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgflhTTFN0eWxlU2hlZXQoKTsKLSAgICAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICJ0ZXh0L3htbCI7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcgJnN0cmluZywg
Ym9vbCBzdHJpY3QgPSB0cnVlKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7Ci0KLSAgICB2b2lkIGxvYWRDaGlsZFNo
ZWV0cygpOwotICAgIHZvaWQgbG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKTsKLQot
ICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7Ci0KLSAgICBEb2NMb2Fk
ZXIqIGRvY0xvYWRlcigpOwotCi0gICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSB7IHJldHVy
biBtX293bmVyRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5
bGVTaGVldCogcGFyZW50KTsKLQotICAgIHhtbERvY1B0ciBkb2N1bWVudCgpOwotCi0gICAgdm9p
ZCBjbGVhckRvY3VtZW50cygpOwotCi0gICAgeG1sRG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRTdWJS
ZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBjb25zdCB4bWxDaGFyKiB1cmkpOwotICAgIAot
ICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7Ci0gICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7
IHJldHVybiBtX3Byb2Nlc3NlZDsgfQotCi1wcml2YXRlOgotICAgIFhTTFN0eWxlU2hlZXQoTm9k
ZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBib29sIGVtYmVkZGVkKTsKLSAgICBY
U0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwgY29uc3QgU3RyaW5nJiBo
cmVmKTsKLQotICAgIERvY3VtZW50KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgeG1sRG9jUHRyIG1f
c3R5bGVzaGVldERvYzsKLSAgICBib29sIG1fZW1iZWRkZWQ7Ci0gICAgYm9vbCBtX3Byb2Nlc3Nl
ZDsKLSAgICBib29sIG1fc3R5bGVzaGVldERvY1Rha2VuOwotICAgIFhTTFN0eWxlU2hlZXQqIG1f
cGFyZW50U3R5bGVTaGVldDsKLX07CisgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIERv
Y3VtZW50OworICAgIGNsYXNzIFhTTEltcG9ydFJ1bGU7CisKKyAgICBjbGFzcyBYU0xTdHlsZVNo
ZWV0IDogcHVibGljIFN0eWxlU2hlZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9y
dCwgY29uc3QgU3RyaW5nJiBocmVmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50SW1wb3J0LCBocmVmKSk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIHBh
cmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGZhbHNlKSk7
CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3Jl
YXRlRW1iZWRkZWQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50
Tm9kZSwgaHJlZiwgdHJ1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+WFNMU3R5
bGVTaGVldCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1hTTFN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuICJ0ZXh0L3htbCI7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzTG9hZGluZygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2Fk
ZWQoKTsKKworICAgICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0cygpOworICAgICAgICB2b2lkIGxv
YWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CisKKyAgICAgICAgeHNsdFN0eWxlc2hl
ZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQoKTsKKworICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRl
cigpOworCisgICAgICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25l
ckRvY3VtZW50OyB9CisgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNo
ZWV0KiBwYXJlbnQpOworCisgICAgICAgIHhtbERvY1B0ciBkb2N1bWVudCgpOworCisgICAgICAg
IHZvaWQgY2xlYXJEb2N1bWVudHMoKTsKKworICAgICAgICB4bWxEb2NQdHIgbG9jYXRlU3R5bGVz
aGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSk7
CisKKyAgICAgICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKTsKKyAgICAgICAgYm9vbCBwcm9jZXNz
ZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NlZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgWFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGJv
b2wgZW1iZWRkZWQpOworICAgICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVu
dEltcG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKworICAgICAgICBEb2N1bWVudCogbV9vd25l
ckRvY3VtZW50OworICAgICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOworICAgICAgICBi
b29sIG1fZW1iZWRkZWQ7CisgICAgICAgIGJvb2wgbV9wcm9jZXNzZWQ7CisgICAgICAgIGJvb2wg
bV9zdHlsZXNoZWV0RG9jVGFrZW47CisgICAgICAgIFhTTFN0eWxlU2hlZXQqIG1fcGFyZW50U3R5
bGVTaGVldDsKKyAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCBiL1dlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXRMaWJ4c2x0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
ZDI3NTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhz
bHQuY3BwCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5p
emVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyU2NvcGUuaCIKKyNpbmNsdWRlICJYU0xJbXBv
cnRSdWxlLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImxvYWRlci5o
IgorCisjaW5jbHVkZSA8bGlieG1sL3VyaS5oPgorI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxz
Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oTUFDKQorU09GVF9MSU5LX0xJQlJBUlkobGlieHNsdCkKK1NPRlRf
TElOSyhsaWJ4c2x0LCB4c2x0SXNCbGFuaywgaW50LCAoeG1sQ2hhciAqc3RyKSwgKHN0cikpCitT
T0ZUX0xJTksobGlieHNsdCwgeHNsdEdldE5zUHJvcCwgeG1sQ2hhciAqLCAoeG1sTm9kZVB0ciBu
b2RlLCBjb25zdCB4bWxDaGFyICpuYW1lLCBjb25zdCB4bWxDaGFyICpuYW1lU3BhY2UpLCAobm9k
ZSwgbmFtZSwgbmFtZVNwYWNlKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UGFyc2VTdHlsZXNo
ZWV0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciwgKHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKK1NPRlRf
TElOSyhsaWJ4c2x0LCB4c2x0TG9hZFN0eWxlc2hlZXRQSSwgeHNsdFN0eWxlc2hlZXRQdHIsICh4
bWxEb2NQdHIgZG9jKSwgKGRvYykpCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitY
U0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudFJ1bGUsIGNv
bnN0IFN0cmluZyYgaHJlZikKKyAgICA6IFN0eWxlU2hlZXQocGFyZW50UnVsZSwgaHJlZikKKyAg
ICAsIG1fb3duZXJEb2N1bWVudCgwKQorICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCisgICAgLCBt
X2VtYmVkZGVkKGZhbHNlKQorICAgICwgbV9wcm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0
cyBnZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmlu
YWxseSBzZWVuIHRoZW0uCisgICAgLCBtX3N0eWxlc2hlZXREb2NUYWtlbihmYWxzZSkKKyAgICAs
IG1fcGFyZW50U3R5bGVTaGVldCgwKQoreworfQorCitYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNo
ZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgIGJvb2wgZW1iZWRkZWQp
CisgICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYpCisgICAgLCBtX293bmVyRG9jdW1l
bnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fc3R5bGVzaGVldERvYygwKQorICAg
ICwgbV9lbWJlZGRlZChlbWJlZGRlZCkKKyAgICAsIG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRoZSBy
b290IHNoZWV0IHN0YXJ0cyBvZmYgcHJvY2Vzc2VkLgorICAgICwgbV9zdHlsZXNoZWV0RG9jVGFr
ZW4oZmFsc2UpCisgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKK3sKK30KKworWFNMU3R5bGVT
aGVldDo6flhTTFN0eWxlU2hlZXQoKQoreworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4p
CisgICAgICAgIHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKK30KKworYm9vbCBYU0xTdHls
ZVNoZWV0Ojppc0xvYWRpbmcoKQoreworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBTdHlsZUJhc2Uq
IHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAg
ICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1
bGUqPihydWxlKTsKKyAgICAgICAgICAgIGlmIChpbXBvcnQtPmlzTG9hZGluZygpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCit7CisgICAgaWYgKGlz
TG9hZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBw
YXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICBpZiAob3duZXJOb2RlKCkpCisgICAgICAgIG93
bmVyTm9kZSgpLT5zaGVldExvYWRlZCgpOworfQorCit4bWxEb2NQdHIgWFNMU3R5bGVTaGVldDo6
ZG9jdW1lbnQoKQoreworICAgIGlmIChtX2VtYmVkZGVkICYmIG93bmVyRG9jdW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2Uo
KTsKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6
OmNsZWFyRG9jdW1lbnRzKCkKK3sKKyAgICBtX3N0eWxlc2hlZXREb2MgPSAwOworICAgIHVuc2ln
bmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsr
aSkgeworICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOworICAgICAgICBpZiAocnVs
ZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGltcG9ydCA9
IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgIGlmIChpbXBv
cnQtPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICBpbXBvcnQtPnN0eWxlU2hlZXQoKS0+
Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworRG9jTG9hZGVyKiBYU0xT
dHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQoreworICAgIGlmICghbV9vd25lckRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKTsK
K30KKworYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgYm9vbCkKK3sKKyAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERv
Y1B0cgorICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBj
aGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KCZCT00pOworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCisgICAgICAgIHhtbEZyZWVE
b2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICBtX3N0eWxlc2hlZXREb2NUYWtlbiA9IGZhbHNlOwor
CisgICAgQ29uc29sZSogY29uc29sZSA9IDA7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG93bmVy
RG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgY29uc29sZSA9IGZyYW1lLT5kb21XaW5kb3co
KS0+Y29uc29sZSgpOworCisgICAgWE1MVG9rZW5pemVyU2NvcGUgc2NvcGUoZG9jTG9hZGVyKCks
IFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMsIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jLCBjb25zb2xlKTsKKworICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkpOworICAgIGludCBzaXplID0g
c3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAgIHhtbFBhcnNlckN0eHRQdHIg
Y3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVyLCBzaXplKTsKKworICAgIGlm
IChtX3BhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgLy8gVGhlIFhTTCB0cmFuc2Zvcm0gbWF5
IGxlYXZlIHRoZSBuZXdseS10cmFuc2Zvcm1lZCBkb2N1bWVudAorICAgICAgICAvLyB3aXRoIHJl
ZmVyZW5jZXMgdG8gdGhlIHN5bWJvbCBkaWN0aW9uYXJpZXMgb2YgdGhlIHN0eWxlIHNoZWV0Cisg
ICAgICAgIC8vIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLiBYTUwgZG9jdW1lbnQgZGlzcG9zYWwg
Y2FuIGNvcnJ1cHQgbWVtb3J5CisgICAgICAgIC8vIGlmIGEgZG9jdW1lbnQgdXNlcyBtb3JlIHRo
YW4gb25lIHN5bWJvbCBkaWN0aW9uYXJ5LCBzbyB3ZQorICAgICAgICAvLyBlbnN1cmUgdGhhdCBh
bGwgY2hpbGQgc3R5bGVzaGVldHMgdXNlIHRoZSBzYW1lIGRpY3Rpb25hcmllcyBhcyB0aGVpcgor
ICAgICAgICAvLyBwYXJlbnRzLgorICAgICAgICB4bWxEaWN0RnJlZShjdHh0LT5kaWN0KTsKKyAg
ICAgICAgY3R4dC0+ZGljdCA9IG1fcGFyZW50U3R5bGVTaGVldC0+bV9zdHlsZXNoZWV0RG9jLT5k
aWN0OworICAgICAgICB4bWxEaWN0UmVmZXJlbmNlKGN0eHQtPmRpY3QpOworICAgIH0KKworICAg
IG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KGN0eHQsIGJ1ZmZlciwgc2l6ZSwK
KyAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4
RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwKKyAgICAgICAgWE1MX1BBUlNFX05PRU5UIHwg
WE1MX1BBUlNFX0RUREFUVFIgfCBYTUxfUEFSU0VfTk9XQVJOSU5HIHwgWE1MX1BBUlNFX05PQ0RB
VEEpOworICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0eHQpOworCisgICAgbG9hZENoaWxkU2hlZXRz
KCk7CisKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2b2lkIFhTTFN0eWxlU2hl
ZXQ6OmxvYWRDaGlsZFNoZWV0cygpCit7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB4bWxOb2RlUHRyIHN0eWxlc2hlZXRSb290ID0gZG9jdW1lbnQoKS0+Y2hp
bGRyZW47CisKKyAgICAvLyBUb3AgbGV2ZWwgY2hpbGRyZW4gbWF5IGluY2x1ZGUgb3RoZXIgdGhp
bmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25vcmUgdGhvc2UuCisgICAgd2hpbGUgKHN0eWxl
c2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUpCisg
ICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVzaGVldFJvb3QtPm5leHQ7CisKKyAgICBpZiAo
bV9lbWJlZGRlZCkgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGxvY2F0ZSAoYnkgSUQpIHRoZSBh
cHByb3ByaWF0ZSBlbWJlZGRlZCBzdHlsZXNoZWV0IGVsZW1lbnQsIHNvIHRoYXQgd2UgY2FuIHdh
bGsgdGhlCisgICAgICAgIC8vIGltcG9ydC9pbmNsdWRlIGxpc3QuCisgICAgICAgIHhtbEF0dHJQ
dHIgaWROb2RlID0geG1sR2V0SUQoZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVmKCku
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICBpZiAoIWlkTm9kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgc3R5bGVzaGVldFJvb3QgPSBpZE5vZGUtPnBhcmVudDsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgYW4gZXh0ZXJuYWwgVVJJIHdpdGgg
YSAjIGluIGl0LiAgVGhpcyBpcyBhIHByZXR0eSBtaW5vciBlZGdlIGNhc2UsIHNvIHdlJ2xsIGRl
YWwKKyAgICAgICAgLy8gd2l0aCBpdCBsYXRlci4KKyAgICB9CisKKyAgICBpZiAoc3R5bGVzaGVl
dFJvb3QpIHsKKyAgICAgICAgLy8gV2FsayB0aGUgY2hpbGRyZW4gb2YgdGhlIHJvb3QgZWxlbWVu
dCBhbmQgbG9vayBmb3IgaW1wb3J0L2luY2x1ZGUgZWxlbWVudHMuCisgICAgICAgIC8vIEltcG9y
dHMgbXVzdCBvY2N1ciBmaXJzdC4KKyAgICAgICAgeG1sTm9kZVB0ciBjdXJyID0gc3R5bGVzaGVl
dFJvb3QtPmNoaWxkcmVuOworICAgICAgICB3aGlsZSAoY3VycikgeworICAgICAgICAgICAgaWYg
KGN1cnItPnR5cGUgIT0gWE1MX0VMRU1FTlRfTk9ERSkgeworICAgICAgICAgICAgICAgIGN1cnIg
PSBjdXJyLT5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKElTX1hTTFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUoY3Vyciwg
ImltcG9ydCIpKSB7CisgICAgICAgICAgICAgICAgeG1sQ2hhciogdXJpUmVmID0geHNsdEdldE5z
UHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7CisgICAg
ICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciop
dXJpUmVmKSk7CisgICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjdXJyID0gY3Vyci0+
bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBoYW5kbGUgaW5jbHVkZXMuCisgICAg
ICAgIHdoaWxlIChjdXJyKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+dHlwZSA9PSBYTUxfRUxF
TUVOVF9OT0RFICYmIElTX1hTTFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUoY3VyciwgImlu
Y2x1ZGUiKSkgeworICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1By
b3AoY3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOworICAgICAg
ICAgICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVy
aVJlZikpOworICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZikKK3sK
KyAgICBSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY2hpbGRSdWxlID0gWFNMSW1wb3J0UnVsZTo6Y3Jl
YXRlKHRoaXMsIGhyZWYpOworICAgIGFwcGVuZChjaGlsZFJ1bGUpOworICAgIGNoaWxkUnVsZS0+
bG9hZFNoZWV0KCk7Cit9CisKK3hzbHRTdHlsZXNoZWV0UHRyIFhTTFN0eWxlU2hlZXQ6OmNvbXBp
bGVTdHlsZVNoZWV0KCkKK3sKKyAgICAvLyBGSVhNRTogSG9vayB1cCBlcnJvciByZXBvcnRpbmcg
Zm9yIHRoZSBzdHlsZXNoZWV0IGNvbXBpbGF0aW9uIHByb2Nlc3MuCisgICAgaWYgKG1fZW1iZWRk
ZWQpCisgICAgICAgIHJldHVybiB4c2x0TG9hZFN0eWxlc2hlZXRQSShkb2N1bWVudCgpKTsKKwor
ICAgIC8vIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MgbWFrZXMgdGhlIGRvY3VtZW50IHBhcnQgb2Yg
dGhlIHN0eWxlc2hlZXQKKyAgICAvLyBzbyB3ZSBoYXZlIHRvIHJlbGVhc2Ugb3VyIHBvaW50ZXIg
dG8gaXQuCisgICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7CisgICAgeHNsdFN0eWxl
c2hlZXRQdHIgcmVzdWx0ID0geHNsdFBhcnNlU3R5bGVzaGVldERvYyhtX3N0eWxlc2hlZXREb2Mp
OworICAgIGlmIChyZXN1bHQpCisgICAgICAgIG1fc3R5bGVzaGVldERvY1Rha2VuID0gdHJ1ZTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OnNldFBhcmVudFN0
eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KQoreworICAgIG1fcGFyZW50U3R5bGVTaGVl
dCA9IHBhcmVudDsKKyAgICBpZiAocGFyZW50KQorICAgICAgICBtX293bmVyRG9jdW1lbnQgPSBw
YXJlbnQtPm93bmVyRG9jdW1lbnQoKTsKK30KKworeG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6Omxv
Y2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBjb25zdCB4bWxD
aGFyKiB1cmkpCit7CisgICAgYm9vbCBtYXRjaGVkUGFyZW50ID0gKHBhcmVudERvYyA9PSBkb2N1
bWVudCgpKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBydWxlID0gaXRlbShp
KTsKKyAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAgICBYU0xJ
bXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4ocnVsZSk7Cisg
ICAgICAgICAgICBYU0xTdHlsZVNoZWV0KiBjaGlsZCA9IGltcG9ydC0+c3R5bGVTaGVldCgpOwor
ICAgICAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChtYXRjaGVkUGFyZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5w
cm9jZXNzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGxpYnhzbHQgaGFz
IGJlZW4gZ2l2ZW4gdGhpcyBzaGVldCBhbHJlYWR5LgorCisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0IHRoZSBkb2MgVVJJLgor
ICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpYnhtbCBjYW5vbmlj
YWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVmCisgICAgICAgICAgICAg
ICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5vbmljYWxpemUgaXQgdXNp
bmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRo
ZSBVUkkgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgQ1N0cmluZyBpbXBvcnRIcmVmID0gaW1w
b3J0LT5ocmVmKCkudXRmOCgpOworICAgICAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxO
b2RlR2V0QmFzZShwYXJlbnREb2MsICh4bWxOb2RlUHRyKXBhcmVudERvYyk7CisgICAgICAgICAg
ICAgICAgeG1sQ2hhciogY2hpbGRVUkkgPSB4bWxCdWlsZFVSSSgoY29uc3QgeG1sQ2hhciopaW1w
b3J0SHJlZi5kYXRhKCksIGJhc2UpOworICAgICAgICAgICAgICAgIGJvb2wgZXF1YWxVUklzID0g
eG1sU3RyRXF1YWwodXJpLCBjaGlsZFVSSSk7CisgICAgICAgICAgICAgICAgeG1sRnJlZShiYXNl
KTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKGNoaWxkVVJJKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxVUklzKSB7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5tYXJrQXNQcm9jZXNz
ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5kb2N1bWVudCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeG1s
RG9jUHRyIHJlc3VsdCA9IGltcG9ydC0+c3R5bGVTaGVldCgpLT5sb2NhdGVTdHlsZXNoZWV0U3Vi
UmVzb3VyY2UocGFyZW50RG9jLCB1cmkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjptYXJr
QXNQcm9jZXNzZWQoKQoreworICAgIEFTU0VSVCghbV9wcm9jZXNzZWQpOworICAgIEFTU0VSVCgh
bV9zdHlsZXNoZWV0RG9jVGFrZW4pOworICAgIG1fcHJvY2Vzc2VkID0gdHJ1ZTsKKyAgICBtX3N0
eWxlc2hlZXREb2NUYWtlbiA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShYU0xUKQotLSAKMS42LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39384</attachid>
            <date>2009-09-10 14:58:08 -0700</date>
            <delta_ts>2009-09-11 06:59:56 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>0001-Qt-Implement-XSLT-support-with-QtXmlPatterns.patch</filename>
            <type>text/plain</type>
            <size>33771</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBkNzZlNzQwNGUzNTY2NzEyYWViOWUyN2M0MzA0OTZmYWRiZGU4NzYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTEgU2VwIDIwMDkgMDE6MzQ6MjYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBbUXRd
IEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zLgogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgotLS0KIEphdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgIHwgICAgOSArKwogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmggICAgICAgICAgfCAgICA2ICstCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAg
ICAgICAgICB8ICAgNDQgKysrKysrKysrKwogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAg
ICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAgICAgICAg
ICB8ICAgIDIgKwogV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgfCAgIDI3
ICsrKy0tLS0KIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogIHwgICAgOCAr
KwogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCAgICAgICAgICAgICAgIHwgICAxNiArLS0tCiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oICAgICAgICAgICAgICAgICB8ICAgMTIgKystCiBXZWJDb3JlL2RvbS9UcmFu
c2Zvcm1Tb3VyY2UuaCAgICAgICAgICB8ICAgNTEgKysrKysrKysrKysKIFdlYkNvcmUvZG9tL1Ry
YW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwIHwgICA0MSArKysrKysrKysKIFdlYkNvcmUvZG9tL1Ry
YW5zZm9ybVNvdXJjZVF0LmNwcCAgICAgIHwgICAzNCArKysrKysrCiBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcCAgICB8ICAgIDQgKy0KIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
clF0LmNwcCAgICAgICAgIHwgICA0OSArKystLS0tLS0tLQogV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldC5oICAgICAgICAgICAgfCAgIDI2ICsrKysrLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVl
dExpYnhzbHQuY3BwICAgfCAgICA0ICstCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3Bw
ICAgICAgICB8ICAxMDMgKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5oICAgICAgICAgICAgfCAgICA4ICsrLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwICAgfCAgICA1ICstCiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3Bw
ICAgICAgICB8ICAxNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIxIGZpbGVz
IGNoYW5nZWQsIDUxOCBpbnNlcnRpb25zKCspLCA4NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlUXQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNjJkOTJlMS4uM2YxYzE5
YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDA5LTA5LTEwICBKYWt1YiBXaWVjem9y
ZWsgIDxmYXcyMTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0
dGVybnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODMwMworCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIFdURl9VU0VfUVhNTFFVRVJZ
ICNkZWZpbmUuCisKIDIwMDktMDktMDkgIEtlbnQgSGFuc2VuICA8a2hhbnNlbkB0cm9sbHRlY2gu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAppbmRleCBkZjU3ZjBmLi5kM2MyOTQwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtNzI5LDEx
ICs3MjksMTEgQEAKICNkZWZpbmUgRU5BQkxFX0FDVElWRVhfVFlQRV9DT05WRVJTSU9OX1dNUExB
WUVSIDEKICNlbmRpZgogCi0vKiBVc2UgdGhlIFF0WG1sU3RyZWFtUmVhZGVyIGltcGxlbWVudGF0
aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KKy8qIFVzZSB0aGUgUVhtbFN0cmVhbVJlYWRlciBpbXBs
ZW1lbnRhdGlvbiBmb3IgWE1MVG9rZW5pemVyICovCisvKiBVc2UgdGhlIFFYbWxRdWVyeSBpbXBs
ZW1lbnRhdGlvbiBmb3IgWFNMVFByb2Nlc3NvciAqLwogI2lmIFBMQVRGT1JNKFFUKQotI2lmICFF
TkFCTEUoWFNMVCkKICNkZWZpbmUgV1RGX1VTRV9RWE1MU1RSRUFNIDEKLSNlbmRpZgorI2RlZmlu
ZSBXVEZfVVNFX1FYTUxRVUVSWSAxCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShRVCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRjZjEw
Yi4uNjMwOThjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAwOS0wOS0xMCAgSmFrdWIgV2llY3pvcmVrICA8
ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbUXRdIEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5z
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzMDMK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRUcmFuc2Zvcm1Tb3VyY2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRyYW5zZm9ybVNvdXJjZSk6CisgICAgICAgICogZG9t
L1RyYW5zZm9ybVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVNv
dXJjZTo6cGxhdGZvcm1Tb3VyY2UpOgorICAgICAgICAqIGRvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4
c2x0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1Tb3VyY2U6OlRyYW5z
Zm9ybVNvdXJjZSk6IFdyYXBzIGEgbGlieG1sMiBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6
OlRyYW5zZm9ybVNvdXJjZTo6flRyYW5zZm9ybVNvdXJjZSk6CisgICAgICAgICogZG9tL1RyYW5z
Zm9ybVNvdXJjZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1Tb3Vy
Y2U6OlRyYW5zZm9ybVNvdXJjZSk6IFdyYXBzIGEgcGxhaW4gc3RyaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNmb3JtU291cmNlOjp+VHJhbnNmb3JtU291cmNlKToKKyAgICAgICAgKiBkb20v
WE1MVG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6
OmRvRW5kKToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjpkb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6
ZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKToKKyAgICAgICAgKiB4bWwvWFNMU3R5bGVT
aGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6c2hlZXRTdHJpbmcpOgor
ICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYU0xTdHlsZVNoZWV0Ojpkb2N1bWVudCk6CisgICAgICAgICogeG1sL1hTTFN0eWxlU2hlZXRR
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmg6CisgICAgICAgICog
eG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnhtbERvY1B0
ckZyb21Ob2RlKToKKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpYU0xUTWVzc2FnZUhhbmRsZXI6OlhTTFRNZXNzYWdlSGFuZGxlcik6
IEEgc3ViY2xhc3Mgb2YgUUFic3RyYWN0TWVzc2FnZUhhbmRsZXIuCisgICAgICAgIChXZWJDb3Jl
OjpYU0xUTWVzc2FnZUhhbmRsZXI6OmhhbmRsZU1lc3NhZ2UpOiBGb3J3YXJkcyBhbGwgcHJvY2Vz
c29yIG1lc3NhZ2VzIHRvIHRoZSBDb25zb2xlLgorICAgICAgICAoV2ViQ29yZTo6WFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBVc2VzIFFYbWxRdWVyeS4KKwogMjAwOS0wOS0wOSAg
U3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxODYxYTlmLi5hM2U2ZTdmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTIz
OTUsNiArMjM5NSw4IEBAIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YU0xU
PTEKIHdlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfWFNMVD0xCiAKIHdlYmNvcmVfc291cmNl
cyArPSBcCisJV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgXAorCVdlYkNv
cmUvZG9tL1RyYW5zZm9ybVNvdXJjZS5oIFwKIAlXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNw
cCBcCiAJV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oIFwKIAlXZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0TGlieHNsdC5jcHAgXApAQCAtMjYxNSw3ICsyNjE3LDcgQEAgZW5kaWYgIyBFTkQgRU5B
QkxFX05PVElGSUNBVElPTlMKIGlmIEVOQUJMRV9TVkcKIEZFQVRVUkVfREVGSU5FU19KQVZBU0NS
SVBUICs9IEVOQUJMRV9TVkc9MQogCi1XRUJDT1JFX0NTU19QUk9QRVJUWV9OQU1FUyArPSAkKFdl
YkNvcmUpL2Nzcy9TVkdDU1NQcm9wZXJ0eU5hbWVzLmluIAorV0VCQ09SRV9DU1NfUFJPUEVSVFlf
TkFNRVMgKz0gJChXZWJDb3JlKS9jc3MvU1ZHQ1NTUHJvcGVydHlOYW1lcy5pbgogV0VCQ09SRV9D
U1NfVkFMVUVfS0VZV09SRFMgKz0gJChXZWJDb3JlKS9jc3MvU1ZHQ1NTVmFsdWVLZXl3b3Jkcy5p
bgogCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNmRlZTg3Li4yNDNmZjI5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTA4Myw2ICsxMDgzLDggQEAKICAgICAgICAgICAgICdkb20vVGV4dEV2ZW50LmNwcCcs
CiAgICAgICAgICAgICAnZG9tL1RleHRFdmVudC5oJywKICAgICAgICAgICAgICdkb20vVG9rZW5p
emVyLmgnLAorICAgICAgICAgICAgJ2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCcsCisg
ICAgICAgICAgICAnZG9tL1RyYW5zZm9ybVNvdXJjZS5oJywKICAgICAgICAgICAgICdkb20vVHJh
dmVyc2FsLmNwcCcsCiAgICAgICAgICAgICAnZG9tL1RyYXZlcnNhbC5oJywKICAgICAgICAgICAg
ICdkb20vVHJlZVdhbGtlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMWY2NzY5YS4uNWJkNTFhZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMjYsNyAr
MTI2LDYgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURFRD0xKSB7CiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJ
TFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX0ZJTFRFUlM9MAogIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQotIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9YU0xUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YU0xUPTAKICMhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1hCTD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEJMPTEKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfV0NTUz0uKTogREVGSU5FUyArPSBFTkFCTEVfV0NTUz0wCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01MPTAK
QEAgLTE2OCw2ICsxNjcsMTIgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJF
QURFRD0xKSB7CiAgICAgfQogfQogCisjIFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMK
KyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0uKSB7CisgICAgIWxlc3NUaGFuKFFUX01J
Tk9SX1ZFUlNJT04sIDUpOkRFRklORVMgKz0gRU5BQkxFX1hTTFQ9MQorICAgIGVsc2U6REVGSU5F
UyArPSBFTkFCTEVfWFNMVD0wCit9CisKIERFRklORVMgKz0gV1RGX1VTRV9KQVZBU0NSSVBUQ09S
RV9CSU5ESU5HUz0xIFdURl9DSEFOR0VTPTEKIAogIyBVc2VkIHRvIGNvbXB1dGUgZGVmYXVsdHMg
Zm9yIHRoZSBidWlsZC13ZWJraXQgc2NyaXB0CkBAIC05MDMsNyArOTA4LDYgQEAgU09VUkNFUyAr
PSBcCiAgICAgZG9tL1doZWVsRXZlbnQuY3BwIFwKICAgICBkb20vWE1MVG9rZW5pemVyLmNwcCBc
CiAgICAgZG9tL1hNTFRva2VuaXplclF0LmNwcCBcCi0gICAgZG9tL1hNTFRva2VuaXplclNjb3Bl
LmNwcCBcCiAgICAgZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwIFwK
ICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAgXApAQCAtMTU2NSw2ICsxNTY5LDcgQEAgSEVBREVSUyArPSBcCiAgICAg
ZG9tL1RhZ05vZGVMaXN0LmggXAogICAgIGRvbS9UZXh0RXZlbnQuaCBcCiAgICAgZG9tL1RleHQu
aCBcCisgICAgZG9tL1RyYW5zZm9ybVNvdXJjZS5oIFwKICAgICBkb20vVHJhdmVyc2FsLmggXAog
ICAgIGRvbS9UcmVlV2Fsa2VyLmggXAogICAgIGRvbS9VSUV2ZW50LmggXApAQCAtMTU3Myw3ICsx
NTc4LDYgQEAgSEVBREVSUyArPSBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oIFwK
ICAgICBkb20vV2hlZWxFdmVudC5oIFwKICAgICBkb20vWE1MVG9rZW5pemVyLmggXAotICAgIGRv
bS9YTUxUb2tlbml6ZXJTY29wZS5oIFwKICAgICBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmgg
XAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9CcmVha0Js
b2NrcXVvdGVDb21tYW5kLmggXApAQCAtMjcwMSwyNSArMjcwNSwxNiBAQCB1bml4OiFtYWM6Q09O
RklHICs9IGxpbmtfcGtnY29uZmlnCiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPTEp
IHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWFNMVD0xCi0gICAg
UEtHQ09ORklHICs9IGxpYnhtbC0yLjAgbGlieHNsdAogCi0gICAgbWFjeCB7Ci0gICAgICAgIElO
Q0xVREVQQVRIICs9IC91c3IvaW5jbHVkZS9saWJ4bWwyCi0gICAgICAgIExJQlMgKz0gLWx4bWwy
IC1seHNsdAotICAgIH0KLQotICAgIHdpbjMyLW1zdmMqIHsKLSAgICAgICAgTElCUyArPSAtbGxp
YnhtbDIgLWxsaWJ4c2x0Ci0gICAgfQorICAgIFFUICs9IHhtbHBhdHRlcm5zCiAKICAgICBTT1VS
Q0VTICs9IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3Iu
Y3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCBcCi0g
ICAgICAgIHhtbC9YU0xJbXBvcnRSdWxlLmNwcCBcCi0gICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0
LmNwcCBcCi0gICAgICAgIHhtbC9YU0xURXh0ZW5zaW9ucy5jcHAgXAorICAgICAgICBkb20vVHJh
bnNmb3JtU291cmNlUXQuY3BwIFwKKyAgICAgICAgeG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAgXAog
ICAgICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAgXAotICAgICAgICB4bWwvWFNMVFVuaWNvZGVT
b3J0LmNwcAorICAgICAgICB4bWwvWFNMVFByb2Nlc3NvclF0LmNwcAogfQogCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfWEJMPTEpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IDNiOWNjYmQuLjc0YjA5MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtMjQzMzYsNiArMjQzMzYsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXFRyYW5zZm9ybVNvdXJjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFRyYXZlcnNhbC5jcHAiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wgYi9XZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAppbmRleCBiNmY1NTMyLi5kNTQ1ZDE1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbApA
QCAtNTA4LDYgKzUwOCw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBu
ZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgZG9tL1RhZ05vZGVMaXN0LmNwcAogICAg
ICAgICBkb20vVGV4dC5jcHAKICAgICAgICAgZG9tL1RleHRFdmVudC5jcHAKKyAgICAgICAgZG9t
L1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwCiAgICAgICAgIGRvbS9UcmF2ZXJzYWwuY3BwCiAg
ICAgICAgIGRvbS9UcmVlV2Fsa2VyLmNwcAogICAgICAgICBkb20vVUlFdmVudC5jcHAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCBiZGM2M2MxLi5hM2Y3ZTQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMTUsNiArMTE1LDcgQEAK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVy
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNp
bmNsdWRlICJUcmVlV2Fsa2VyLmgiCiAjaW5jbHVkZSAiVUlFdmVudC5oIgogI2luY2x1ZGUgIldl
YktpdEFuaW1hdGlvbkV2ZW50LmgiCkBAIC0zMTQsOSArMzE1LDYgQEAgRG9jdW1lbnQ6OkRvY3Vt
ZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogICAgICwgbV90aXRsZVNldEV4cGxpY2l0
bHkoZmFsc2UpCiAgICAgLCBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyKHRoaXMsICZEb2N1
bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXJGaXJlZCkKICAgICAsIG1fZXhlY3V0ZVNj
cmlwdFNvb25UaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmV4ZWN1dGVTY3JpcHRTb29uVGltZXJGaXJl
ZCkKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAsIG1fdHJhbnNmb3JtU291cmNlKDApCi0jZW5kaWYK
ICAgICAsIG1feG1sVmVyc2lvbigiMS4wIikKICAgICAsIG1feG1sU3RhbmRhbG9uZShmYWxzZSkK
ICNpZiBFTkFCTEUoWEJMKQpAQCAtNDc4LDEwICs0NzYsNiBAQCBEb2N1bWVudDo6fkRvY3VtZW50
KCkKICAgICAgICAgbV9yZW5kZXJBcmVuYSA9IDA7CiAgICAgfQogCi0jaWYgRU5BQkxFKFhTTFQp
Ci0gICAgeG1sRnJlZURvYygoeG1sRG9jUHRyKW1fdHJhbnNmb3JtU291cmNlKTsKLSNlbmRpZgot
CiAjaWYgRU5BQkxFKFhCTCkKICAgICBkZWxldGUgbV9iaW5kaW5nTWFuYWdlcjsKICNlbmRpZgpA
QCAtMzgxMCwxMyArMzgwNCw5IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiAgICAgcHJvY2Vzc29yLT5jcmVhdGVEb2N1bWVudEZy
b21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHRoaXMs
IGZyYW1lKCkpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRUcmFuc2Zvcm1Tb3VyY2Uodm9pZCog
ZG9jKQordm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNlKFRyYW5zZm9ybVNvdXJjZSog
c291cmNlKQogewotICAgIGlmIChkb2MgPT0gbV90cmFuc2Zvcm1Tb3VyY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3RyYW5zZm9ybVNvdXJjZSk7Ci0g
ICAgbV90cmFuc2Zvcm1Tb3VyY2UgPSBkb2M7CisgICAgbV90cmFuc2Zvcm1Tb3VyY2UgPSBzb3Vy
Y2U7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNGE4YmViNi4uYjI3ZGEyMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwMyw2ICsxMDQsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNWR0RvY3VtZW50RXh0ZW5zaW9uczsK
ICNlbmRpZgogICAgIAorI2lmIEVOQUJMRShYU0xUKQorICAgIGNsYXNzIFRyYW5zZm9ybVNvdXJj
ZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFhCTCkKICAgICBjbGFzcyBYQkxCaW5kaW5nTWFuYWdl
cjsKICNlbmRpZgpAQCAtNzAwLDEwICs3MDUsMTEgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFhT
TFQpCiAgICAgdm9pZCBhcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBp
KTsKLSAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZSh2b2lkKiBkb2MpOwotICAgIGNvbnN0IHZv
aWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNlOyB9CiAgICAg
UGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSB7IHJldHVybiBt
X3RyYW5zZm9ybVNvdXJjZURvY3VtZW50OyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudChEb2N1bWVudCogZG9jKSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2M7
IH0KKworICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKFRyYW5zZm9ybVNvdXJjZSopOworICAg
IFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFhCTCkKQEAgLTEwMTAs
NyArMTAxNiw3IEBAIHByaXZhdGU6CiAgICAgVGltZXI8RG9jdW1lbnQ+IG1fZXhlY3V0ZVNjcmlw
dFNvb25UaW1lcjsKICAgICAKICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkKiBtX3RyYW5zZm9y
bVNvdXJjZTsKKyAgICBPd25QdHI8VHJhbnNmb3JtU291cmNlPiBtX3RyYW5zZm9ybVNvdXJjZTsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlLmggYi9XZWJDb3JlL2Rv
bS9UcmFuc2Zvcm1Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
OTdhZmNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlLmgK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYWt1YiBXaWVjem9y
ZWsgPGZhdzIxN0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVHJhbnNmb3JtU291cmNlX2gKKyNkZWZpbmUg
VHJhbnNmb3JtU291cmNlX2gKKworI2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjaWYgVVNFKFFYTUxRVUVSWSkKKyAgICB0eXBlZGVmIFN0cmluZyBQbGF0Zm9y
bVRyYW5zZm9ybVNvdXJjZTsKKyNlbHNlCisgICAgdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRyYW5z
Zm9ybVNvdXJjZTsKKyNlbmRpZgorCisgICAgY2xhc3MgVHJhbnNmb3JtU291cmNlIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zZm9ybVNvdXJjZShjb25z
dCBQbGF0Zm9ybVRyYW5zZm9ybVNvdXJjZSYgc291cmNlKTsKKyAgICAgICAgflRyYW5zZm9ybVNv
dXJjZSgpOworCisgICAgICAgIFBsYXRmb3JtVHJhbnNmb3JtU291cmNlIHBsYXRmb3JtU291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBs
YXRmb3JtVHJhbnNmb3JtU291cmNlIG1fc291cmNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBUcmFuc2Zvcm1Tb3VyY2VfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgYi9XZWJDb3JlL2Rv
bS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jZjdkYjVjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vVHJhbnNmb3Jt
U291cmNlTGlieHNsdC5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1Tb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUcmFuc2Zvcm1Tb3Vy
Y2U6OlRyYW5zZm9ybVNvdXJjZShjb25zdCBQbGF0Zm9ybVRyYW5zZm9ybVNvdXJjZSYgc291cmNl
KQorICAgIDogbV9zb3VyY2Uoc291cmNlKQoreworfQorCitUcmFuc2Zvcm1Tb3VyY2U6On5UcmFu
c2Zvcm1Tb3VyY2UoKQoreworICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3NvdXJjZSk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0LmNwcCBiL1dl
YkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wNzRmMmNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20vVHJhbnNm
b3JtU291cmNlUXQuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
VHJhbnNmb3JtU291cmNlOjpUcmFuc2Zvcm1Tb3VyY2UoY29uc3QgUGxhdGZvcm1UcmFuc2Zvcm1T
b3VyY2UmIHNvdXJjZSkKKyAgICA6IG1fc291cmNlKHNvdXJjZSkKK3sKK30KKworVHJhbnNmb3Jt
U291cmNlOjp+VHJhbnNmb3JtU291cmNlKCkKK3sKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcAppbmRleCBkYTJmOWI2Li5kM2M2NTQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJM
aWJ4bWwyLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUu
aCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6
ZXJTY29wZS5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4bWwv
cGFyc2VySW50ZXJuYWxzLmg+CkBAIC0xMjgwLDcgKzEyODEsOCBAQCB2b2lkIFhNTFRva2VuaXpl
cjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xUKQogICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9y
bSkgewotICAgICAgICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNlKHhtbERvY1B0ckZvclN0cmlu
ZyhtX2RvYy0+ZG9jTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0sIG1fZG9j
LT51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICB2b2lkKiBkb2MgPSB4bWxEb2NQdHJGb3JTdHJp
bmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtLCBtX2Rv
Yy0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNlKG5l
dyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSk7CiAgICAgICAgIAogICAgICAgICBtX2RvYy0+c2V0UGFy
c2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwg
YXBwbHkgeHNsIHNoZWV0cy4KICAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcCBiL1dlYkNvcmUvZG9t
L1hNTFRva2VuaXplclF0LmNwcAppbmRleCA3OTllZWYzLi5mNzQ1ODMwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5p
emVyUXQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5o
IgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBA
IC0yNDgsNDUgKzI0OSwxOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW5pdGlhbGl6ZVBhcnNlckNv
bnRleHQoY29uc3QgY2hhciogY2h1bmspCiB2b2lkIFhNTFRva2VuaXplcjo6ZG9FbmQoKQogewog
I2lmIEVOQUJMRShYU0xUKQotICAgICN3YXJuaW5nIExvb2sgYXQgWE1MVG9rZW5pemVyTGliWG1s
LmNwcAotI2VuZGlmCi0KLSAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVh
ZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IgfHwgKG1fd3JvdGVUZXh0ICYmICFtX3Nh
d0ZpcnN0RWxlbWVudCkpIHsKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsIHFQcmludGFibGUo
bV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgY29sdW1uTnVtYmVyKCkpOworICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgeworICAgICAg
ICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNlKG5ldyBUcmFuc2Zvcm1Tb3VyY2UobV9vcmlnaW5h
bFNvdXJjZUZvclRyYW5zZm9ybSkpOworICAgICAgICBtX2RvYy0+c2V0UGFyc2luZyhmYWxzZSk7
IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNo
ZWV0cy4KKyAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgbV9k
b2MtPnNldFBhcnNpbmcodHJ1ZSk7CisgICAgICAgIG1fcGFyc2VyU3RvcHBlZCA9IHRydWU7CiAg
ICAgfQotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQdHJGb3JTdHJpbmcoRG9j
TG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVy
bCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERvY1B0cgotICAgIC8vIEZJ
WE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWlsdXJlIHRvIHBhcnNlIHRo
ZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVycm9yIG1lc3NhZ2VzLgot
ICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJP
TUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00p
OwotCi0gICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBvbGRFcnJvckZ1bmMgPSB4bWxHZW5lcmljRXJy
b3I7Ci0gICAgdm9pZCogb2xkRXJyb3JDb250ZXh0ID0geG1sR2VuZXJpY0Vycm9yQ29udGV4dDsK
LSAgICAKLSAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFja3MoZG9jTG9hZGVyKTsgICAgICAg
IAotICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgZXJyb3JGdW5jKTsKLSAgICAKLSAgICB4
bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5sYXRpbjEoKS5kYXRhKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGlnaEJ5dGUgPT0gMHhGRiA/
ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYU0xUX1BBUlNFX09QVElPTlMpOwotICAgIAotICAgIHNldExvYWRlckZvckxp
YlhNTENhbGxiYWNrcygwKTsKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKG9sZEVycm9yQ29u
dGV4dCwgb2xkRXJyb3JGdW5jKTsKKyNlbmRpZgogICAgIAotICAgIHJldHVybiBzb3VyY2VEb2M7
CisgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJl
RW5kT2ZEb2N1bWVudEVycm9yCisgICAgICAgIHx8IChtX3dyb3RlVGV4dCAmJiAhbV9zYXdGaXJz
dEVsZW1lbnQgJiYgIW1fc2F3WFNMVHJhbnNmb3JtKSkKKyAgICAgICAgaGFuZGxlRXJyb3IoZmF0
YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwgY29s
dW1uTnVtYmVyKCkpOwogfQotI2VuZGlmCiAKIGludCBYTUxUb2tlbml6ZXI6OmxpbmVOdW1iZXIo
KSBjb25zdAogewpAQCAtNjgzLDcgKzY1OCw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZVBy
b2Nlc3NpbmdJbnN0cnVjdGlvbigpCiAKICNpZiBFTkFCTEUoWFNMVCkKICAgICBtX3Nhd1hTTFRy
YW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0woKTsKLSAgICBpZiAobV9z
YXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSkKKyAg
ICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpKQogICAgICAgICBzdG9wUGFyc2luZygpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3htbC9YU0xTdHlsZVNoZWV0LmggYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKaW5k
ZXggZWVmMmZkNC4uOWJlYWQxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVl
dC5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaApAQCAtMjYsOCArMjYsMTIgQEAK
ICNpZiBFTkFCTEUoWFNMVCkKIAogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworI2lmICFVU0Uo
UVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaWJ4c2x0
L3RyYW5zZm9ybS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgY2xhc3MgWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0IHsKICAgICBw
dWJsaWM6CisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhT
TFN0eWxlU2hlZXQ+IGNyZWF0ZShYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0
cmluZyYgaHJlZikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBY
U0xTdHlsZVNoZWV0KHBhcmVudEltcG9ydCwgaHJlZikpOwogICAgICAgICB9CisjZW5kaWYKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIHBhcmVu
dE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIGZhbHNlKSk7CkBA
IC02NSwzMSArNzEsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGxvYWRD
aGlsZFNoZWV0cygpOwogICAgICAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYg
aHJlZik7CiAKLSAgICAgICAgeHNsdFN0eWxlc2hlZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQoKTsK
LQogICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpOwogCiAgICAgICAgIERvY3VtZW50KiBv
d25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25lckRvY3VtZW50OyB9CiAgICAgICAgIHZvaWQg
c2V0UGFyZW50U3R5bGVTaGVldChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpOwogCisjaWYgVVNFKFFY
TUxRVUVSWSkKKyAgICAgICAgU3RyaW5nIHNoZWV0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9z
aGVldFN0cmluZzsgfQorI2Vsc2UKICAgICAgICAgeG1sRG9jUHRyIGRvY3VtZW50KCk7CisgICAg
ICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7CisgICAgICAgIHhtbERv
Y1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9jUHRyIHBhcmVudERvYywgY29u
c3QgeG1sQ2hhciogdXJpKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudHMo
KTsKIAotICAgICAgICB4bWxEb2NQdHIgbG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERv
Y1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIqIHVyaSk7Ci0KICAgICAgICAgdm9pZCBtYXJr
QXNQcm9jZXNzZWQoKTsKICAgICAgICAgYm9vbCBwcm9jZXNzZWQoKSBjb25zdCB7IHJldHVybiBt
X3Byb2Nlc3NlZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgWFNMU3R5bGVTaGVldChOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGJvb2wgZW1iZWRkZWQpOworI2lmICFV
U0UoUVhNTFFVRVJZKQogICAgICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVu
dEltcG9ydCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKyNlbmRpZgogCiAgICAgICAgIERvY3VtZW50
KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgICAgIHhtbERvY1B0ciBtX3N0eWxlc2hlZXREb2M7CiAg
ICAgICAgIGJvb2wgbV9lbWJlZGRlZDsKICAgICAgICAgYm9vbCBtX3Byb2Nlc3NlZDsKKworI2lm
IFVTRShRWE1MUVVFUlkpCisgICAgICAgIFN0cmluZyBtX3NoZWV0U3RyaW5nOworI2Vsc2UKKyAg
ICAgICAgeG1sRG9jUHRyIG1fc3R5bGVzaGVldERvYzsKICAgICAgICAgYm9vbCBtX3N0eWxlc2hl
ZXREb2NUYWtlbjsKKyNlbmRpZgorCiAgICAgICAgIFhTTFN0eWxlU2hlZXQqIG1fcGFyZW50U3R5
bGVTaGVldDsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0
TGlieHNsdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKaW5kZXgg
ZWQyNzUzZC4uYzA5ZTgzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExp
YnhzbHQuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcApAQCAt
MTA4LDggKzEwOCw4IEBAIHZvaWQgWFNMU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQogCiB4bWxE
b2NQdHIgWFNMU3R5bGVTaGVldDo6ZG9jdW1lbnQoKQogewotICAgIGlmIChtX2VtYmVkZGVkICYm
IG93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVu
dCgpLT50cmFuc2Zvcm1Tb3VyY2UoKTsKKyAgICBpZiAobV9lbWJlZGRlZCAmJiBvd25lckRvY3Vt
ZW50KCkgJiYgb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2UoKSkKKyAgICAgICAgcmV0
dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2UoKS0+cGxhdGZv
cm1Tb3VyY2UoKTsKICAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOwogfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldFF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmFkYTBlCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcApAQCAtMCww
ICsxLDEwMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wgaW1wbGVtZW50
YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3
QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQu
aCIKKworI2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsICBib29sIGVtYmVkZGVkKQorICAgIDog
U3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmKQorICAgICwgbV9vd25lckRvY3VtZW50KHBhcmVu
dE5vZGUtPmRvY3VtZW50KCkpCisgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQoreworfQorCitY
U0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCit7Cit9CisKK2Jvb2wgWFNMU3R5bGVTaGVl
dDo6aXNMb2FkaW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCit7CisgICAgaWYgKG93
bmVyTm9kZSgpKQorICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsKK30KKwordm9p
ZCBYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworRG9jTG9hZGVyKiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQoreworICAgIGlm
ICghbV9vd25lckRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25l
ckRvY3VtZW50LT5kb2NMb2FkZXIoKTsKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogRml4IFFY
bWxRdWVyeSBzbyB0aGF0IGl0IGFsbG93cyBjb21waWxpbmcgdGhlIHN0eWxlc2hlZXQgYmVmb3Jl
IHNldHRpbmcgdGhlIGRvY3VtZW50CisgICAgLy8gdG8gYmUgdHJhbnNmb3JtZWQuIFRoaXMgd2F5
IHdlIGNvdWxkIG5vdCBvbmx5IGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGNvcnJlY3QgYmVm
b3JlIHVzaW5nIGl0CisgICAgLy8gYnV0IGFsc28gdHVybiBYU0xTdHlsZVNoZWV0OjpzaGVldFN0
cmluZygpIGludG8gWFNMU3R5bGVTaGVldDo6cXVlcnkoKSB0aGF0IHJldHVybnMgYSBRWG1sUXVl
cnkuCisKKyAgICBtX3NoZWV0U3RyaW5nID0gc3RyaW5nOworICAgIHJldHVybiAhbV9zaGVldFN0
cmluZy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRz
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6Omxv
YWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OnNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVT
aGVldCogcGFyZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgWFNMU3R5
bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBiL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3IuaAppbmRleCA0NWY1Y2IxLi5kYzhlNmRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmgKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCkBAIC0yOCw5
ICsyOCwxMiBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAj
aW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyNp
ZiAhVVNFKFFYTUxRVUVSWSkKICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAj
aW5jbHVkZSA8bGlieHNsdC9kb2N1bWVudHMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTgsMTIgKzYxLDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHJlc2V0KCk7CiAKKyNpZiAhVVNFKFFYTUxR
VUVSWSkKICAgICAgICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEs
IHhtbEVycm9yKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNFcnJvckZ1bmModm9pZCog
dXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKIAotICAgIHB1YmxpYzoKICAgICAgICAg
Ly8gT25seSBmb3IgbGliWFNMVCBjYWxsYmFja3MKICAgICAgICAgWFNMU3R5bGVTaGVldCogeHNs
U3R5bGVzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVzaGVldC5nZXQoKTsgfQorI2VuZGlm
CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJNYXA7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBiL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAppbmRleCA2YjJhMGZkLi4yMDBjNTZi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKKysrIGIv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNl
LmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIlhTTFRFeHRlbnNpb25zLmgiCkBAIC0yNDEsOCArMjQyLDggQEAgc3RhdGlj
IGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJvbU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9v
bCYgc2hvdWxkRGVsZXRlKQogICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2Rl
ID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOwogCiAgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7
Ci0gICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCi0gICAgICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQ
dHIpb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCk7CisgICAgaWYgKHNvdXJjZUlzRG9j
dW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCisgICAgICAgIHNvdXJj
ZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCktPnBsYXRm
b3JtU291cmNlKCk7CiAgICAgaWYgKCFzb3VyY2VEb2MpIHsKICAgICAgICAgc291cmNlRG9jID0g
KHhtbERvY1B0cil4bWxEb2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCks
IGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKSwKICAgICAgICAgICAgIHNvdXJjZUlzRG9jdW1lbnQg
PyBvd25lckRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZmE4NWEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCkBAIC0wLDAg
KzEsMTQ5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRh
dGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdA
Z21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWFNMVCkKKworI2lu
Y2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNv
dXJjZS5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8cWFic3RyYWN0bWVzc2FnZWhhbmRsZXIuaD4K
KyNpbmNsdWRlIDxxYnVmZmVyLmg+CisjaW5jbHVkZSA8cXNvdXJjZWxvY2F0aW9uLmg+CisjaW5j
bHVkZSA8cXhtbHF1ZXJ5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgWFNMVE1l
c3NhZ2VIYW5kbGVyIDogcHVibGljIFFBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyIHsKKworcHVibGlj
OgorICAgIFhTTFRNZXNzYWdlSGFuZGxlcihEb2N1bWVudCogZG9jdW1lbnQgPSAwKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlTWVzc2FnZShRdE1zZ1R5cGUgdHlwZSwgY29uc3QgUVN0cmluZyYg
ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCYg
aWRlbnRpZmllciwgY29uc3QgUVNvdXJjZUxvY2F0aW9uJiBzb3VyY2VMb2NhdGlvbik7CisKK3By
aXZhdGU6CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitYU0xUTWVzc2FnZUhhbmRs
ZXI6OlhTTFRNZXNzYWdlSGFuZGxlcihEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBRQWJzdHJh
Y3RNZXNzYWdlSGFuZGxlcigpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQoreworfQorCit2
b2lkIFhTTFRNZXNzYWdlSGFuZGxlcjo6aGFuZGxlTWVzc2FnZShRdE1zZ1R5cGUgdHlwZSwgY29u
c3QgUVN0cmluZyYgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCYgaWRlbnRpZmllciwgY29uc3QgUVNvdXJjZUxv
Y2F0aW9uJiBzb3VyY2VMb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmZyYW1lKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFF0RGVidWdNc2c6CisgICAgICAgIGxldmVsID0gVGlwTWVzc2Fn
ZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0V2FybmluZ01zZzoKKyAgICAgICAg
bGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFF0
Q3JpdGljYWxNc2c6CisgICAgY2FzZSBRdEZhdGFsTXNnOgorICAgICAgICBsZXZlbCA9IEVycm9y
TWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBsZXZl
bCA9IExvZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQ29uc29s
ZSogY29uc29sZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7
CisgICAgY29uc29sZS0+YWRkTWVzc2FnZShYTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgbGV2ZWwsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTG9j
YXRpb24ubGluZSgpLCBzb3VyY2VMb2NhdGlvbi51cmkoKS50b1N0cmluZygpKTsKK30KKworYm9v
bCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJp
bmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGlu
ZykKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIFJlZlB0cjxYU0xTdHlsZVNo
ZWV0PiBzdHlsZXNoZWV0ID0gbV9zdHlsZXNoZWV0OworICAgIGlmICghc3R5bGVzaGVldCAmJiBt
X3N0eWxlc2hlZXRSb290Tm9kZSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9zdHlsZXNoZWV0
Um9vdE5vZGUuZ2V0KCk7CisgICAgICAgIHN0eWxlc2hlZXQgPSBYU0xTdHlsZVNoZWV0OjpjcmVh
dGUobm9kZS0+cGFyZW50KCkgPyBub2RlLT5wYXJlbnQoKSA6IG5vZGUsIG5vZGUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgc3R5bGVzaGVldC0+cGFyc2VTdHJpbmcoY3Jl
YXRlTWFya3VwKG5vZGUpKTsKKyAgICB9CisKKyAgICBpZiAoIXN0eWxlc2hlZXQgfHwgc3R5bGVz
aGVldC0+c2hlZXRTdHJpbmcoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdWNjZXNzOwor
CisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50ID0gc291cmNlTm9kZS0+ZG9jdW1l
bnQoKTsKKyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoc291cmNlTm9kZSA9PSBvd25lckRv
Y3VtZW50LmdldCgpKTsKKworICAgIFFYbWxRdWVyeSBxdWVyeShRWG1sUXVlcnk6OlhTTFQyMCk7
CisKKyAgICBYU0xUTWVzc2FnZUhhbmRsZXIgbWVzc2FnZUhhbmRsZXIob3duZXJEb2N1bWVudC5n
ZXQoKSk7CisgICAgcXVlcnkuc2V0TWVzc2FnZUhhbmRsZXIoJm1lc3NhZ2VIYW5kbGVyKTsKKwor
ICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9wYXJhbWV0
ZXJzLmVuZCgpOworICAgIGZvciAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHF1
ZXJ5LmJpbmRWYXJpYWJsZShRU3RyaW5nKGl0LT5maXJzdCksIFFYbWxJdGVtKFFWYXJpYW50KGl0
LT5zZWNvbmQpKSk7CisKKyAgICBRU3RyaW5nIHNvdXJjZTsKKyAgICBpZiAoc291cmNlSXNEb2N1
bWVudCAmJiBvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKSkKKyAgICAgICAgc291cmNl
ID0gb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCktPnBsYXRmb3JtU291cmNlKCk7Cisg
ICAgaWYgKCFzb3VyY2VJc0RvY3VtZW50IHx8IHNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHNv
dXJjZSA9IGNyZWF0ZU1hcmt1cChzb3VyY2VOb2RlKTsKKworICAgIFFCdWZmZXIgaW5wdXRCdWZm
ZXI7CisgICAgUUJ1ZmZlciBzdHlsZVNoZWV0QnVmZmVyOworICAgIFFCdWZmZXIgb3V0cHV0QnVm
ZmVyOworCisgICAgaW5wdXRCdWZmZXIuc2V0RGF0YShzb3VyY2UudG9VdGY4KCkpOworICAgIHN0
eWxlU2hlZXRCdWZmZXIuc2V0RGF0YShRU3RyaW5nKHN0eWxlc2hlZXQtPnNoZWV0U3RyaW5nKCkp
LnRvVXRmOCgpKTsKKworICAgIGlucHV0QnVmZmVyLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7
CisgICAgc3R5bGVTaGVldEJ1ZmZlci5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgIG91
dHB1dEJ1ZmZlci5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIHF1ZXJ5LnNldEZv
Y3VzKCZpbnB1dEJ1ZmZlcik7CisgICAgcXVlcnkuc2V0UXVlcnkoJnN0eWxlU2hlZXRCdWZmZXIs
IFFVcmwoc3R5bGVzaGVldC0+aHJlZigpKSk7CisgICAgc3VjY2VzcyA9IHF1ZXJ5LmV2YWx1YXRl
VG8oJm91dHB1dEJ1ZmZlcik7CisgICAgb3V0cHV0QnVmZmVyLnJlc2V0KCk7CisgICAgcmVzdWx0
U3RyaW5nID0gUVN0cmluZzo6ZnJvbVV0Zjgob3V0cHV0QnVmZmVyLnJlYWRBbGwoKSkudHJpbW1l
ZCgpOworCisgICAgaWYgKG1fc3R5bGVzaGVldCkgeworICAgICAgICBtX3N0eWxlc2hlZXQtPmNs
ZWFyRG9jdW1lbnRzKCk7CisgICAgICAgIG1fc3R5bGVzaGVldCA9IDA7CisgICAgfQorCisgICAg
cmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShYU0xUKQotLSAKMS42LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39427</attachid>
            <date>2009-09-11 06:59:56 -0700</date>
            <delta_ts>2009-09-28 10:49:28 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>0001-Qt-Implement-XSLT-support-with-QtXmlPatterns.patch</filename>
            <type>text/plain</type>
            <size>38797</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSBhNmMyYWU2MWY2MzljOWFmNTE2MGEzMjA2NmFkMmEwZGRkY2M1MmEyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IEZyaSwgMTEgU2VwIDIwMDkgMTc6NDE6NDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBbUXRd
IEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zLgogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCgotLS0KIEphdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgIHwgICAgOSArKwogSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmggICAgICAgICAgICAgfCAgICA2ICstCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgNDQgKysrKysrKysrCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogV2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAg
ICAgICAgICAgIHwgICAyNyArKy0tLQogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiAgICAgfCAgICA4ICsrCiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiB8ICAgIDcgKysKIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsICAgICAgICAgICAgICAg
IHwgICAgMSArCiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgICAgICAgICAgICAgICAgICB8ICAg
MTYgKy0tLQogV2ViQ29yZS9kb20vRG9jdW1lbnQuaCAgICAgICAgICAgICAgICAgICAgfCAgIDEy
ICsrLQogV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlLmggICAgICAgICAgICAgfCAgIDUxICsr
KysrKysrKysKIFdlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwICAgIHwgICA0
MyArKysrKysrKwogV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlUXQuY3BwICAgICAgICAgfCAg
IDM0ICsrKysrKysKIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwICAgICAgIHwg
ICAgNCArLQogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwICAgICAgICAgICAgfCAgIDQ5
ICsrKy0tLS0tLS0KIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaCAgICAgICAgICAgICAgIHwg
ICAyNiArKysrLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwICAgICAgfCAg
ICA5ICstCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQuY3BwICAgICAgICAgICB8ICAxMDMg
KysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCAgICAgICAg
ICAgICAgIHwgICAgOCArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICAg
ICAgfCAgICA1ICstCiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwICAgICAgICAgICB8
ICAxNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIyIGZpbGVzIGNoYW5nZWQsIDUy
OSBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvZG9t
L1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9k
b20vVHJhbnNmb3JtU291cmNlUXQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldFF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3JRdC5jcHAKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNWRhNzQ0MC4uYjljMjE2NSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyIEBACisyMDA5LTA5LTExICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtRdF0gSW1wbGVtZW50IFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisgICAg
ICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIFdURl9VU0VfUVhNTFFVRVJZICNkZWZpbmUuCisK
IDIwMDktMDktMDggIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4
IDI0ZDFlYmUuLmMwZjg1NTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC03MjIsMTEgKzcyMiwx
MSBAQAogI2RlZmluZSBFTkFCTEVfUEFOX1NDUk9MTElORyAxCiAjZW5kaWYKIAotLyogVXNlIHRo
ZSBRdFhtbFN0cmVhbVJlYWRlciBpbXBsZW1lbnRhdGlvbiBmb3IgWE1MVG9rZW5pemVyICovCisv
KiBVc2UgdGhlIFFYbWxTdHJlYW1SZWFkZXIgaW1wbGVtZW50YXRpb24gZm9yIFhNTFRva2VuaXpl
ciAqLworLyogVXNlIHRoZSBRWG1sUXVlcnkgaW1wbGVtZW50YXRpb24gZm9yIFhTTFRQcm9jZXNz
b3IgKi8KICNpZiBQTEFURk9STShRVCkKLSNpZiAhRU5BQkxFKFhTTFQpCiAjZGVmaW5lIFdURl9V
U0VfUVhNTFNUUkVBTSAxCi0jZW5kaWYKKyNkZWZpbmUgV1RGX1VTRV9RWE1MUVVFUlkgMQogI2Vu
ZGlmCiAKICNpZiAhUExBVEZPUk0oUVQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQzZGEwODEuLjBkMDI0ZTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMDktMDktMTEgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQg
WFNMVCBzdXBwb3J0IHdpdGggUXRYbWxQYXR0ZXJucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNv
dXJjZXMuYmtsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNlKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0
cmFuc2Zvcm1Tb3VyY2UpOgorICAgICAgICAqIGRvbS9UcmFuc2Zvcm1Tb3VyY2UuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1Tb3VyY2U6OnBsYXRmb3JtU291cmNlKToKKyAg
ICAgICAgKiBkb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6VHJhbnNmb3JtU291cmNlOjpUcmFuc2Zvcm1Tb3VyY2UpOiBXcmFwcyBhIGxpYnht
bDIgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1Tb3VyY2U6On5UcmFuc2Zv
cm1Tb3VyY2UpOgorICAgICAgICAqIGRvbS9UcmFuc2Zvcm1Tb3VyY2VRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU291cmNlOjpUcmFuc2Zvcm1Tb3VyY2UpOiBXcmFw
cyBhIHBsYWluIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVNvdXJjZTo6flRy
YW5zZm9ybVNvdXJjZSk6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpkb0VuZCk6CisgICAgICAgICogZG9tL1hN
TFRva2VuaXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZG9FbmQp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVj
dGlvbik6CisgICAgICAgICogeG1sL1hTTFN0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlhTTFN0eWxlU2hlZXQ6OnNoZWV0U3RyaW5nKToKKyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVl
dExpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6ZG9jdW1lbnQp
OgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB4
bWwvWFNMVFByb2Nlc3Nvci5oOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp4bWxEb2NQdHJGcm9tTm9kZSk6CisgICAgICAgICogeG1s
L1hTTFRQcm9jZXNzb3JRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WFNMVE1lc3Nh
Z2VIYW5kbGVyOjpYU0xUTWVzc2FnZUhhbmRsZXIpOiBBIHN1YmNsYXNzIG9mIFFBYnN0cmFjdE1l
c3NhZ2VIYW5kbGVyLgorICAgICAgICAoV2ViQ29yZTo6WFNMVE1lc3NhZ2VIYW5kbGVyOjpoYW5k
bGVNZXNzYWdlKTogRm9yd2FyZHMgYWxsIHByb2Nlc3NvciBtZXNzYWdlcyB0byB0aGUgQ29uc29s
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKTog
VXNlcyBRWG1sUXVlcnkuCisKIDIwMDktMDktMTEgIENhbWVyb24gTWNDb3JtYWNrICA8Y2FtQG1j
Yy5pZC5hdT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNi
MmNjNzUuLjJkYjIxMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMjM5Myw2ICsyMzkzLDggQEAgRkVBVFVSRV9ERUZJ
TkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hTTFQ9MQogd2ViY29yZV9jcHBmbGFncyArPSAtREVO
QUJMRV9YU0xUPTEKIAogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL2RvbS9UcmFuc2Zv
cm1Tb3VyY2VMaWJ4c2x0LmNwcCBcCisJV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlLmggXAog
CVdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xJbXBvcnRS
dWxlLmggXAogCVdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQx
ZjhmNmUuLjkzNDg2NzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMDgzLDYgKzEwODMsOCBAQAogICAgICAgICAgICAgJ2Rv
bS9UZXh0RXZlbnQuY3BwJywKICAgICAgICAgICAgICdkb20vVGV4dEV2ZW50LmgnLAogICAgICAg
ICAgICAgJ2RvbS9Ub2tlbml6ZXIuaCcsCisgICAgICAgICAgICAnZG9tL1RyYW5zZm9ybVNvdXJj
ZUxpYnhzbHQuY3BwJywKKyAgICAgICAgICAgICdkb20vVHJhbnNmb3JtU291cmNlLmgnLAogICAg
ICAgICAgICAgJ2RvbS9UcmF2ZXJzYWwuY3BwJywKICAgICAgICAgICAgICdkb20vVHJhdmVyc2Fs
LmgnLAogICAgICAgICAgICAgJ2RvbS9UcmVlV2Fsa2VyLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA2MDQ2NDg2Li5jNThi
Zjg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KQEAgLTEyNiw3ICsxMjYsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xF
X1RIUkVBREVEPTEpIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREFTSEJPQVJEX1NVUFBP
UlQ9Lik6IERFRklORVMgKz0gRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUPTAKICFjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfRklMVEVSUz0uKTogREVGSU5FUyArPSBFTkFCTEVfRklMVEVSUz0wCiAh
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YUEFU
SD0xCi0hY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9Lik6IERFRklORVMgKz0gRU5BQkxF
X1hTTFQ9MAogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9YQkw9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XQ1NTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9XQ1NTPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9XTUw9MApAQCAtMTcyLDYgKzE3MSwxMiBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU0lOR0xFX1RIUkVBREVEPTEpIHsKICMgRklYTUU6IEVuYWJsZSBvbmNlIHBsYXRmb3Jt
IGNvZGUgaXMgbGFuZGVkLgogIyAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQl9TT0NLRVRT
PS4pOiBERUZJTkVTICs9IEVOQUJMRV9XRUJfU09DS0VUUz0xCiAKKyMgWFNMVCBzdXBwb3J0IHdp
dGggUXRYbWxQYXR0ZXJucworIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPS4pIHsKKyAg
ICBjb250YWlucyhRVF9DT05GSUcsIHhtbHBhdHRlcm5zKTohbGVzc1RoYW4oUVRfTUlOT1JfVkVS
U0lPTiwgNSk6REVGSU5FUyArPSBFTkFCTEVfWFNMVD0xCisgICAgZWxzZTpERUZJTkVTICs9IEVO
QUJMRV9YU0xUPTAKK30KKwogREVGSU5FUyArPSBXVEZfVVNFX0pBVkFTQ1JJUFRDT1JFX0JJTkRJ
TkdTPTEgV1RGX0NIQU5HRVM9MQogCiAjIFVzZWQgdG8gY29tcHV0ZSBkZWZhdWx0cyBmb3IgdGhl
IGJ1aWxkLXdlYmtpdCBzY3JpcHQKQEAgLTkwOSw3ICs5MTQsNiBAQCBTT1VSQ0VTICs9IFwKICAg
ICBkb20vV2hlZWxFdmVudC5jcHAgXAogICAgIGRvbS9YTUxUb2tlbml6ZXIuY3BwIFwKICAgICBk
b20vWE1MVG9rZW5pemVyUXQuY3BwIFwKLSAgICBkb20vWE1MVG9rZW5pemVyU2NvcGUuY3BwIFwK
ICAgICBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgXAogICAgIGVk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcCBcCkBAIC0xNTY5LDYgKzE1NzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vVGFn
Tm9kZUxpc3QuaCBcCiAgICAgZG9tL1RleHRFdmVudC5oIFwKICAgICBkb20vVGV4dC5oIFwKKyAg
ICBkb20vVHJhbnNmb3JtU291cmNlLmggXAogICAgIGRvbS9UcmF2ZXJzYWwuaCBcCiAgICAgZG9t
L1RyZWVXYWxrZXIuaCBcCiAgICAgZG9tL1VJRXZlbnQuaCBcCkBAIC0xNTc3LDcgKzE1ODIsNiBA
QCBIRUFERVJTICs9IFwKICAgICBkb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggXAogICAgIGRv
bS9XaGVlbEV2ZW50LmggXAogICAgIGRvbS9YTUxUb2tlbml6ZXIuaCBcCi0gICAgZG9tL1hNTFRv
a2VuaXplclNjb3BlLmggXAogICAgIGVkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaCBcCiAgICAg
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuaCBcCkBAIC0yNzA3LDI1ICsyNzExLDE2IEBAIHVuaXg6IW1hYzpDT05GSUcgKz0g
bGlua19wa2djb25maWcKIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9MSkgewogICAg
IEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YU0xUPTEKLSAgICBQS0dDT05G
SUcgKz0gbGlieG1sLTIuMCBsaWJ4c2x0CiAKLSAgICBtYWN4IHsKLSAgICAgICAgSU5DTFVERVBB
VEggKz0gL3Vzci9pbmNsdWRlL2xpYnhtbDIKLSAgICAgICAgTElCUyArPSAtbHhtbDIgLWx4c2x0
Ci0gICAgfQotCi0gICAgd2luMzItbXN2YyogewotICAgICAgICBMSUJTICs9IC1sbGlieG1sMiAt
bGxpYnhzbHQKLSAgICB9CisgICAgUVQgKz0geG1scGF0dGVybnMKIAogICAgIFNPVVJDRVMgKz0g
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAgXAog
ICAgICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwIFwKLSAgICAgICAg
eG1sL1hTTEltcG9ydFJ1bGUuY3BwIFwKLSAgICAgICAgeG1sL1hTTFN0eWxlU2hlZXQuY3BwIFwK
LSAgICAgICAgeG1sL1hTTFRFeHRlbnNpb25zLmNwcCBcCisgICAgICAgIGRvbS9UcmFuc2Zvcm1T
b3VyY2VRdC5jcHAgXAorICAgICAgICB4bWwvWFNMU3R5bGVTaGVldFF0LmNwcCBcCiAgICAgICAg
IHhtbC9YU0xUUHJvY2Vzc29yLmNwcCBcCi0gICAgICAgIHhtbC9YU0xUVW5pY29kZVNvcnQuY3Bw
CisgICAgICAgIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9YQkw9MSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
MDhlZjU3Zi4uMTA3NmFmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC0yNDQ2NCw2ICsyNDQ2NCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cVHJh
bnNmb3JtU291cmNlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxkb21cVHJhdmVyc2FsLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhkZTRkYjYuLjVh
N2RhOTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTM4LDYgKzE1MzgsOCBAQAogCQk4NTRGRTczNzBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2Fs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTRGRTcy
RDBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmggKi87IH07CiAJCTg1NEZFNzM4MEEyMjk3
QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJFMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2Vy
LmNwcCAqLzsgfTsKIAkJODU0RkU3MzkwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJGMEEy
Mjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmggKi87IH07CisJCTg1NEZFNzQwMEEyMjk3QkUw
MDU4RDdBRCAvKiBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJHMEEyMjk3QkUwMDU4RDdBRCAvKiBU
cmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLzsgfTsKKwkJODU0RkU3NDEwQTIyOTdCRTAwNThE
N0FEIC8qIFRyYW5zZm9ybVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODU0RkU3MkgwQTIyOTdCRTAwNThEN0FEIC8qIFRyYW5zZm9ybVNvdXJj
ZS5oICovOyB9OwogCQk4NTUyNDdDRjBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEFwcGxldEVs
ZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODU1MjQ3Q0QwQUQ4NTBCODAwMTIwOTNCIC8qIERPTUhUTUxBcHBsZXRFbGVtZW50SW50
ZXJuYWwuaCAqLzsgfTsKIAkJODU1MjQ3RDAwQUQ4NTBCODAwMTIwOTNCIC8qIERPTUhUTUxFbWJl
ZEVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODU1MjQ3Q0UwQUQ4NTBCODAwMTIwOTNCIC8qIERPTUhUTUxFbWJlZEVsZW1lbnRJ
bnRlcm5hbC5oICovOyB9OwogCQk4NTUyNkMzNzBBQjBBMTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NTUyNkMzNTBBQjBBMTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0ZXJhdG9yLmggKi87IH07CkBAIC02
NzU2LDYgKzY3NTgsOCBAQAogCQk4NTRGRTcyRDBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2Fs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmF2ZXJzYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODU0RkU3MkUwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVX
YWxrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyZWVXYWxr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTRGRTcyRjBBMjI5N0JFMDA1
OEQ3QUQgLyogVHJlZVdhbGtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJlZVdhbGtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NTRGRTcyRzBBMjI5
N0JFMDA1OEQ3QUQgLyogVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NEZFNzJIMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmFu
c2Zvcm1Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zZm9y
bVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTUyNDdDRDBBRDg1MEI4
MDAxMjA5M0IgLyogRE9NSFRNTEFwcGxldEVsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSFRNTEFwcGxldEVsZW1lbnRJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTUyNDdDRTBBRDg1MEI4MDAxMjA5M0IgLyogRE9N
SFRNTEVtYmVkRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01IVE1MRW1iZWRFbGVtZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODU1MjZDMzUwQUIwQTE3RTAwMDMwMkVBIC8qIERPTU5vZGVJdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTm9kZUl0ZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQwMSw2ICsxNTQwNSw4IEBACiAJCQkJODU0RkU3
MkUwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwICovLAogCQkJCTg1NEZFNzJGMEEy
Mjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmggKi8sCiAJCQkJMUE3NTBEM0MwQTkwREUzNTAw
MEZGMjE1IC8qIFRyZWVXYWxrZXIuaWRsICovLAorCQkJCTg1NEZFNzJHMEEyMjk3QkUwMDU4RDdB
RCAvKiBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLywKKwkJCQk4NTRGRTcySDBBMjI5N0JF
MDA1OEQ3QUQgLyogVHJhbnNmb3JtU291cmNlLmggKi8sCiAJCQkJODUwMzFCMzcwQTQ0RUZDNzAw
Rjk5MkUwIC8qIFVJRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjM4MEE0NEVGQzcwMEY5OTJFMCAv
KiBVSUV2ZW50LmggKi8sCiAJCQkJMTQxQjk0RUUwOUVDNDI1QTAwMEU5NDEzIC8qIFVJRXZlbnQu
aWRsICovLApAQCAtMTk3MjcsNiArMTk3MzMsNyBAQAogCQkJCTQ5RTkxMUMzMEVGODZENDcwMDlE
MENBRiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1
MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUU5MTFDRjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NTRGRTc0MDBBMjI5N0JFMDA1OEQ3QUQgLyog
VHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjUwMEFCMTBG
NTREQjMxMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNjBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVy
c2FsLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wgYi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCA2MWEwYThhLi42MDE2NGFk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbApAQCAtNTA4LDYgKzUwOCw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0
aGUgbGlzdCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgZG9tL1Rh
Z05vZGVMaXN0LmNwcAogICAgICAgICBkb20vVGV4dC5jcHAKICAgICAgICAgZG9tL1RleHRFdmVu
dC5jcHAKKyAgICAgICAgZG9tL1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwCiAgICAgICAgIGRv
bS9UcmF2ZXJzYWwuY3BwCiAgICAgICAgIGRvbS9UcmVlV2Fsa2VyLmNwcAogICAgICAgICBkb20v
VUlFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBiZjIyZDg4Li5lZjE5YmE5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMTYsNiArMTE2LDcgQEAKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlICJUcmVlV2Fsa2VyLmgiCiAjaW5jbHVkZSAiVUlFdmVu
dC5oIgogI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCkBAIC0zMTUsOSArMzE2LDYg
QEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpc1hIVE1MKQogICAgICwg
bV90aXRsZVNldEV4cGxpY2l0bHkoZmFsc2UpCiAgICAgLCBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5j
ZVRpbWVyKHRoaXMsICZEb2N1bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXJGaXJlZCkK
ICAgICAsIG1fZXhlY3V0ZVNjcmlwdFNvb25UaW1lcih0aGlzLCAmRG9jdW1lbnQ6OmV4ZWN1dGVT
Y3JpcHRTb29uVGltZXJGaXJlZCkKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAsIG1fdHJhbnNmb3Jt
U291cmNlKDApCi0jZW5kaWYKICAgICAsIG1feG1sVmVyc2lvbigiMS4wIikKICAgICAsIG1feG1s
U3RhbmRhbG9uZShmYWxzZSkKICNpZiBFTkFCTEUoWEJMKQpAQCAtNDgxLDEwICs0NzksNiBAQCBE
b2N1bWVudDo6fkRvY3VtZW50KCkKICAgICAgICAgbV9yZW5kZXJBcmVuYSA9IDA7CiAgICAgfQog
Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgeG1sRnJlZURvYygoeG1sRG9jUHRyKW1fdHJhbnNmb3Jt
U291cmNlKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFhCTCkKICAgICBkZWxldGUgbV9iaW5kaW5n
TWFuYWdlcjsKICNlbmRpZgpAQCAtMzg1NCwxMyArMzg0OCw5IEBAIHZvaWQgRG9jdW1lbnQ6OmFw
cGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiAgICAgcHJvY2Vzc29y
LT5jcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNvZGluZywgcmVz
dWx0TUlNRVR5cGUsIHRoaXMsIGZyYW1lKCkpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRUcmFu
c2Zvcm1Tb3VyY2Uodm9pZCogZG9jKQordm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNl
KFRyYW5zZm9ybVNvdXJjZSogc291cmNlKQogewotICAgIGlmIChkb2MgPT0gbV90cmFuc2Zvcm1T
b3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0ciltX3Ry
YW5zZm9ybVNvdXJjZSk7Ci0gICAgbV90cmFuc2Zvcm1Tb3VyY2UgPSBkb2M7CisgICAgbV90cmFu
c2Zvcm1Tb3VyY2UgPSBzb3VyY2U7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZDAxMDk3Mi4uODU2
MWU0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTEwMyw2ICsxMDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczsKICNlbmRpZgogICAgIAorI2lmIEVOQUJMRShYU0xUKQorICAgIGNs
YXNzIFRyYW5zZm9ybVNvdXJjZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFhCTCkKICAgICBjbGFz
cyBYQkxCaW5kaW5nTWFuYWdlcjsKICNlbmRpZgpAQCAtNzAzLDEwICs3MDgsMTEgQEAgcHVibGlj
OgogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgdm9pZCBhcHBseVhTTFRyYW5zZm9ybShQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24qIHBpKTsKLSAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZSh2b2lkKiBk
b2MpOwotICAgIGNvbnN0IHZvaWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsgcmV0dXJuIG1fdHJhbnNm
b3JtU291cmNlOyB9CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50OyB9CiAgICAgdm9pZCBz
ZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1bWVudCogZG9jKSB7IG1fdHJhbnNmb3JtU291
cmNlRG9jdW1lbnQgPSBkb2M7IH0KKworICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlKFRyYW5z
Zm9ybVNvdXJjZSopOworICAgIFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KICNlbmRpZgogCiAjaWYgRU5B
QkxFKFhCTCkKQEAgLTEwMTUsNyArMTAyMSw3IEBAIHByaXZhdGU6CiAgICAgVGltZXI8RG9jdW1l
bnQ+IG1fZXhlY3V0ZVNjcmlwdFNvb25UaW1lcjsKICAgICAKICNpZiBFTkFCTEUoWFNMVCkKLSAg
ICB2b2lkKiBtX3RyYW5zZm9ybVNvdXJjZTsKKyAgICBPd25QdHI8VHJhbnNmb3JtU291cmNlPiBt
X3RyYW5zZm9ybVNvdXJjZTsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fdHJhbnNmb3JtU291cmNl
RG9jdW1lbnQ7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhbnNmb3JtU291
cmNlLmggYi9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mOTdhZmNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9kb20v
VHJhbnNmb3JtU291cmNlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVHJhbnNmb3Jt
U291cmNlX2gKKyNkZWZpbmUgVHJhbnNmb3JtU291cmNlX2gKKworI2lmIEVOQUJMRShYU0xUKQor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKFFYTUxRVUVSWSkKKyAgICB0eXBl
ZGVmIFN0cmluZyBQbGF0Zm9ybVRyYW5zZm9ybVNvdXJjZTsKKyNlbHNlCisgICAgdHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybVRyYW5zZm9ybVNvdXJjZTsKKyNlbmRpZgorCisgICAgY2xhc3MgVHJhbnNm
b3JtU291cmNlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRy
YW5zZm9ybVNvdXJjZShjb25zdCBQbGF0Zm9ybVRyYW5zZm9ybVNvdXJjZSYgc291cmNlKTsKKyAg
ICAgICAgflRyYW5zZm9ybVNvdXJjZSgpOworCisgICAgICAgIFBsYXRmb3JtVHJhbnNmb3JtU291
cmNlIHBsYXRmb3JtU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFBsYXRmb3JtVHJhbnNmb3JtU291cmNlIG1fc291cmNlOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBUcmFuc2Zv
cm1Tb3VyY2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlTGlieHNs
dC5jcHAgYi9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E4NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9kb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKKworI2luY2x1ZGUgPGxpYnhtbC90
cmVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVHJhbnNmb3JtU291cmNlOjpUcmFuc2Zv
cm1Tb3VyY2UoY29uc3QgUGxhdGZvcm1UcmFuc2Zvcm1Tb3VyY2UmIHNvdXJjZSkKKyAgICA6IG1f
c291cmNlKHNvdXJjZSkKK3sKK30KKworVHJhbnNmb3JtU291cmNlOjp+VHJhbnNmb3JtU291cmNl
KCkKK3sKKyAgICB4bWxGcmVlRG9jKCh4bWxEb2NQdHIpbV9zb3VyY2UpOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2VRdC5jcHAgYi9XZWJDb3JlL2RvbS9U
cmFuc2Zvcm1Tb3VyY2VRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDc0ZjJjYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0
LmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpha3ViIFdp
ZWN6b3JlayA8ZmF3MjE3QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybVNv
dXJjZTo6VHJhbnNmb3JtU291cmNlKGNvbnN0IFBsYXRmb3JtVHJhbnNmb3JtU291cmNlJiBzb3Vy
Y2UpCisgICAgOiBtX3NvdXJjZShzb3VyY2UpCit7Cit9CisKK1RyYW5zZm9ybVNvdXJjZTo6flRy
YW5zZm9ybVNvdXJjZSgpCit7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRv
a2VuaXplckxpYnhtbDIuY3BwIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAK
aW5kZXggZGEyZjliNi4uZDNjNjU0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MVG9rZW5p
emVyTGlieG1sMi5jcHAKKysrIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyU2NvcGUuaCIK
ICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVy
bmFscy5oPgpAQCAtMTI4MCw3ICsxMjgxLDggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmRvRW5kKCkK
IHsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0pIHsKLSAgICAg
ICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZSh4bWxEb2NQdHJGb3JTdHJpbmcobV9kb2MtPmRv
Y0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtLCBtX2RvYy0+dXJsKCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5nKG1fZG9jLT5k
b2NMb2FkZXIoKSwgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSwgbV9kb2MtPnVybCgpLnN0
cmluZygpKTsKKyAgICAgICAgbV9kb2MtPnNldFRyYW5zZm9ybVNvdXJjZShuZXcgVHJhbnNmb3Jt
U291cmNlKGRvYykpOwogICAgICAgICAKICAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcoZmFsc2Up
OyAvLyBNYWtlIHRoZSBkb2MgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBz
aGVldHMuCiAgICAgICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6
ZXJRdC5jcHAKaW5kZXggNzk5ZWVmMy4uZjc0NTgzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20v
WE1MVG9rZW5pemVyUXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcApA
QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpAQCAtMjQ4LDQ1ICsy
NDksMTkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0
IGNoYXIqIGNodW5rKQogdm9pZCBYTUxUb2tlbml6ZXI6OmRvRW5kKCkKIHsKICNpZiBFTkFCTEUo
WFNMVCkKLSAgICAjd2FybmluZyBMb29rIGF0IFhNTFRva2VuaXplckxpYlhtbC5jcHAKLSNlbmRp
ZgotCi0gICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0
dXJlRW5kT2ZEb2N1bWVudEVycm9yIHx8IChtX3dyb3RlVGV4dCAmJiAhbV9zYXdGaXJzdEVsZW1l
bnQpKSB7Ci0gICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJpbnRhYmxlKG1fc3RyZWFtLmVy
cm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51
bWJlcigpKTsKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0pIHsKKyAgICAgICAgbV9kb2MtPnNl
dFRyYW5zZm9ybVNvdXJjZShuZXcgVHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JU
cmFuc2Zvcm0pKTsKKyAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRo
ZSBkb2MgdGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCisgICAg
ICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgICAgIG1fZG9jLT5zZXRQYXJz
aW5nKHRydWUpOworICAgICAgICBtX3BhcnNlclN0b3BwZWQgPSB0cnVlOwogICAgIH0KLX0KLQot
I2lmIEVOQUJMRShYU0xUKQotdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKERvY0xvYWRlciogZG9j
TG9hZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAg
aWYgKHNvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gUGFyc2Ug
aW4gYSBzaW5nbGUgY2h1bmsgaW50byBhbiB4bWxEb2NQdHIKLSAgICAvLyBGSVhNRTogSG9vayB1
cCBlcnJvciBoYW5kbGVycyBzbyB0aGF0IGEgZmFpbHVyZSB0byBwYXJzZSB0aGUgbWFpbiBkb2N1
bWVudCByZXN1bHRzIGluCi0gICAgLy8gZ29vZCBlcnJvciBtZXNzYWdlcy4KLSAgICBjb25zdCBV
Q2hhciBCT00gPSAweEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9
ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLQotICAgIHht
bEdlbmVyaWNFcnJvckZ1bmMgb2xkRXJyb3JGdW5jID0geG1sR2VuZXJpY0Vycm9yOwotICAgIHZv
aWQqIG9sZEVycm9yQ29udGV4dCA9IHhtbEdlbmVyaWNFcnJvckNvbnRleHQ7Ci0gICAgCi0gICAg
c2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tzKGRvY0xvYWRlcik7ICAgICAgICAKLSAgICB4bWxT
ZXRHZW5lcmljRXJyb3JGdW5jKDAsIGVycm9yRnVuYyk7Ci0gICAgCi0gICAgeG1sRG9jUHRyIHNv
dXJjZURvYyA9IHhtbFJlYWRNZW1vcnkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc291
cmNlLmNoYXJhY3RlcnMoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmwubGF0aW4xKCkuZGF0YSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYgPyAiVVRGLTE2TEUi
IDogIlVURi0xNkJFIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WFNMVF9QQVJTRV9PUFRJT05TKTsKLSAgICAKLSAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFj
a3MoMCk7Ci0gICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhvbGRFcnJvckNvbnRleHQsIG9sZEVy
cm9yRnVuYyk7CisjZW5kaWYKICAgICAKLSAgICByZXR1cm4gc291cmNlRG9jOworICAgIGlmICht
X3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1l
bnRFcnJvcgorICAgICAgICB8fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmlyc3RFbGVtZW50ICYm
ICFtX3Nhd1hTTFRyYW5zZm9ybSkpCisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCBxUHJpbnRh
YmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKIH0KLSNlbmRpZgogCiBpbnQgWE1MVG9rZW5pemVyOjpsaW5lTnVtYmVyKCkgY29uc3QKIHsK
QEAgLTY4Myw3ICs2NTgsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAh
bV9zYXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7Ci0gICAgaWYgKG1fc2F3WFNMVHJhbnNm
b3JtICYmICFtX2RvYy0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkpCisgICAgaWYgKG1fc2F3
WFNMVHJhbnNmb3JtICYmICFtX2RvYy0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKICAgICAg
ICAgc3RvcFBhcnNpbmcoKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNM
U3R5bGVTaGVldC5oIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oCmluZGV4IGVlZjJmZDQu
LjliZWFkMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAorKysgYi9X
ZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKQEAgLTI2LDggKzI2LDEyIEBACiAjaWYgRU5BQkxF
KFhTTFQpCiAKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisKKyNpZiAhVVNFKFFYTUxRVUVSWSkK
ICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieHNsdC90cmFuc2Zvcm0u
aD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMzgsMTAgKzQyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIFhTTFN0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldCB7CiAgICAgcHVibGljOgorI2lm
ICFVU0UoUVhNTFFVRVJZKQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0
PiBjcmVhdGUoWFNMSW1wb3J0UnVsZSogcGFyZW50SW1wb3J0LCBjb25zdCBTdHJpbmcmIGhyZWYp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVl
dChwYXJlbnRJbXBvcnQsIGhyZWYpKTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBwYXJlbnROb2RlLCBjb25z
dCBTdHJpbmcmIGhyZWYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgWFNMU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBmYWxzZSkpOwpAQCAtNjUsMzEgKzcx
LDQxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMo
KTsKICAgICAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpOwogCi0g
ICAgICAgIHhzbHRTdHlsZXNoZWV0UHRyIGNvbXBpbGVTdHlsZVNoZWV0KCk7Ci0KICAgICAgICAg
RG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsKIAogICAgICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVu
dCgpIHsgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsgfQogICAgICAgICB2b2lkIHNldFBhcmVudFN0
eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KTsKIAorI2lmIFVTRShRWE1MUVVFUlkpCisg
ICAgICAgIFN0cmluZyBzaGVldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRTdHJpbmc7
IH0KKyNlbHNlCiAgICAgICAgIHhtbERvY1B0ciBkb2N1bWVudCgpOworICAgICAgICB4c2x0U3R5
bGVzaGVldFB0ciBjb21waWxlU3R5bGVTaGVldCgpOworICAgICAgICB4bWxEb2NQdHIgbG9jYXRl
U3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIq
IHVyaSk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGNsZWFyRG9jdW1lbnRzKCk7CiAKLSAgICAg
ICAgeG1sRG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50
RG9jLCBjb25zdCB4bWxDaGFyKiB1cmkpOwotCiAgICAgICAgIHZvaWQgbWFya0FzUHJvY2Vzc2Vk
KCk7CiAgICAgICAgIGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9k
ZSwgY29uc3QgU3RyaW5nJiBocmVmLCBib29sIGVtYmVkZGVkKTsKKyNpZiAhVVNFKFFYTUxRVUVS
WSkKICAgICAgICAgWFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNv
bnN0IFN0cmluZyYgaHJlZik7CisjZW5kaWYKIAogICAgICAgICBEb2N1bWVudCogbV9vd25lckRv
Y3VtZW50OwotICAgICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOwogICAgICAgICBib29s
IG1fZW1iZWRkZWQ7CiAgICAgICAgIGJvb2wgbV9wcm9jZXNzZWQ7CisKKyNpZiBVU0UoUVhNTFFV
RVJZKQorICAgICAgICBTdHJpbmcgbV9zaGVldFN0cmluZzsKKyNlbHNlCisgICAgICAgIHhtbERv
Y1B0ciBtX3N0eWxlc2hlZXREb2M7CiAgICAgICAgIGJvb2wgbV9zdHlsZXNoZWV0RG9jVGFrZW47
CisjZW5kaWYKKwogICAgICAgICBYU0xTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3Bw
IGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCmluZGV4IGVkMjc1M2QuLjJh
ZThiODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAor
KysgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgogI2luY2x1ZGUgIlhNTFRva2Vu
aXplci5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplclNjb3BlLmgiCiAjaW5jbHVkZSAiWFNMSW1w
b3J0UnVsZS5oIgpAQCAtNTcsOSArNTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBYU0xTdHls
ZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFN0
cmluZyYgaHJlZikKICAgICA6IFN0eWxlU2hlZXQocGFyZW50UnVsZSwgaHJlZikKICAgICAsIG1f
b3duZXJEb2N1bWVudCgwKQotICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCiAgICAgLCBtX2VtYmVk
ZGVkKGZhbHNlKQogICAgICwgbV9wcm9jZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBnZXQg
bWFya2VkIGFzIHByb2Nlc3NlZCB3aGVuIHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxseSBz
ZWVuIHRoZW0uCisgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKICAgICAsIG1fc3R5bGVzaGVldERv
Y1Rha2VuKGZhbHNlKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KDApCiB7CkBAIC02OCw5ICs2
OSw5IEBAIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVsZSogcGFyZW50
UnVsZSwgY29uc3QgU3RyaW5nJiBocmVmKQogWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVldChO
b2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsICBib29sIGVtYmVkZGVkKQogICAg
IDogU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmKQogICAgICwgbV9vd25lckRvY3VtZW50KHBh
cmVudE5vZGUtPmRvY3VtZW50KCkpCi0gICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKICAgICAsIG1f
ZW1iZWRkZWQoZW1iZWRkZWQpCiAgICAgLCBtX3Byb2Nlc3NlZCh0cnVlKSAvLyBUaGUgcm9vdCBz
aGVldCBzdGFydHMgb2ZmIHByb2Nlc3NlZC4KKyAgICAsIG1fc3R5bGVzaGVldERvYygwKQogICAg
ICwgbV9zdHlsZXNoZWV0RG9jVGFrZW4oZmFsc2UpCiAgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQo
MCkKIHsKQEAgLTEwOCw4ICsxMDksOCBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVk
KCkKIAogeG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6OmRvY3VtZW50KCkKIHsKLSAgICBpZiAobV9l
bWJlZGRlZCAmJiBvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAoeG1sRG9jUHRyKW93
bmVyRG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCk7CisgICAgaWYgKG1fZW1iZWRkZWQgJiYg
b3duZXJEb2N1bWVudCgpICYmIG93bmVyRG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCkpCisg
ICAgICAgIHJldHVybiAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNl
KCktPnBsYXRmb3JtU291cmNlKCk7CiAgICAgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcCBiL1dlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXRRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OWZhZGEwZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5j
cHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWFNM
IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYWt1YiBXaWVjem9y
ZWsgPGZhdzIxN0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU0xT
dHlsZVNoZWV0LmgiCisKKyNpZiBFTkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgImxv
YWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1hTTFN0eWxlU2hlZXQ6OlhTTFN0eWxl
U2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCAgYm9vbCBlbWJlZGRl
ZCkKKyAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKKyAgICAsIG1fb3duZXJEb2N1
bWVudChwYXJlbnROb2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9lbWJlZGRlZChlbWJlZGRlZCkK
K3sKK30KKworWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hlZXQoKQoreworfQorCitib29sIFhT
TFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6Y2hlY2tMb2FkZWQoKQorewor
ICAgIGlmIChvd25lck5vZGUoKSkKKyAgICAgICAgb3duZXJOb2RlKCktPnNoZWV0TG9hZGVkKCk7
Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6Y2xlYXJEb2N1bWVudHMoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK0RvY0xvYWRlciogWFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkK
K3sKKyAgICBpZiAoIW1fb3duZXJEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1fb3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCk7Cit9CisKK2Jvb2wgWFNMU3R5bGVTaGVl
dDo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wpCit7CisgICAgLy8gRklY
TUU6IEZpeCBRWG1sUXVlcnkgc28gdGhhdCBpdCBhbGxvd3MgY29tcGlsaW5nIHRoZSBzdHlsZXNo
ZWV0IGJlZm9yZSBzZXR0aW5nIHRoZSBkb2N1bWVudAorICAgIC8vIHRvIGJlIHRyYW5zZm9ybWVk
LiBUaGlzIHdheSB3ZSBjb3VsZCBub3Qgb25seSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBpcyBj
b3JyZWN0IGJlZm9yZSB1c2luZyBpdAorICAgIC8vIGJ1dCBhbHNvIHR1cm4gWFNMU3R5bGVTaGVl
dDo6c2hlZXRTdHJpbmcoKSBpbnRvIFhTTFN0eWxlU2hlZXQ6OnF1ZXJ5KCkgdGhhdCByZXR1cm5z
IGEgUVhtbFF1ZXJ5LgorCisgICAgbV9zaGVldFN0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4g
IW1fc2hlZXRTdHJpbmcuaXNFbXB0eSgpOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRD
aGlsZFNoZWV0cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBYU0xTdHls
ZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0OjpzZXRQYXJlbnRTdHlsZVNoZWV0
KFhTTFN0eWxlU2hlZXQqIHBhcmVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFhTTFN0eWxlU2hlZXQ6Om1hcmtBc1Byb2Nlc3NlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhT
TFQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmggYi9XZWJDb3JlL3ht
bC9YU0xUUHJvY2Vzc29yLmgKaW5kZXggNDVmNWNiMS4uZGM4ZTZkZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aApAQCAtMjgsOSArMjgsMTIgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCisjaWYgIVVTRShRWE1MUVVFUlkpCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVy
bmFscy5oPgogI2luY2x1ZGUgPGxpYnhzbHQvZG9jdW1lbnRzLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDEyICs2MSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCByZXNldCgpOwogCisjaWYg
IVVTRShRWE1MUVVFUlkpCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JGdW5jKHZvaWQq
IHVzZXJEYXRhLCB4bWxFcnJvciopOwogICAgICAgICBzdGF0aWMgdm9pZCBnZW5lcmljRXJyb3JG
dW5jKHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFyKiBtc2csIC4uLik7CiAKLSAgICBwdWJsaWM6
CiAgICAgICAgIC8vIE9ubHkgZm9yIGxpYlhTTFQgY2FsbGJhY2tzCiAgICAgICAgIFhTTFN0eWxl
U2hlZXQqIHhzbFN0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlc2hlZXQuZ2V0KCk7
IH0KKyNlbmRpZgogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFy
YW1ldGVyTWFwOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAKaW5kZXggNmIyYTBm
ZC4uMjAwYzU2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwCisrKyBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybVNvdXJjZS5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgogI2luY2x1ZGUgIlhTTFN0
eWxlU2hlZXQuaCIKICNpbmNsdWRlICJYU0xURXh0ZW5zaW9ucy5oIgpAQCAtMjQxLDggKzI0Miw4
IEBAIHN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJj
ZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKICAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAo
c291cmNlTm9kZSA9PSBvd25lckRvY3VtZW50LmdldCgpKTsKIAogICAgIHhtbERvY1B0ciBzb3Vy
Y2VEb2MgPSAwOwotICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQotICAgICAgICBzb3VyY2VEb2Mg
PSAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOworICAgIGlmIChz
b3VyY2VJc0RvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpKQorICAg
ICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJj
ZSgpLT5wbGF0Zm9ybVNvdXJjZSgpOwogICAgIGlmICghc291cmNlRG9jKSB7CiAgICAgICAgIHNv
dXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1lbnQtPmRv
Y0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCiAgICAgICAgICAgICBzb3VyY2VJ
c0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmcoKSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwIGIvV2ViQ29yZS94bWwv
WFNMVFByb2Nlc3NvclF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
OWZhODVhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNw
cApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBYU0wg
aW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpha3ViIFdpZWN6b3Jl
ayA8ZmF3MjE3QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFhT
TFQpCisKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJDb25zb2xlLmgi
CisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1Tb3VyY2UuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJtYXJrdXAu
aCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPHFhYnN0cmFjdG1lc3NhZ2Vo
YW5kbGVyLmg+CisjaW5jbHVkZSA8cWJ1ZmZlci5oPgorI2luY2x1ZGUgPHFzb3VyY2Vsb2NhdGlv
bi5oPgorI2luY2x1ZGUgPHF4bWxxdWVyeS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFhTTFRNZXNzYWdlSGFuZGxlciA6IHB1YmxpYyBRQWJzdHJhY3RNZXNzYWdlSGFuZGxlciB7
CisKK3B1YmxpYzoKKyAgICBYU0xUTWVzc2FnZUhhbmRsZXIoRG9jdW1lbnQqIGRvY3VtZW50ID0g
MCk7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZU1lc3NhZ2UoUXRNc2dUeXBlIHR5cGUsIGNvbnN0
IFFTdHJpbmcmIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFVcmwmIGlkZW50aWZpZXIsIGNvbnN0IFFTb3VyY2VMb2NhdGlvbiYgc291cmNlTG9jYXRp
b24pOworCitwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworfTsKKworWFNMVE1l
c3NhZ2VIYW5kbGVyOjpYU0xUTWVzc2FnZUhhbmRsZXIoRG9jdW1lbnQqIGRvY3VtZW50KQorICAg
IDogUUFic3RyYWN0TWVzc2FnZUhhbmRsZXIoKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
K3sKK30KKwordm9pZCBYU0xUTWVzc2FnZUhhbmRsZXI6OmhhbmRsZU1lc3NhZ2UoUXRNc2dUeXBl
IHR5cGUsIGNvbnN0IFFTdHJpbmcmIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwmIGlkZW50aWZpZXIsIGNvbnN0
IFFTb3VyY2VMb2NhdGlvbiYgc291cmNlTG9jYXRpb24pCit7CisgICAgaWYgKCFtX2RvY3VtZW50
LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBRdERlYnVnTXNnOgorICAgICAgICBsZXZlbCA9
IFRpcE1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRdFdhcm5pbmdNc2c6
CisgICAgICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBRdENyaXRpY2FsTXNnOgorICAgIGNhc2UgUXRGYXRhbE1zZzoKKyAgICAgICAgbGV2
ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgbGV2ZWwgPSBMb2dNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIENvbnNvbGUqIGNvbnNvbGUgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5kb21XaW5kb3coKS0+
Y29uc29sZSgpOworICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIGxldmVsLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZUxvY2F0aW9uLmxpbmUoKSwgc291cmNlTG9jYXRpb24udXJpKCkudG9TdHJpbmcoKSk7
Cit9CisKK2Jvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNl
Tm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVz
dWx0RW5jb2RpbmcpCit7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBSZWZQdHI8
WFNMU3R5bGVTaGVldD4gc3R5bGVzaGVldCA9IG1fc3R5bGVzaGVldDsKKyAgICBpZiAoIXN0eWxl
c2hlZXQgJiYgbV9zdHlsZXNoZWV0Um9vdE5vZGUpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1f
c3R5bGVzaGVldFJvb3ROb2RlLmdldCgpOworICAgICAgICBzdHlsZXNoZWV0ID0gWFNMU3R5bGVT
aGVldDo6Y3JlYXRlKG5vZGUtPnBhcmVudCgpID8gbm9kZS0+cGFyZW50KCkgOiBub2RlLCBub2Rl
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIHN0eWxlc2hlZXQtPnBhcnNl
U3RyaW5nKGNyZWF0ZU1hcmt1cChub2RlKSk7CisgICAgfQorCisgICAgaWYgKCFzdHlsZXNoZWV0
IHx8IHN0eWxlc2hlZXQtPnNoZWV0U3RyaW5nKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
c3VjY2VzczsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5v
ZGUtPmRvY3VtZW50KCk7CisgICAgYm9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUg
PT0gb3duZXJEb2N1bWVudC5nZXQoKSk7CisKKyAgICBRWG1sUXVlcnkgcXVlcnkoUVhtbFF1ZXJ5
OjpYU0xUMjApOworCisgICAgWFNMVE1lc3NhZ2VIYW5kbGVyIG1lc3NhZ2VIYW5kbGVyKG93bmVy
RG9jdW1lbnQuZ2V0KCkpOworICAgIHF1ZXJ5LnNldE1lc3NhZ2VIYW5kbGVyKCZtZXNzYWdlSGFu
ZGxlcik7CisKKyAgICBYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1fcGFyYW1ldGVycy5lbmQoKTsKKyAgICBmb3IgKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1h
cDo6aXRlcmF0b3IgaXQgPSBtX3BhcmFtZXRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBxdWVyeS5iaW5kVmFyaWFibGUoUVN0cmluZyhpdC0+Zmlyc3QpLCBRWG1sSXRlbShR
VmFyaWFudChpdC0+c2Vjb25kKSkpOworCisgICAgUVN0cmluZyBzb3VyY2U7CisgICAgaWYgKHNv
dXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCisgICAg
ICAgIHNvdXJjZSA9IG93bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpLT5wbGF0Zm9ybVNv
dXJjZSgpOworICAgIGlmICghc291cmNlSXNEb2N1bWVudCB8fCBzb3VyY2UuaXNFbXB0eSgpKQor
ICAgICAgICBzb3VyY2UgPSBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSk7CisKKyAgICBRQnVmZmVy
IGlucHV0QnVmZmVyOworICAgIFFCdWZmZXIgc3R5bGVTaGVldEJ1ZmZlcjsKKyAgICBRQnVmZmVy
IG91dHB1dEJ1ZmZlcjsKKworICAgIGlucHV0QnVmZmVyLnNldERhdGEoc291cmNlLnRvVXRmOCgp
KTsKKyAgICBzdHlsZVNoZWV0QnVmZmVyLnNldERhdGEoUVN0cmluZyhzdHlsZXNoZWV0LT5zaGVl
dFN0cmluZygpKS50b1V0ZjgoKSk7CisKKyAgICBpbnB1dEJ1ZmZlci5vcGVuKFFJT0RldmljZTo6
UmVhZE9ubHkpOworICAgIHN0eWxlU2hlZXRCdWZmZXIub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5
KTsKKyAgICBvdXRwdXRCdWZmZXIub3BlbihRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CisKKyAgICBx
dWVyeS5zZXRGb2N1cygmaW5wdXRCdWZmZXIpOworICAgIHF1ZXJ5LnNldFF1ZXJ5KCZzdHlsZVNo
ZWV0QnVmZmVyLCBRVXJsKHN0eWxlc2hlZXQtPmhyZWYoKSkpOworICAgIHN1Y2Nlc3MgPSBxdWVy
eS5ldmFsdWF0ZVRvKCZvdXRwdXRCdWZmZXIpOworICAgIG91dHB1dEJ1ZmZlci5yZXNldCgpOwor
ICAgIHJlc3VsdFN0cmluZyA9IFFTdHJpbmc6OmZyb21VdGY4KG91dHB1dEJ1ZmZlci5yZWFkQWxs
KCkpLnRyaW1tZWQoKTsKKworICAgIGlmIChtX3N0eWxlc2hlZXQpIHsKKyAgICAgICAgbV9zdHls
ZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOworICAgICAgICBtX3N0eWxlc2hlZXQgPSAwOworICAg
IH0KKworICAgIHJldHVybiBzdWNjZXNzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKLS0gCjEuNi40LjEKCg==
</data>
<flag name="review"
          id="20525"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39887</attachid>
            <date>2009-09-21 15:41:03 -0700</date>
            <delta_ts>2009-09-28 07:50:39 -0700</delta_ts>
            <desc>Move the libxslt specific part of XSLTProcessor to a separate file.</desc>
            <filename>Move-the-libxslt-specific-part.patch</filename>
            <type>text/plain</type>
            <size>62843</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDktMjEgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW92ZSB0aGUgbGlieHNsdCBzcGVjaWZpYyBwYXJ0IG9mIFhTTFRQcm9jZXNzb3IgdG8gYSBzZXBh
cmF0ZSBmaWxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgzMDMKKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3IgYWRkaW5nIFhTTFQgc3VwcG9y
dCB3aXRoIFF0WG1sUGF0dGVybnMgdG8gdGhlIFF0CisgICAgICAgIHBvcnQsIG1vdmUgdGhlIGxp
YnhzbHQgcGFydCBvZiB0aGUgWFNMVFByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbiBpbnRvCisgICAg
ICAgIGFub3RoZXIgZmlsZSBhbmQgbGVhdmUgdGhlIHBhcnQgdGhhdCBjYW4gYmUgcmV1c2VkIGFu
ZCBzaGFyZWQuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBmaXggc29tZSBjb2Rpbmcgc3R5bGUg
aXNzdWVzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291
cmNlcy5ia2w6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUmVtb3ZlIHRy
YWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9t
U291cmNlKTogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2VzLgorICAgICAgICAoV2ViQ29yZTo6
WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFnbWVudCk6IFJlbW92ZSB0cmFpbGluZyB3aGl0
ZXNwYWNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnJlc2V0KTogTW92ZWQg
b3V0IG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29y
Lmg6IEZpeCBpbmRlbnRhdGlvbi4KKyAgICAgICAgKiB4bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJv
ckZ1bmMpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OnBhcnNlRXJy
b3JGdW5jKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb2NMb2FkZXJGdW5jKTogTW92ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRYU0xUTG9hZENhbGxCYWNrKTogTW92ZWQuCisgICAgICAg
IChXZWJDb3JlOjp3cml0ZVRvVmVjdG9yKTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXZl
UmVzdWx0VG9TdHJpbmcpOiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhzbHRQYXJhbUFycmF5
RnJvbVBhcmFtZXRlck1hcCk6IE1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6ZnJlZVhzbHRQYXJh
bUFycmF5KTogTW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp4c2x0U3R5bGVzaGVldFBvaW50ZXIp
OiBNb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OnhtbERvY1B0ckZyb21Ob2RlKTogTW92ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyZXN1bHRNSU1FVHlwZSk6IE1vdmVkLgorICAgICAgICAoV2ViQ29y
ZTo6WFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcpOiBNb3ZlZC4KKwogMjAwOS0wOS0y
MSAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ4
NjA0KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjQwMiw2
ICsyNDAyLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YU0xURXh0ZW5z
aW9ucy5jcHAgXAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNpb25zLmggXAogCVdlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3IuY3BwIFwKKwlXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAgXAogCVdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaCBcCiAJV2ViQ29yZS94bWwvWFNMVFVu
aWNvZGVTb3J0LmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmgKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDUzLDYgKzM0NTMsNyBAQAogICAgICAgICAgICAgJ3htbC9YU0xURXh0ZW5zaW9ucy5jcHAn
LAogICAgICAgICAgICAgJ3htbC9YU0xURXh0ZW5zaW9ucy5oJywKICAgICAgICAgICAgICd4bWwv
WFNMVFByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAgJ3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xUUHJvY2Vzc29yLmgnLAogICAgICAgICAgICAg
J3htbC9YU0xUVW5pY29kZVNvcnQuY3BwJywKICAgICAgICAgICAgICd4bWwvWFNMVFVuaWNvZGVT
b3J0LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDQ4NjA0KQorKysgV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2
ZXJzaW9uPSIxLjAiID8+Ci08IS0tIAorPCEtLQogCiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4g
T2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC04LDEzICs4LDEzIEBAIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGEKIGFyZSBtZXQ6CiAKIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKQEAgLTUxLDcgKzUxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZp
bGVzIG5lZQogICAgICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAK
ICAgICAgICAgYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAogICAgIDwvc2V0PgotICAg
IAorCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0pTIj4KICAgICAg
ICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0F0
dHJDdXN0b20uY3BwCkBAIC00OTksNyArNDk5LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBs
aXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBkb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3Bw
CiAgICAgICAgIGRvbS9TY3JpcHRFbGVtZW50LmNwcAogICAgICAgICBkb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKLSAgICAgICAgZG9tL1NlbGVjdEVsZW1lbnQuY3BwIAorICAgICAgICBk
b20vU2VsZWN0RWxlbWVudC5jcHAKICAgICAgICAgZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCiAg
ICAgICAgIGRvbS9TdGF0aWNOb2RlTGlzdC5jcHAKICAgICAgICAgZG9tL1N0eWxlRWxlbWVudC5j
cHAKQEAgLTU2OCw3ICs1NjgsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmls
ZXMgbmVlCiAgICAgICAgIGVkaXRpbmcvbWFya3VwLmNwcAogICAgICAgICBlZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCiAgICAgPC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFy
PSJXRUJDT1JFX1NPVVJDRVNfSElTVE9SWSI+CiAgICAgICAgIGhpc3RvcnkvQmFja0ZvcndhcmRM
aXN0LmNwcAogICAgICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtNTc2LDcgKzU3Niw3
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwCiAgICAgICAgIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCiAgICAg
PC9zZXQ+Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
SFRNTCI+CiAgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAogICAgICAgICBo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcApAQCAtNzM2LDcgKzczNiw3IEBAIFRoaXMgZmls
ZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuY3BwCiAgICAgICAgIGxvYWRlci9sb2FkZXIuY3BwCiAgICAgPC9zZXQ+
Ci0gICAgCisKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSUNPTiI+
CiAgICAgICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKICAgICAgICAgbG9hZGVyL2lj
b24vSWNvbkxvYWRlci5jcHAKQEAgLTEwODcsNiArMTA4Nyw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgeG1sL1hTTFRFeHRlbnNpb25zLmNwcAog
ICAgICAgICB4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAogICAgICAgICB4bWwvWFNMVFByb2Nlc3Nv
ci5jcHAKKyAgICAgICAgeG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAogICAgIDwvc2V0Pgog
CiA8L21ha2VmaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShy
ZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNzg0LDYgKzIzNzg0LDEwIEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYU0xUUHJvY2Vzc29yTGli
eHNsdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlx4bWxcWFNMVFByb2Nlc3Nvci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0ODYw
NCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzE5LDYgKzIzMTksNyBAQAogCQk5M0YxOUFGRjA4MjQ1RTU5MDAxRTlBQkMg
LyogQ2xpcGJvYXJkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5tbSAqLzsg
fTsKIAkJOTNGMTlCMDMwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFN0eWxlU2hlZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwNkYyNDkwNkQxOEE3
RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXQuY3BwICovOyB9OwogCQk5M0YxOUIwNDA4MjQ1RTU5
MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA2RjI0QjA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nl
c3Nvci5jcHAgKi87IH07CisJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vz
c29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzA2RjI0RDA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
ICovOyB9OwogCQk5M0YxOUIwNzA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZVZpZXcubSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFODU2MDUxMDcwMUY5
MTEwMDIzOTc2OSAvKiBXZWJDb3JlVmlldy5tICovOyB9OwogCQk5M0YxOUIwODA4MjQ1RTU5MDAx
RTlBQkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQzJBNTA3MDI2Mjk4MDBBRjY0MkMgLyogV2ViRGFzaGJv
YXJkUmVnaW9uLm0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tY2FzdC1x
dWFsIjsgfTsgfTsKIAkJOTNGMTlCMTMwODI0NUU1OTAwMUU5QUJDIC8qIEFwcGxpY2F0aW9uU2Vy
dmljZXMuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjVDMjg2OTMwMjg0NkRDRDAxODYzNUNBIC8qIEFwcGxpY2F0aW9uU2VydmljZXMu
ZnJhbWV3b3JrICovOyB9OwpAQCAtOTA2OSw2ICs5MDcwLDcgQEAKIAkJQkMwNkYyNEEwNkQxOEE3
RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEIwNkQxOEE3
RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFByb2Nlc3Nvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzA2RjI0
QzA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUUHJvY2Vzc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlCQzA2RjI0
RDA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJQkMwNzNCQTkwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRDb252ZXJzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMEIzNkExMENEM0M2N0MwMEFDN0VCNSAv
KiBDb25zb2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25z
b2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwQjM2QTIwQ0QzQzY3QzAw
QUM3RUI1IC8qIENvbnNvbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bnNvbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODA5LDYgKzE0ODExLDcg
QEAKIAkJCQlFMUYxRTgyRTBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lvbnMuaCAqLywK
IAkJCQlCQzA2RjI0QjA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3Nvci5jcHAgKi8sCiAJ
CQkJQkMwNkYyNEMwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFRQcm9jZXNzb3IuaCAqLywKKwkJCQlC
QzA2RjI0RDA2RDE4QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwICovLAog
CQkJCUJDRUZFMURDMERDQTVDRkQwMDczOTIxOSAvKiBYU0xUUHJvY2Vzc29yLmlkbCAqLywKIAkJ
CQlFMUJFNTEyQjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLywKIAkJ
CQlFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi8sCkBAIC0x
OTg5NCw2ICsxOTg5Nyw3IEBACiAJCQkJOTNGMTlCMDMwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFN0
eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFGMUU4MkYwQzNDMkJCOTAwNkRCMzkx
IC8qIFhTTFRFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QjA0MDgyNDVF
NTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRjE5
QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjUwMjVDMTAyQkE5MDEwMDY2RjM5QSAvKiBE
T01NZWRpYS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlz
aW9uIDQ4NjA0KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiw3IEBACiAKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCiAKLSNp
bmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CkBAIC0zOCwxNjYgKzM1LDE3IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFRva2VuaXplci5oIiAvLyBmb3IgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJYU0xU
RXh0ZW5zaW9ucy5oIgotI2luY2x1ZGUgIlhTTFRVbmljb2RlU29ydC5oIgogI2luY2x1ZGUgImxv
YWRlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGxpYnhzbHQvaW1wb3J0cy5o
PgotI2luY2x1ZGUgPGxpYnhzbHQvdmFyaWFibGVzLmg+Ci0jaW5jbHVkZSA8bGlieHNsdC94c2x0
dXRpbHMuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKLSNp
bmNsdWRlICJTb2Z0TGlua2luZy5oIgotCi1TT0ZUX0xJTktfTElCUkFSWShsaWJ4c2x0KTsKLVNP
RlRfTElOSyhsaWJ4c2x0LCB4c2x0RnJlZVN0eWxlc2hlZXQsIHZvaWQsICh4c2x0U3R5bGVzaGVl
dFB0ciBzaGVldCksIChzaGVldCkpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVUcmFuc2Zv
cm1Db250ZXh0LCB2b2lkLCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCksIChjdHh0KSkK
LVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV3VHJhbnNmb3JtQ29udGV4dCwgeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSwgeG1sRG9jUHRyIGRvYyksIChz
dHlsZSwgZG9jKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlciwg
eG1sRG9jUHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0ciBkb2MsIGNvbnN0
IGNoYXIqKiBwYXJhbXMsIGNvbnN0IGNoYXIqIG91dHB1dCwgRklMRSogcHJvZmlsZSwgeHNsdFRy
YW5zZm9ybUNvbnRleHRQdHIgdXNlckN0eHQpLCAoc3R5bGUsIGRvYywgcGFyYW1zLCBvdXRwdXQs
IHByb2ZpbGUsIHVzZXJDdHh0KSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0UXVvdGVVc2VyUGFy
YW1zLCBpbnQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCBjb25zdCBjaGFyKiogcGFy
YW1zKSwgKGN0eHQsIHBhcmFtcykpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdFNldEN0eHRTb3J0
RnVuYywgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQsIHhzbHRTb3J0RnVuYyBo
YW5kbGVyKSwgKGN0eHQsIGhhbmRsZXIpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRTZXRMb2Fk
ZXJGdW5jLCB2b2lkLCAoeHNsdERvY0xvYWRlckZ1bmMgZiksIChmKSkKLVNPRlRfTElOSyhsaWJ4
c2x0LCB4c2x0U2F2ZVJlc3VsdFRvLCBpbnQsICh4bWxPdXRwdXRCdWZmZXJQdHIgYnVmLCB4bWxE
b2NQdHIgcmVzdWx0LCB4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChidWYsIHJlc3VsdCwgc3R5
bGUpKQotU09GVF9MSU5LKGxpYnhzbHQsIHhzbHROZXh0SW1wb3J0LCB4c2x0U3R5bGVzaGVldFB0
ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlKSwgKHN0eWxlKSkKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgWFNMVFByb2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyh2b2lk
KiwgY29uc3QgY2hhciosIC4uLikKLXsKLSAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvIHNv
bWV0aGluZyB3aXRoIHRoaXMgZXJyb3IgbWVzc2FnZS4KLX0KLSAgICAKLXZvaWQgWFNMVFByb2Nl
c3Nvcjo6cGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9yKiBlcnJvcikKLXsK
LSAgICBDb25zb2xlKiBjb25zb2xlID0gc3RhdGljX2Nhc3Q8Q29uc29sZSo+KHVzZXJEYXRhKTsK
LSAgICBpZiAoIWNvbnNvbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1lc3NhZ2VMZXZlbCBs
ZXZlbDsKLSAgICBzd2l0Y2ggKGVycm9yLT5sZXZlbCkgewotICAgICAgICBjYXNlIFhNTF9FUlJf
Tk9ORToKLSAgICAgICAgICAgIGxldmVsID0gVGlwTWVzc2FnZUxldmVsOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9XQVJOSU5HOgotICAgICAgICAgICAgbGV2ZWwg
PSBXYXJuaW5nTWVzc2FnZUxldmVsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
WE1MX0VSUl9FUlJPUjoKLSAgICAgICAgY2FzZSBYTUxfRVJSX0ZBVEFMOgotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgbGV2ZWwgPSBFcnJvck1lc3NhZ2VMZXZlbDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVy
cm9yLT5maWxlKTsKLX0KLQotLy8gRklYTUU6IFRoZXJlIHNlZW1zIHRvIGJlIG5vIHdheSB0byBj
b250cm9sIHRoZSBjdHh0IHBvaW50ZXIgZm9yIGxvYWRpbmcgaGVyZSwgdGh1cyB3ZSBoYXZlIGds
b2JhbHMuCi1zdGF0aWMgWFNMVFByb2Nlc3NvciogZ2xvYmFsUHJvY2Vzc29yID0gMDsKLXN0YXRp
YyBEb2NMb2FkZXIqIGdsb2JhbERvY0xvYWRlciA9IDA7Ci1zdGF0aWMgeG1sRG9jUHRyIGRvY0xv
YWRlckZ1bmMoY29uc3QgeG1sQ2hhciogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeG1sRGljdFB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog
Y3R4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhzbHRMb2FkVHlwZSB0
eXBlKQotewotICAgIGlmICghZ2xvYmFsUHJvY2Vzc29yKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6
IHsKLSAgICAgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRy
YW5zZm9ybUNvbnRleHRQdHIpY3R4dDsKLSAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxO
b2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKLSAgICAg
ICAgICAgIEtVUkwgdXJsKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihiYXNlKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVyaSkpOwot
ICAgICAgICAgICAgeG1sRnJlZShiYXNlKTsKLSAgICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJy
b3I7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgICAgICAgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9
IGdsb2JhbERvY0xvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdEFs
bG93ZWQpIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRl
cigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFs
cywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0QWxsb3dl
ZCA9IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
cmVzcG9uc2UudXJsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFyZXF1ZXN0
QWxsb3dlZCkgewotICAgICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAgICAgICAg
ICBnbG9iYWxEb2NMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBDb25zb2xlKiBjb25zb2xlID0gMDsKLSAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+b3du
ZXJEb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGNvbnNvbGUgPSBmcmFtZS0+
ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKLSAgICAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJv
ckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMpOwotICAgICAgICAg
ICAgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmlj
RXJyb3JGdW5jKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lm
eSBhbiBlbmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cwotICAg
ICAgICAgICAgLy8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgot
ICAgICAgICAgICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpLCAoY29uc3QgY2hhciopdXJpLCAwLCBvcHRpb25zKTsKLQotICAgICAgICAgICAg
eG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygwLCAwKTsKLSAgICAgICAgICAgIHhtbFNldEdlbmVy
aWNFcnJvckZ1bmMoMCwgMCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBkb2M7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBYU0xUX0xPQURfU1RZTEVTSEVFVDoKLSAgICAgICAgICAgIHJldHVybiBn
bG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291
cmNlKCgoeHNsdFN0eWxlc2hlZXRQdHIpY3R4dCktPmRvYywgdXJpKTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIHNldFhTTFRMb2FkQ2FsbEJhY2soeHNsdERvY0xvYWRlckZ1bmMg
ZnVuYywgWFNMVFByb2Nlc3NvciogcHJvY2Vzc29yLCBEb2NMb2FkZXIqIGxvYWRlcikKLXsKLSAg
ICB4c2x0U2V0TG9hZGVyRnVuYyhmdW5jKTsKLSAgICBnbG9iYWxQcm9jZXNzb3IgPSBwcm9jZXNz
b3I7Ci0gICAgZ2xvYmFsRG9jTG9hZGVyID0gbG9hZGVyOwotfQotCi1zdGF0aWMgaW50IHdyaXRl
VG9WZWN0b3Iodm9pZCogY29udGV4dCwgY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVuKQotewot
ICAgIFZlY3RvcjxVQ2hhcj4mIHJlc3VsdE91dHB1dCA9ICpzdGF0aWNfY2FzdDxWZWN0b3I8VUNo
YXI+Kj4oY29udGV4dCk7Ci0gICAgU3RyaW5nIGRlY29kZWRDaHVuayA9IFN0cmluZzo6ZnJvbVVU
RjgoYnVmZmVyLCBsZW4pOwotICAgIHJlc3VsdE91dHB1dC5hcHBlbmQoZGVjb2RlZENodW5rLmNo
YXJhY3RlcnMoKSwgZGVjb2RlZENodW5rLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gbGVuOwotfQot
Ci1zdGF0aWMgYm9vbCBzYXZlUmVzdWx0VG9TdHJpbmcoeG1sRG9jUHRyIHJlc3VsdERvYywgeHNs
dFN0eWxlc2hlZXRQdHIgc2hlZXQsIFN0cmluZyYgcmVzdWx0U3RyaW5nKQotewotICAgIHhtbE91
dHB1dEJ1ZmZlclB0ciBvdXRwdXRCdWYgPSB4bWxBbGxvY091dHB1dEJ1ZmZlcigwKTsKLSAgICBp
ZiAoIW91dHB1dEJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFVDaGFy
PiByZXN1bHRWZWN0b3I7Ci0gICAgb3V0cHV0QnVmLT5jb250ZXh0ID0gJnJlc3VsdFZlY3RvcjsK
LSAgICBvdXRwdXRCdWYtPndyaXRlY2FsbGJhY2sgPSB3cml0ZVRvVmVjdG9yOwotICAgIAotICAg
IGludCByZXR2YWwgPSB4c2x0U2F2ZVJlc3VsdFRvKG91dHB1dEJ1ZiwgcmVzdWx0RG9jLCBzaGVl
dCk7Ci0gICAgeG1sT3V0cHV0QnVmZmVyQ2xvc2Uob3V0cHV0QnVmKTsKLSAgICBpZiAocmV0dmFs
IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV29ya2Fyb3VuZCBmb3IgPGh0
dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NTY2OD46IGxpYnhzbHQg
YXBwZW5kcyBhbiBleHRyYSBsaW5lIGZlZWQgdG8gdGhlIHJlc3VsdC4KLSAgICBpZiAocmVzdWx0
VmVjdG9yLnNpemUoKSA+IDAgJiYgcmVzdWx0VmVjdG9yW3Jlc3VsdFZlY3Rvci5zaXplKCkgLSAx
XSA9PSAnXG4nKQotICAgICAgICByZXN1bHRWZWN0b3IucmVtb3ZlTGFzdCgpOwotCi0gICAgcmVz
dWx0U3RyaW5nID0gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9YSFRNTERv
Y3VtZW50U3RyaW5nKFN0cmluZyYgdGV4dCkKIHsKICAgICAvLyBNb2RpZnkgdGhlIG91dHB1dCBz
byB0aGF0IGl0IGlzIGEgd2VsbC1mb3JtZWQgWEhUTUwgZG9jdW1lbnQgd2l0aCBhIDxwcmU+IHRh
ZyBlbmNsb3NpbmcgdGhlIHRleHQuCkBAIC0yMTMsMzggKzYxLDYgQEAgc3RhdGljIGlubGluZSB2
b2lkIHRyYW5zZm9ybVRleHRTdHJpbmdUbwogICAgICAgICAiPC9odG1sPlxuIjsKIH0KIAotc3Rh
dGljIGNvbnN0IGNoYXIqKiB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAoWFNMVFByb2Nl
c3Nvcjo6UGFyYW1ldGVyTWFwJiBwYXJhbWV0ZXJzKQotewotICAgIGlmIChwYXJhbWV0ZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBjaGFyKiogcGFyYW1ldGVy
QXJyYXkgPSAoY29uc3QgY2hhcioqKWZhc3RNYWxsb2MoKChwYXJhbWV0ZXJzLnNpemUoKSAqIDIp
ICsgMSkgKiBzaXplb2YoY2hhciopKTsKLQotICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1h
cDo6aXRlcmF0b3IgZW5kID0gcGFyYW1ldGVycy5lbmQoKTsKLSAgICB1bnNpZ25lZCBpbmRleCA9
IDA7Ci0gICAgZm9yIChYU0xUUHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0g
cGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgcGFyYW1ldGVy
QXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQtPmZpcnN0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9IHN0cmR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRh
KCkpOwotICAgIH0KLSAgICBwYXJhbWV0ZXJBcnJheVtpbmRleF0gPSAwOwotCi0gICAgcmV0dXJu
IHBhcmFtZXRlckFycmF5OwotfQotCi1zdGF0aWMgdm9pZCBmcmVlWHNsdFBhcmFtQXJyYXkoY29u
c3QgY2hhcioqIHBhcmFtcykKLXsKLSAgICBjb25zdCBjaGFyKiogdGVtcCA9IHBhcmFtczsKLSAg
ICBpZiAoIXBhcmFtcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdoaWxlICgqdGVtcCkg
ewotICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOyAvLyBzdHJkdXAgcmV0dXJucyBtYWxs
b2MnZCBibG9ja3MsIHNvIHdlIGhhdmUgdG8gdXNlIGZyZWUoKSBoZXJlCi0gICAgICAgIGZyZWUo
KHZvaWQqKSoodGVtcCsrKSk7Ci0gICAgfQotICAgIGZhc3RGcmVlKHBhcmFtcyk7Ci19Ci0KLQog
UGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLAogICAgIGNvbnN0IFN0cmluZyYgc291cmNl
RW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUs
IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTI1OCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IFhTTFRQcm9jZXNzb3I6OmNyZWEKICAgICAgICAgdHJhbnNmb3JtVGV4dFN0cmluZ1RvWEhUTUxE
b2N1bWVudFN0cmluZyhkb2N1bWVudFNvdXJjZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3Vs
dCA9IG93bmVyRG9jdW1lbnQtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KHNvdXJj
ZU1JTUVUeXBlLCBmcmFtZSwgZmFsc2UpOwotICAgIAorCiAgICAgLy8gQmVmb3JlIHBhcnNpbmcs
IHdlIG5lZWQgdG8gc2F2ZSAmIGRldGFjaCB0aGUgb2xkIGRvY3VtZW50IGFuZCBnZXQgdGhlIG5l
dyBkb2N1bWVudAogICAgIC8vIGluIHBsYWNlLiBXZSBoYXZlIHRvIGRvIHRoaXMgb25seSBpZiB3
ZSdyZSByZW5kZXJpbmcgdGhlIHJlc3VsdCBkb2N1bWVudC4KICAgICBpZiAoZnJhbWUpIHsKQEAg
LTI2NywxNSArODMsMTUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3Jl
YQogICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KGZyYW1lLT5kb2N1
bWVudCgpKTsKICAgICAgICAgZnJhbWUtPnNldERvY3VtZW50KHJlc3VsdCk7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCiAgICAgICAgIHJlc3VsdC0+c2V0VVJMKG93
bmVyRG9jdW1lbnQtPnVybCgpKTsKICAgICByZXN1bHQtPm9wZW4oKTsKLSAgICAKKwogICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKHNvdXJjZU1JTUVUeXBlKTsKICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhzb3VyY2VF
bmNvZGluZy5pc0VtcHR5KCkgPyBVVEY4RW5jb2RpbmcoKSA6IFRleHRFbmNvZGluZyhzb3VyY2VF
bmNvZGluZyksIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbVhNTEhlYWRlcik7CiAg
ICAgcmVzdWx0LT5zZXREZWNvZGVyKGRlY29kZXIucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIHJl
c3VsdC0+d3JpdGUoZG9jdW1lbnRTb3VyY2UpOwogICAgIHJlc3VsdC0+ZmluaXNoUGFyc2luZygp
OwogICAgIHJlc3VsdC0+Y2xvc2UoKTsKQEAgLTI4Niw3ICsxMDIsNyBAQCBQYXNzUmVmUHRyPERv
Y3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhCiBzdGF0aWMgaW5saW5lIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VT
dHJpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2Mp
CiB7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFn
bWVudDo6Y3JlYXRlKG91dHB1dERvYyk7Ci0gICAgCisKICAgICBpZiAoc291cmNlTUlNRVR5cGUg
PT0gInRleHQvaHRtbCIpCiAgICAgICAgIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQoc291cmNl
U3RyaW5nLCBmcmFnbWVudC5nZXQoKSk7CiAgICAgZWxzZSBpZiAoc291cmNlTUlNRVR5cGUgPT0g
InRleHQvcGxhaW4iKQpAQCAtMjk2LDExOCArMTEyLDEwIEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGMKICAgICAgICAgaWYgKCFzdWNjZXNzZnVsUGFyc2UpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
dG8gbWVzcyB3aXRoIFVSTHMgaGVyZT8KLSAgICAgICAgCi0gICAgcmV0dXJuIGZyYWdtZW50Owot
fQotCi1zdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVyKFJlZlB0
cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5bGVzaGVldFJvb3RO
b2RlKQotewotICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9vdE5vZGUp
IHsKLSAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0ZShzdHls
ZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6
IHN0eWxlc2hlZXRSb290Tm9kZSwKLSAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9kZS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJz
ZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7Ci0gICAgfQotICAgIAot
ICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAhY2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQt
PmNvbXBpbGVTdHlsZVNoZWV0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERv
Y1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKLXsKLSAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgp
OwotICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1l
bnQuZ2V0KCkpOwotICAgIAotICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOwotICAgIGlmIChz
b3VyY2VJc0RvY3VtZW50KQotICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVyRG9j
dW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOwotICAgIGlmICghc291cmNlRG9jKSB7Ci0gICAgICAg
IHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1lbnQt
PmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCi0gICAgICAgICAgICBzb3Vy
Y2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmcoKSk7
Ci0gICAgICAgIHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7Ci0gICAgfQotICAgIHJl
dHVybiBzb3VyY2VEb2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHJlc3VsdE1JTUVUeXBl
KHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KQotewotICAgIC8v
IFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRl
YWwgd2l0aDoKLSAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1bWVudCksIFhNTCAoY3Jl
YXRlIGFuIFhNTCBkb2N1bWVudCksCi0gICAgLy8gYW5kIHRleHQgKHdyYXAgaW4gYSA8cHJlPiBh
bmQgY3JlYXRlIGFuIFhNTCBkb2N1bWVudCkuCi0KLSAgICBjb25zdCB4bWxDaGFyKiByZXN1bHRU
eXBlID0gMDsKLSAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5cGUsIHNoZWV0LCBtZXRo
b2QpOwotICAgIGlmIChyZXN1bHRUeXBlID09IDAgJiYgcmVzdWx0RG9jLT50eXBlID09IFhNTF9I
VE1MX0RPQ1VNRU5UX05PREUpCi0gICAgICAgIHJlc3VsdFR5cGUgPSAoY29uc3QgeG1sQ2hhciop
Imh0bWwiOwotICAgIAotICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1s
Q2hhciopImh0bWwiKSkKLSAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOwotICAgIGVsc2UgaWYg
KHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikidGV4dCIpKQotICAgICAg
ICByZXR1cm4gInRleHQvcGxhaW4iOwotICAgICAgICAKLSAgICByZXR1cm4gImFwcGxpY2F0aW9u
L3htbCI7Ci19Ci0KLWJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSog
c291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmlu
ZyYgcmVzdWx0RW5jb2RpbmcpCi17Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50
ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBzZXRYU0xUTG9hZENhbGxCYWNr
KGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpKTsKLSAgICB4
c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hl
ZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKLSAgICBpZiAoIXNoZWV0KSB7Ci0gICAg
ICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOwogCi0gICAgeG1sQ2hh
ciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7Ci0gICAgaWYgKCFvcmlnTWV0aG9kICYmIG1p
bWVUeXBlID09ICJ0ZXh0L2h0bWwiKQotICAgICAgICBzaGVldC0+bWV0aG9kID0gKHhtbENoYXIq
KSJodG1sIjsKLQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkRnJl
ZVNvdXJjZURvYyA9IGZhbHNlOwotICAgIGlmICh4bWxEb2NQdHIgc291cmNlRG9jID0geG1sRG9j
UHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykpIHsKLSAgICAgICAg
Ly8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcgdGhlIHJlc3VsdCBh
cyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRvY3VtZW50cywgCi0g
ICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgaW1tZWRp
YXRlbHkgcGFyc2VkLgotICAgICAgICBzaGVldC0+b21pdFhtbERlY2xhcmF0aW9uID0gdHJ1ZTsK
LQotICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zvcm1Db250ZXh0ID0geHNs
dE5ld1RyYW5zZm9ybUNvbnRleHQoc2hlZXQsIHNvdXJjZURvYyk7Ci0gICAgICAgIHJlZ2lzdGVy
WFNMVEV4dGVuc2lvbnModHJhbnNmb3JtQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3PjogWFNMVCBwcm9jZXNzb3IgPHhz
bDpzb3J0PiBhbGdvcml0aG0gb25seSBjb21wYXJlcyBieSBjb2RlIHBvaW50Ci0gICAgICAgIHhz
bHRTZXRDdHh0U29ydEZ1bmModHJhbnNmb3JtQ29udGV4dCwgeHNsdFVuaWNvZGVTb3J0RnVuY3Rp
b24pOwotCi0gICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBsaWJ4
c2x0LiAKLSAgICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEuMS4x
Mywgc28gb25jZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgaWYg
KHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKLSAgICAgICAgICAgdHJhbnNm
b3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOwotCi0gICAgICAgIGNv
bnN0IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9wYXJh
bWV0ZXJzKTsKLSAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0LCBw
YXJhbXMpOwotICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVzaGVl
dFVzZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7Ci0gICAg
ICAgIAotICAgICAgICB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQodHJhbnNmb3JtQ29udGV4dCk7
ICAgICAgICAKLSAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFtcyk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoc2hvdWxkRnJlZVNvdXJjZURvYykKLSAgICAgICAgICAgIHhtbEZyZWVEb2Mo
c291cmNlRG9jKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzdWNjZXNzID0gc2F2ZVJlc3VsdFRv
U3RyaW5nKHJlc3VsdERvYywgc2hlZXQsIHJlc3VsdFN0cmluZykpIHsKLSAgICAgICAgICAgIG1p
bWVUeXBlID0gcmVzdWx0TUlNRVR5cGUocmVzdWx0RG9jLCBzaGVldCk7Ci0gICAgICAgICAgICBy
ZXN1bHRFbmNvZGluZyA9IChjaGFyKilyZXN1bHREb2MtPmVuY29kaW5nOwotICAgICAgICB9Ci0g
ICAgICAgIHhtbEZyZWVEb2MocmVzdWx0RG9jKTsKLSAgICB9Ci0gICAgCi0gICAgc2hlZXQtPm1l
dGhvZCA9IG9yaWdNZXRob2Q7Ci0gICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKLSAg
ICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOwotICAgIG1fc3R5bGVzaGVldCA9IDA7CisgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVyZT8KIAotICAgIHJldHVy
biBzdWNjZXNzOworICAgIHJldHVybiBmcmFnbWVudDsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVu
dD4gWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2VOb2RlKQpA
QCAtNDI5LDcgKzEzNyw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gWFNMVFByb2Nl
c3MKICAgICAvLyBJZiB0aGUgb3V0cHV0IGRvY3VtZW50IGlzIEhUTUwsIGRlZmF1bHQgdG8gSFRN
TCBtZXRob2QuCiAgICAgaWYgKG91dHB1dERvYy0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAg
cmVzdWx0TUlNRVR5cGUgPSAidGV4dC9odG1sIjsKLSAgICAKKwogICAgIGlmICghdHJhbnNmb3Jt
VG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0
RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0TUlNRVR5cGUsIG91dHB1dERvYyk7CkBAIC00
NTUsNiArMTYzLDEzIEBAIHZvaWQgWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1ldGVyKGNvbnMK
ICAgICBtX3BhcmFtZXRlcnMucmVtb3ZlKGxvY2FsTmFtZSk7CiB9CiAKK3ZvaWQgWFNMVFByb2Nl
c3Nvcjo6cmVzZXQoKQoreworICAgIG1fc3R5bGVzaGVldC5jbGVhcigpOworICAgIG1fc3R5bGVz
aGVldFJvb3ROb2RlLmNsZWFyKCk7CisgICAgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQpJbmRleDogV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQ
cm9jZXNzb3IuaAkocmV2aXNpb24gNDg2MDQpCisrKyBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDQ2ICszNCw0NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZyYW1lOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVudEZyYWdt
ZW50OwotCi1jbGFzcyBYU0xUUHJvY2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNMVFByb2Nl
c3Nvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFRQcm9jZXNzb3I+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xUUHJvY2Vzc29yKTsgfQotCi0gICAgdm9p
ZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkg
eyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9Ci0gICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmlu
ZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBj
cmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIE5vZGUqIHNv
dXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7Ci0gICAgCi0gICAgLy8gRE9NIG1ldGhvZHMKLSAgICB2
b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBzdHlsZSkgeyBtX3N0eWxlc2hl
ZXRSb290Tm9kZSA9IHN0eWxlOyB9Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0
cmFuc2Zvcm1Ub0ZyYWdtZW50KE5vZGUqIHNvdXJjZSwgRG9jdW1lbnQqIG91cHV0RG9jKTsKLSAg
ICBQYXNzUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Ub0RvY3VtZW50KE5vZGUqIHNvdXJjZSk7
Ci0gICAgCi0gICAgdm9pZCBzZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBTdHJp
bmcgZ2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcm
IGxvY2FsTmFtZSkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVQYXJhbWV0ZXIoY29uc3QgU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKLSAgICB2b2lkIGNsZWFy
UGFyYW1ldGVycygpIHsgbV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KLQotICAgIHZvaWQgcmVzZXQo
KSB7IG1fc3R5bGVzaGVldC5jbGVhcigpOyBtX3N0eWxlc2hlZXRSb290Tm9kZS5jbGVhcigpOyAg
bV9wYXJhbWV0ZXJzLmNsZWFyKCk7IH0KLQotICAgIHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JGdW5j
KHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciopOwotICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNFcnJv
ckZ1bmModm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKLSAgICAKLXB1Ymxp
YzoKLSAgICAvLyBPbmx5IGZvciBsaWJYU0xUIGNhbGxiYWNrcwotICAgIFhTTFN0eWxlU2hlZXQq
IHhzbFN0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlc2hlZXQuZ2V0KCk7IH0KLQot
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gUGFyYW1ldGVyTWFwOwotCi1wcml2
YXRlOgotICAgIFhTTFRQcm9jZXNzb3IoKSB7IH0KLQotICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0
PiBtX3N0eWxlc2hlZXQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJvb3ROb2RlOwot
ICAgIFBhcmFtZXRlck1hcCBtX3BhcmFtZXRlcnM7Ci19OworICAgIGNsYXNzIEZyYW1lOworICAg
IGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CisKKyAgICBjbGFz
cyBYU0xUUHJvY2Vzc29yIDogcHVibGljIFJlZkNvdW50ZWQ8WFNMVFByb2Nlc3Nvcj4geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMVFByb2Nlc3Nvcj4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFRQcm9jZXNzb3IpOyB9CisKKyAgICAgICAgdm9p
ZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkg
eyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9CisgICAgICAgIGJvb2wgdHJhbnNmb3JtVG9T
dHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3Vs
dFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7CisgICAgICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwg
Tm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKTsKKworICAgICAgICAvLyBET00gbWV0aG9k
cworICAgICAgICB2b2lkIGltcG9ydFN0eWxlc2hlZXQoUGFzc1JlZlB0cjxOb2RlPiBzdHlsZSkg
eyBtX3N0eWxlc2hlZXRSb290Tm9kZSA9IHN0eWxlOyB9CisgICAgICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gdHJhbnNmb3JtVG9GcmFnbWVudChOb2RlKiBzb3VyY2UsIERvY3VtZW50
KiBvdXB1dERvYyk7CisgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9ybVRvRG9j
dW1lbnQoTm9kZSogc291cmNlKTsKKworICAgICAgICB2b2lkIHNldFBhcmFtZXRlcihjb25zdCBT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworICAgICAgICBTdHJpbmcgZ2V0UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CisgICAgICAgIHZvaWQg
cmVtb3ZlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcm
IGxvY2FsTmFtZSk7CisgICAgICAgIHZvaWQgY2xlYXJQYXJhbWV0ZXJzKCkgeyBtX3BhcmFtZXRl
cnMuY2xlYXIoKTsgfQorCisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgICAgICBzdGF0aWMg
dm9pZCBwYXJzZUVycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgeG1sRXJyb3IqKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhciog
bXNnLCAuLi4pOworCisgICAgcHVibGljOgorICAgICAgICAvLyBPbmx5IGZvciBsaWJYU0xUIGNh
bGxiYWNrcworICAgICAgICBYU0xTdHlsZVNoZWV0KiB4c2xTdHlsZXNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZXNoZWV0LmdldCgpOyB9CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBQYXJhbWV0ZXJNYXA7CisKKyAgICBwcml2YXRlOgorICAgICAgICBYU0xU
UHJvY2Vzc29yKCkgeyB9CisKKyAgICAgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IG1fc3R5bGVz
aGVldDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fc3R5bGVzaGVldFJvb3ROb2RlOworICAgICAg
ICBQYXJhbWV0ZXJNYXAgbV9wYXJhbWV0ZXJzOworICAgIH07CiAKIH0KIApJbmRleDogV2ViQ29y
ZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAkocmV2aXNpb24gNDg2MDQpCShmcm9tIFdlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwOjQ4NjA0KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IDxhcEB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWFNM
VCkKKworI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKKyNp
bmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIgLy8gZm9yIHBhcnNlSFRNTERvY3VtZW50RnJh
Z21lbnQKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5j
bHVkZSAiWFNMVEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJYU0xUVW5pY29kZVNvcnQuaCIKKyNp
bmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDxsaWJ4c2x0
L2ltcG9ydHMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3ZhcmlhYmxlcy5oPgorI2luY2x1ZGUgPGxp
YnhzbHQveHNsdHV0aWxzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpCisjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKKworU09GVF9MSU5LX0xJQlJBUlkobGli
eHNsdCk7CitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEZyZWVTdHlsZXNoZWV0LCB2b2lkLCAoeHNs
dFN0eWxlc2hlZXRQdHIgc2hlZXQpLCAoc2hlZXQpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRG
cmVlVHJhbnNmb3JtQ29udGV4dCwgdm9pZCwgKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQp
LCAoY3R4dCkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdE5ld1RyYW5zZm9ybUNvbnRleHQsIHhz
bHRUcmFuc2Zvcm1Db250ZXh0UHRyLCAoeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUsIHhtbERvY1B0
ciBkb2MpLCAoc3R5bGUsIGRvYykpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdEFwcGx5U3R5bGVz
aGVldFVzZXIsIHhtbERvY1B0ciwgKHhzbHRTdHlsZXNoZWV0UHRyIHN0eWxlLCB4bWxEb2NQdHIg
ZG9jLCBjb25zdCBjaGFyKiogcGFyYW1zLCBjb25zdCBjaGFyKiBvdXRwdXQsIEZJTEUqIHByb2Zp
bGUsIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIHVzZXJDdHh0KSwgKHN0eWxlLCBkb2MsIHBhcmFt
cywgb3V0cHV0LCBwcm9maWxlLCB1c2VyQ3R4dCkpCitTT0ZUX0xJTksobGlieHNsdCwgeHNsdFF1
b3RlVXNlclBhcmFtcywgaW50LCAoeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgY29uc3Qg
Y2hhcioqIHBhcmFtcyksIChjdHh0LCBwYXJhbXMpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRT
ZXRDdHh0U29ydEZ1bmMsIHZvaWQsICh4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4c2x0
U29ydEZ1bmMgaGFuZGxlciksIChjdHh0LCBoYW5kbGVyKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4
c2x0U2V0TG9hZGVyRnVuYywgdm9pZCwgKHhzbHREb2NMb2FkZXJGdW5jIGYpLCAoZikpCitTT0ZU
X0xJTksobGlieHNsdCwgeHNsdFNhdmVSZXN1bHRUbywgaW50LCAoeG1sT3V0cHV0QnVmZmVyUHRy
IGJ1ZiwgeG1sRG9jUHRyIHJlc3VsdCwgeHNsdFN0eWxlc2hlZXRQdHIgc3R5bGUpLCAoYnVmLCBy
ZXN1bHQsIHN0eWxlKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TmV4dEltcG9ydCwgeHNsdFN0
eWxlc2hlZXRQdHIsICh4c2x0U3R5bGVzaGVldFB0ciBzdHlsZSksIChzdHlsZSkpCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJv
ckZ1bmModm9pZCosIGNvbnN0IGNoYXIqLCAuLi4pCit7CisgICAgLy8gSXQgd291bGQgYmUgbmlj
ZSB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGVycm9yIG1lc3NhZ2UuCit9CisgICAgCit2b2lk
IFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVzZXJEYXRhLCB4bWxFcnJvciog
ZXJyb3IpCit7CisgICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRpY19jYXN0PENvbnNvbGUqPih1
c2VyRGF0YSk7CisgICAgaWYgKCFjb25zb2xlKQorICAgICAgICByZXR1cm47CisKKyAgICBNZXNz
YWdlTGV2ZWwgbGV2ZWw7CisgICAgc3dpdGNoIChlcnJvci0+bGV2ZWwpIHsKKyAgICAgICAgY2Fz
ZSBYTUxfRVJSX05PTkU6CisgICAgICAgICAgICBsZXZlbCA9IFRpcE1lc3NhZ2VMZXZlbDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhNTF9FUlJfV0FSTklORzoKKyAgICAgICAg
ICAgIGxldmVsID0gV2FybmluZ01lc3NhZ2VMZXZlbDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFhNTF9FUlJfRVJST1I6CisgICAgICAgIGNhc2UgWE1MX0VSUl9GQVRBTDoKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdlKFhNTE1l
c3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZXJyb3ItPm1lc3NhZ2UsIGVycm9y
LT5saW5lLCBlcnJvci0+ZmlsZSk7Cit9CisKKy8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBu
byB3YXkgdG8gY29udHJvbCB0aGUgY3R4dCBwb2ludGVyIGZvciBsb2FkaW5nIGhlcmUsIHRodXMg
d2UgaGF2ZSBnbG9iYWxzLgorc3RhdGljIFhTTFRQcm9jZXNzb3IqIGdsb2JhbFByb2Nlc3NvciA9
IDA7CitzdGF0aWMgRG9jTG9hZGVyKiBnbG9iYWxEb2NMb2FkZXIgPSAwOworc3RhdGljIHhtbERv
Y1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbENoYXIqIHVyaSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhtbERpY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQqIGN0eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4c2x0
TG9hZFR5cGUgdHlwZSkKK3sKKyAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgWFNMVF9MT0FE
X0RPQ1VNRU5UOiB7CisgICAgICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjb250ZXh0
ID0gKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CisgICAgICAgICAgICB4bWxDaGFyKiBi
YXNlID0geG1sTm9kZUdldEJhc2UoY29udGV4dC0+ZG9jdW1lbnQtPmRvYywgY29udGV4dC0+bm9k
ZSk7CisgICAgICAgICAgICBLVVJMIHVybChLVVJMKFBhcnNlZFVSTFN0cmluZywgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oYmFzZSkpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
Pih1cmkpKTsKKyAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7CisgICAgICAgICAgICBSZXNvdXJj
ZUVycm9yIGVycm9yOworICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKwor
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICAgICAgICAgIGJvb2wgcmVxdWVz
dEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCkgJiYgZ2xvYmFsRG9jTG9hZGVyLT5k
b2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpOworICAgICAgICAgICAgaWYg
KHJlcXVlc3RBbGxvd2VkKSB7CisgICAgICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwsIEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgcmVx
dWVzdEFsbG93ZWQgPSBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghcmVxdWVzdEFsbG93ZWQpIHsKKyAgICAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAg
ICAgICAgICAgICAgZ2xvYmFsRG9jTG9hZGVyLT5wcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UodXJs
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ29uc29sZSogY29uc29sZSA9IDA7Cisg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNo
ZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBjb25zb2xl
ID0gZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCk7CisgICAgICAgICAgICB4bWxTZXRTdHJ1
Y3R1cmVkRXJyb3JGdW5jKGNvbnNvbGUsIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKTsK
KyAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nv
cjo6Z2VuZXJpY0Vycm9yRnVuYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGRv
bid0IHNwZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVz
cGVjdHMKKyAgICAgICAgICAgIC8vIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIEhUVFAg
aGVhZGVycy4KKyAgICAgICAgICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9ucyk7CisKKyAg
ICAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoMCwgMCk7CisgICAgICAgICAgICB4
bWxTZXRHZW5lcmljRXJyb3JGdW5jKDAsIDApOworCisgICAgICAgICAgICByZXR1cm4gZG9jOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgWFNMVF9MT0FEX1NUWUxFU0hFRVQ6CisgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsUHJvY2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPmxvY2F0ZVN0eWxlc2hl
ZXRTdWJSZXNvdXJjZSgoKHhzbHRTdHlsZXNoZWV0UHRyKWN0eHQpLT5kb2MsIHVyaSk7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRYU0xUTG9hZENhbGxCYWNrKHhzbHREb2NM
b2FkZXJGdW5jIGZ1bmMsIFhTTFRQcm9jZXNzb3IqIHByb2Nlc3NvciwgRG9jTG9hZGVyKiBsb2Fk
ZXIpCit7CisgICAgeHNsdFNldExvYWRlckZ1bmMoZnVuYyk7CisgICAgZ2xvYmFsUHJvY2Vzc29y
ID0gcHJvY2Vzc29yOworICAgIGdsb2JhbERvY0xvYWRlciA9IGxvYWRlcjsKK30KKworc3RhdGlj
IGludCB3cml0ZVRvVmVjdG9yKHZvaWQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50
IGxlbikKK3sKKyAgICBWZWN0b3I8VUNoYXI+JiByZXN1bHRPdXRwdXQgPSAqc3RhdGljX2Nhc3Q8
VmVjdG9yPFVDaGFyPio+KGNvbnRleHQpOworICAgIFN0cmluZyBkZWNvZGVkQ2h1bmsgPSBTdHJp
bmc6OmZyb21VVEY4KGJ1ZmZlciwgbGVuKTsKKyAgICByZXN1bHRPdXRwdXQuYXBwZW5kKGRlY29k
ZWRDaHVuay5jaGFyYWN0ZXJzKCksIGRlY29kZWRDaHVuay5sZW5ndGgoKSk7CisgICAgcmV0dXJu
IGxlbjsKK30KKworc3RhdGljIGJvb2wgc2F2ZVJlc3VsdFRvU3RyaW5nKHhtbERvY1B0ciByZXN1
bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sK
KyAgICB4bWxPdXRwdXRCdWZmZXJQdHIgb3V0cHV0QnVmID0geG1sQWxsb2NPdXRwdXRCdWZmZXIo
MCk7CisgICAgaWYgKCFvdXRwdXRCdWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0VmVjdG9yOworICAgIG91dHB1dEJ1Zi0+Y29udGV4dCA9ICZyZXN1
bHRWZWN0b3I7CisgICAgb3V0cHV0QnVmLT53cml0ZWNhbGxiYWNrID0gd3JpdGVUb1ZlY3RvcjsK
KyAgICAKKyAgICBpbnQgcmV0dmFsID0geHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3Vs
dERvYywgc2hlZXQpOworICAgIHhtbE91dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7CisgICAg
aWYgKHJldHZhbCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdvcmthcm91
bmQgZm9yIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU2Njg+
OiBsaWJ4c2x0IGFwcGVuZHMgYW4gZXh0cmEgbGluZSBmZWVkIHRvIHRoZSByZXN1bHQuCisgICAg
aWYgKHJlc3VsdFZlY3Rvci5zaXplKCkgPiAwICYmIHJlc3VsdFZlY3RvcltyZXN1bHRWZWN0b3Iu
c2l6ZSgpIC0gMV0gPT0gJ1xuJykKKyAgICAgICAgcmVzdWx0VmVjdG9yLnJlbW92ZUxhc3QoKTsK
KworICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6YWRvcHQocmVzdWx0VmVjdG9yKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmb3JtVGV4dFN0cmlu
Z1RvWEhUTUxEb2N1bWVudFN0cmluZyhTdHJpbmcmIHRleHQpCit7CisgICAgLy8gTW9kaWZ5IHRo
ZSBvdXRwdXQgc28gdGhhdCBpdCBpcyBhIHdlbGwtZm9ybWVkIFhIVE1MIGRvY3VtZW50IHdpdGgg
YSA8cHJlPiB0YWcgZW5jbG9zaW5nIHRoZSB0ZXh0LgorICAgIHRleHQucmVwbGFjZSgnJicsICIm
YW1wOyIpOworICAgIHRleHQucmVwbGFjZSgnPCcsICImbHQ7Iik7CisgICAgdGV4dCA9ICI8P3ht
bCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiIKKyAgICAgICAgIjwhRE9D
VFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOXCIgXCJo
dHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkXCI+XG4iCisg
ICAgICAgICI8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj5cbiIK
KyAgICAgICAgIjxoZWFkPjx0aXRsZS8+PC9oZWFkPlxuIgorICAgICAgICAiPGJvZHk+XG4iCisg
ICAgICAgICI8cHJlPiIgKyB0ZXh0ICsgIjwvcHJlPlxuIgorICAgICAgICAiPC9ib2R5PlxuIgor
ICAgICAgICAiPC9odG1sPlxuIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqKiB4c2x0UGFyYW1B
cnJheUZyb21QYXJhbWV0ZXJNYXAoWFNMVFByb2Nlc3Nvcjo6UGFyYW1ldGVyTWFwJiBwYXJhbWV0
ZXJzKQoreworICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBjb25zdCBjaGFyKiogcGFyYW1ldGVyQXJyYXkgPSAoY29uc3QgY2hhcioqKWZhc3RN
YWxsb2MoKChwYXJhbWV0ZXJzLnNpemUoKSAqIDIpICsgMSkgKiBzaXplb2YoY2hhciopKTsKKwor
ICAgIFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcDo6aXRlcmF0b3IgZW5kID0gcGFyYW1ldGVy
cy5lbmQoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yIChYU0xUUHJvY2Vzc29y
OjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gcGFyYW1ldGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgcGFyYW1ldGVyQXJyYXlbaW5kZXgrK10gPSBzdHJkdXAoaXQt
PmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBwYXJhbWV0ZXJBcnJheVtpbmRleCsrXSA9
IHN0cmR1cChpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwYXJhbWV0ZXJB
cnJheVtpbmRleF0gPSAwOworCisgICAgcmV0dXJuIHBhcmFtZXRlckFycmF5OworfQorCitzdGF0
aWMgdm9pZCBmcmVlWHNsdFBhcmFtQXJyYXkoY29uc3QgY2hhcioqIHBhcmFtcykKK3sKKyAgICBj
b25zdCBjaGFyKiogdGVtcCA9IHBhcmFtczsKKyAgICBpZiAoIXBhcmFtcykKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHdoaWxlICgqdGVtcCkgeworICAgICAgICBmcmVlKCh2b2lkKikqKHRl
bXArKykpOyAvLyBzdHJkdXAgcmV0dXJucyBtYWxsb2MnZCBibG9ja3MsIHNvIHdlIGhhdmUgdG8g
dXNlIGZyZWUoKSBoZXJlCisgICAgICAgIGZyZWUoKHZvaWQqKSoodGVtcCsrKSk7CisgICAgfQor
ICAgIGZhc3RGcmVlKHBhcmFtcyk7Cit9CisKKworUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3Ry
aW5nLAorICAgIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291
cmNlTUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOworICAg
IGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0
KCkpOworICAgIFN0cmluZyBkb2N1bWVudFNvdXJjZSA9IHNvdXJjZVN0cmluZzsKKworICAgIFJl
ZlB0cjxEb2N1bWVudD4gcmVzdWx0OworICAgIGlmIChzb3VyY2VNSU1FVHlwZSA9PSAidGV4dC9w
bGFpbiIpIHsKKyAgICAgICAgcmVzdWx0ID0gb3duZXJEb2N1bWVudC0+aW1wbGVtZW50YXRpb24o
KS0+Y3JlYXRlRG9jdW1lbnQoZnJhbWUpOworICAgICAgICB0cmFuc2Zvcm1UZXh0U3RyaW5nVG9Y
SFRNTERvY3VtZW50U3RyaW5nKGRvY3VtZW50U291cmNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gb3duZXJEb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQo
c291cmNlTUlNRVR5cGUsIGZyYW1lLCBmYWxzZSk7CisgICAgCisgICAgLy8gQmVmb3JlIHBhcnNp
bmcsIHdlIG5lZWQgdG8gc2F2ZSAmIGRldGFjaCB0aGUgb2xkIGRvY3VtZW50IGFuZCBnZXQgdGhl
IG5ldyBkb2N1bWVudAorICAgIC8vIGluIHBsYWNlLiBXZSBoYXZlIHRvIGRvIHRoaXMgb25seSBp
ZiB3ZSdyZSByZW5kZXJpbmcgdGhlIHJlc3VsdCBkb2N1bWVudC4KKyAgICBpZiAoZnJhbWUpIHsK
KyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAgICAgICAg
ICB2aWV3LT5jbGVhcigpOworICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURvY3Vt
ZW50KGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZnJhbWUtPnNldERvY3VtZW50KHJlc3Vs
dCk7CisgICAgfQorICAgIAorICAgIGlmIChzb3VyY2VJc0RvY3VtZW50KQorICAgICAgICByZXN1
bHQtPnNldFVSTChvd25lckRvY3VtZW50LT51cmwoKSk7CisgICAgcmVzdWx0LT5vcGVuKCk7Cisg
ICAgCisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoc291cmNlTUlNRVR5cGUpOworICAgIGRlY29kZXItPnNldEVuY29k
aW5nKHNvdXJjZUVuY29kaW5nLmlzRW1wdHkoKSA/IFVURjhFbmNvZGluZygpIDogVGV4dEVuY29k
aW5nKHNvdXJjZUVuY29kaW5nKSwgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tWE1M
SGVhZGVyKTsKKyAgICByZXN1bHQtPnNldERlY29kZXIoZGVjb2Rlci5yZWxlYXNlKCkpOworICAg
IAorICAgIHJlc3VsdC0+d3JpdGUoZG9jdW1lbnRTb3VyY2UpOworICAgIHJlc3VsdC0+ZmluaXNo
UGFyc2luZygpOworICAgIHJlc3VsdC0+Y2xvc2UoKTsKKworICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVh
dGVGcmFnbWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0
cmluZyYgc291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpCit7CisgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKG91
dHB1dERvYyk7CisgICAgCisgICAgaWYgKHNvdXJjZU1JTUVUeXBlID09ICJ0ZXh0L2h0bWwiKQor
ICAgICAgICBwYXJzZUhUTUxEb2N1bWVudEZyYWdtZW50KHNvdXJjZVN0cmluZywgZnJhZ21lbnQu
Z2V0KCkpOworICAgIGVsc2UgaWYgKHNvdXJjZU1JTUVUeXBlID09ICJ0ZXh0L3BsYWluIikKKyAg
ICAgICAgZnJhZ21lbnQtPmFkZENoaWxkKFRleHQ6OmNyZWF0ZShvdXRwdXREb2MsIHNvdXJjZVN0
cmluZykpOworICAgIGVsc2UgeworICAgICAgICBib29sIHN1Y2Nlc3NmdWxQYXJzZSA9IHBhcnNl
WE1MRG9jdW1lbnRGcmFnbWVudChzb3VyY2VTdHJpbmcsIGZyYWdtZW50LmdldCgpLCBvdXRwdXRE
b2MtPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzZnVsUGFyc2UpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gbWVzcyB3aXRoIFVSTHMgaGVyZT8KKyAgICAgICAgCisgICAgcmV0dXJuIGZyYWdtZW50
OworfQorCitzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQb2ludGVyKFJl
ZlB0cjxYU0xTdHlsZVNoZWV0PiYgY2FjaGVkU3R5bGVzaGVldCwgTm9kZSogc3R5bGVzaGVldFJv
b3ROb2RlKQoreworICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCAmJiBzdHlsZXNoZWV0Um9vdE5v
ZGUpIHsKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0ZShz
dHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQo
KSA6IHN0eWxlc2hlZXRSb290Tm9kZSwKKyAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9kZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5w
YXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7CisgICAgfQorICAg
IAorICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAhY2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hl
ZXQtPmNvbXBpbGVTdHlsZVNoZWV0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHht
bERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3sK
KyAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVu
dCgpOworICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9j
dW1lbnQuZ2V0KCkpOworICAgIAorICAgIHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOworICAgIGlm
IChzb3VyY2VJc0RvY3VtZW50KQorICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKW93bmVy
RG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpOworICAgIGlmICghc291cmNlRG9jKSB7CisgICAg
ICAgIHNvdXJjZURvYyA9ICh4bWxEb2NQdHIpeG1sRG9jUHRyRm9yU3RyaW5nKG93bmVyRG9jdW1l
bnQtPmRvY0xvYWRlcigpLCBjcmVhdGVNYXJrdXAoc291cmNlTm9kZSksCisgICAgICAgICAgICBz
b3VyY2VJc0RvY3VtZW50ID8gb3duZXJEb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBTdHJpbmco
KSk7CisgICAgICAgIHNob3VsZERlbGV0ZSA9IChzb3VyY2VEb2MgIT0gMCk7CisgICAgfQorICAg
IHJldHVybiBzb3VyY2VEb2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHJlc3VsdE1JTUVU
eXBlKHhtbERvY1B0ciByZXN1bHREb2MsIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0KQoreworICAg
IC8vIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBvdXRwdXQgd2UgbmVlZCB0byBiZSBhYmxlIHRv
IGRlYWwgd2l0aDoKKyAgICAvLyBIVE1MIChjcmVhdGUgYW4gSFRNTCBkb2N1bWVudCksIFhNTCAo
Y3JlYXRlIGFuIFhNTCBkb2N1bWVudCksCisgICAgLy8gYW5kIHRleHQgKHdyYXAgaW4gYSA8cHJl
PiBhbmQgY3JlYXRlIGFuIFhNTCBkb2N1bWVudCkuCisKKyAgICBjb25zdCB4bWxDaGFyKiByZXN1
bHRUeXBlID0gMDsKKyAgICBYU0xUX0dFVF9JTVBPUlRfUFRSKHJlc3VsdFR5cGUsIHNoZWV0LCBt
ZXRob2QpOworICAgIGlmIChyZXN1bHRUeXBlID09IDAgJiYgcmVzdWx0RG9jLT50eXBlID09IFhN
TF9IVE1MX0RPQ1VNRU5UX05PREUpCisgICAgICAgIHJlc3VsdFR5cGUgPSAoY29uc3QgeG1sQ2hh
ciopImh0bWwiOworICAgIAorICAgIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3Qg
eG1sQ2hhciopImh0bWwiKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworICAgIGVsc2Ug
aWYgKHhtbFN0ckVxdWFsKHJlc3VsdFR5cGUsIChjb25zdCB4bWxDaGFyKikidGV4dCIpKQorICAg
ICAgICByZXR1cm4gInRleHQvcGxhaW4iOworICAgICAgICAKKyAgICByZXR1cm4gImFwcGxpY2F0
aW9uL3htbCI7Cit9CisKK2Jvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9k
ZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0
cmluZyYgcmVzdWx0RW5jb2RpbmcpCit7CisgICAgUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3Vt
ZW50ID0gc291cmNlTm9kZS0+ZG9jdW1lbnQoKTsKKyAgICAKKyAgICBzZXRYU0xUTG9hZENhbGxC
YWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpKTsKKyAg
ICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxl
c2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKKyAgICBpZiAoIXNoZWV0KSB7Cisg
ICAgICAgIHNldFhTTFRMb2FkQ2FsbEJhY2soMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgbV9zdHlsZXNoZWV0LT5jbGVhckRvY3VtZW50cygpOworCisgICAgeG1s
Q2hhciogb3JpZ01ldGhvZCA9IHNoZWV0LT5tZXRob2Q7CisgICAgaWYgKCFvcmlnTWV0aG9kICYm
IG1pbWVUeXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBzaGVldC0+bWV0aG9kID0gKHhtbENo
YXIqKSJodG1sIjsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxk
RnJlZVNvdXJjZURvYyA9IGZhbHNlOworICAgIGlmICh4bWxEb2NQdHIgc291cmNlRG9jID0geG1s
RG9jUHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykpIHsKKyAgICAg
ICAgLy8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcgdGhlIHJlc3Vs
dCBhcyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRvY3VtZW50cywg
CisgICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgaW1t
ZWRpYXRlbHkgcGFyc2VkLgorICAgICAgICBzaGVldC0+b21pdFhtbERlY2xhcmF0aW9uID0gdHJ1
ZTsKKworICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciB0cmFuc2Zvcm1Db250ZXh0ID0g
eHNsdE5ld1RyYW5zZm9ybUNvbnRleHQoc2hlZXQsIHNvdXJjZURvYyk7CisgICAgICAgIHJlZ2lz
dGVyWFNMVEV4dGVuc2lvbnModHJhbnNmb3JtQ29udGV4dCk7CisKKyAgICAgICAgLy8gPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc3PjogWFNMVCBwcm9jZXNzb3Ig
PHhzbDpzb3J0PiBhbGdvcml0aG0gb25seSBjb21wYXJlcyBieSBjb2RlIHBvaW50CisgICAgICAg
IHhzbHRTZXRDdHh0U29ydEZ1bmModHJhbnNmb3JtQ29udGV4dCwgeHNsdFVuaWNvZGVTb3J0RnVu
Y3Rpb24pOworCisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBs
aWJ4c2x0LiAKKyAgICAgICAgLy8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEu
MS4xMywgc28gb25jZSB3ZSBzaGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KKyAgICAgICAg
aWYgKHRyYW5zZm9ybUNvbnRleHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKKyAgICAgICAgICAgdHJh
bnNmb3JtQ29udGV4dC0+Z2xvYmFsVmFycyA9IHhtbEhhc2hDcmVhdGUoMjApOworCisgICAgICAg
IGNvbnN0IGNoYXIqKiBwYXJhbXMgPSB4c2x0UGFyYW1BcnJheUZyb21QYXJhbWV0ZXJNYXAobV9w
YXJhbWV0ZXJzKTsKKyAgICAgICAgeHNsdFF1b3RlVXNlclBhcmFtcyh0cmFuc2Zvcm1Db250ZXh0
LCBwYXJhbXMpOworICAgICAgICB4bWxEb2NQdHIgcmVzdWx0RG9jID0geHNsdEFwcGx5U3R5bGVz
aGVldFVzZXIoc2hlZXQsIHNvdXJjZURvYywgMCwgMCwgMCwgdHJhbnNmb3JtQ29udGV4dCk7Cisg
ICAgICAgIAorICAgICAgICB4c2x0RnJlZVRyYW5zZm9ybUNvbnRleHQodHJhbnNmb3JtQ29udGV4
dCk7ICAgICAgICAKKyAgICAgICAgZnJlZVhzbHRQYXJhbUFycmF5KHBhcmFtcyk7CisgICAgICAg
IAorICAgICAgICBpZiAoc2hvdWxkRnJlZVNvdXJjZURvYykKKyAgICAgICAgICAgIHhtbEZyZWVE
b2Moc291cmNlRG9jKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdWNjZXNzID0gc2F2ZVJlc3Vs
dFRvU3RyaW5nKHJlc3VsdERvYywgc2hlZXQsIHJlc3VsdFN0cmluZykpIHsKKyAgICAgICAgICAg
IG1pbWVUeXBlID0gcmVzdWx0TUlNRVR5cGUocmVzdWx0RG9jLCBzaGVldCk7CisgICAgICAgICAg
ICByZXN1bHRFbmNvZGluZyA9IChjaGFyKilyZXN1bHREb2MtPmVuY29kaW5nOworICAgICAgICB9
CisgICAgICAgIHhtbEZyZWVEb2MocmVzdWx0RG9jKTsKKyAgICB9CisgICAgCisgICAgc2hlZXQt
Pm1ldGhvZCA9IG9yaWdNZXRob2Q7CisgICAgc2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsK
KyAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hlZXQpOworICAgIG1fc3R5bGVzaGVldCA9IDA7CisK
KyAgICByZXR1cm4gc3VjY2VzczsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9Eb2N1bWVudChOb2RlKiBzb3VyY2VOb2RlKQoreworICAgIFN0cmlu
ZyByZXN1bHRNSU1FVHlwZTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworICAgIFN0cmluZyBy
ZXN1bHRFbmNvZGluZzsKKyAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5vZGUsIHJl
c3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcs
IHJlc3VsdEVuY29kaW5nLCByZXN1bHRNSU1FVHlwZSwgc291cmNlTm9kZSwgMCk7Cit9CisKK1Bh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9GcmFn
bWVudChOb2RlKiBzb3VyY2VOb2RlLCBEb2N1bWVudCogb3V0cHV0RG9jKQoreworICAgIFN0cmlu
ZyByZXN1bHRNSU1FVHlwZTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworICAgIFN0cmluZyBy
ZXN1bHRFbmNvZGluZzsKKworICAgIC8vIElmIHRoZSBvdXRwdXQgZG9jdW1lbnQgaXMgSFRNTCwg
ZGVmYXVsdCB0byBIVE1MIG1ldGhvZC4KKyAgICBpZiAob3V0cHV0RG9jLT5pc0hUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXN1bHRNSU1FVHlwZSA9ICJ0ZXh0L2h0bWwiOworICAgIAorICAgIGlm
ICghdHJhbnNmb3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0
cmluZywgcmVzdWx0RW5jb2RpbmcpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlRnJhZ21lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0TUlNRVR5cGUsIG91dHB1
dERvYyk7Cit9CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6c2V0UGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYgLypuYW1lc3BhY2VVUkkqLywgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IG5hbWVzcGFjZSBzdXBwb3J0PworICAgIC8vIHNo
b3VsZCBtYWtlIGEgUXVhbGlmaWVkTmFtZSBoZXJlIGJ1dCB3ZSdkIGhhdmUgdG8gZXhwb3NlIHRo
ZSBpbXBsCisgICAgbV9wYXJhbWV0ZXJzLnNldChsb2NhbE5hbWUsIHZhbHVlKTsKK30KKworU3Ry
aW5nIFhTTFRQcm9jZXNzb3I6OmdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNl
VVJJKi8sIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBu
YW1lc3BhY2Ugc3VwcG9ydD8KKyAgICAvLyBzaG91bGQgbWFrZSBhIFF1YWxpZmllZE5hbWUgaGVy
ZSBidXQgd2UnZCBoYXZlIHRvIGV4cG9zZSB0aGUgaW1wbAorICAgIHJldHVybiBtX3BhcmFtZXRl
cnMuZ2V0KGxvY2FsTmFtZSk7Cit9CisKK3ZvaWQgWFNMVFByb2Nlc3Nvcjo6cmVtb3ZlUGFyYW1l
dGVyKGNvbnN0IFN0cmluZyYgLypuYW1lc3BhY2VVUkkqLywgY29uc3QgU3RyaW5nJiBsb2NhbE5h
bWUpCit7CisgICAgLy8gRklYTUU6IG5hbWVzcGFjZSBzdXBwb3J0PworICAgIG1fcGFyYW1ldGVy
cy5yZW1vdmUobG9jYWxOYW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFhTTFQpCkluZGV4OiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
CShyZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjUgKzI2LDE3IEBACiAKICNpbmNsdWRlICJYU0xUUHJv
Y2Vzc29yLmgiCiAKLSNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgot
I2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIiAvLyBmb3IgcGFyc2VIVE1MRG9jdW1lbnRGcmFn
bWVudAotI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKyNpbmNs
dWRlICJYU0xTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiWFNMVEV4dGVuc2lvbnMuaCIKICNpbmNs
dWRlICJYU0xUVW5pY29kZVNvcnQuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKQEAgLTc3LDcgKzY5
LDcgQEAgdm9pZCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JGdW5jKHZvaQogewogICAgIC8v
IEl0IHdvdWxkIGJlIG5pY2UgdG8gZG8gc29tZXRoaW5nIHdpdGggdGhpcyBlcnJvciBtZXNzYWdl
LgogfQotICAgIAorCiB2b2lkIFhTTFRQcm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jKHZvaWQqIHVz
ZXJEYXRhLCB4bWxFcnJvciogZXJyb3IpCiB7CiAgICAgQ29uc29sZSogY29uc29sZSA9IHN0YXRp
Y19jYXN0PENvbnNvbGUqPih1c2VyRGF0YSk7CkBAIC04NiwxNyArNzgsMTcgQEAgdm9pZCBYU0xU
UHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYyh2b2lkKgogCiAgICAgTWVzc2FnZUxldmVsIGxldmVs
OwogICAgIHN3aXRjaCAoZXJyb3ItPmxldmVsKSB7Ci0gICAgICAgIGNhc2UgWE1MX0VSUl9OT05F
OgotICAgICAgICAgICAgbGV2ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBYTUxfRVJSX1dBUk5JTkc6Ci0gICAgICAgICAgICBsZXZlbCA9IFdh
cm5pbmdNZXNzYWdlTGV2ZWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBYTUxf
RVJSX0VSUk9SOgotICAgICAgICBjYXNlIFhNTF9FUlJfRkFUQUw6Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBsZXZlbCA9IEVycm9yTWVzc2FnZUxldmVsOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBYTUxfRVJSX05PTkU6CisgICAgICAgIGxldmVsID0gVGlwTWVzc2FnZUxl
dmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhNTF9FUlJfV0FSTklORzoKKyAgICAgICAg
bGV2ZWwgPSBXYXJuaW5nTWVzc2FnZUxldmVsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhN
TF9FUlJfRVJST1I6CisgICAgY2FzZSBYTUxfRVJSX0ZBVEFMOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNvbnNvbGUtPmFkZE1lc3NhZ2UoWE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IGxldmVsLCBlcnJvci0+bWVzc2FnZSwgZXJyb3ItPmxpbmUsIGVycm9yLT5maWxlKTsKQEAgLTEx
Myw0OSArMTA1LDQ5IEBAIHN0YXRpYyB4bWxEb2NQdHIgZG9jTG9hZGVyRnVuYyhjb25zdCB4bWwK
IHsKICAgICBpZiAoIWdsb2JhbFByb2Nlc3NvcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBYU0xUX0xPQURfRE9DVU1FTlQ6IHsK
LSAgICAgICAgICAgIHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGNvbnRleHQgPSAoeHNsdFRyYW5z
Zm9ybUNvbnRleHRQdHIpY3R4dDsKLSAgICAgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4bWxOb2Rl
R2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKLSAgICAgICAg
ICAgIEtVUkwgdXJsKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihiYXNlKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVyaSkpOwotICAg
ICAgICAgICAgeG1sRnJlZShiYXNlKTsKLSAgICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7
Ci0gICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgICAgICAgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGds
b2JhbERvY0xvYWRlci0+ZnJhbWUoKSAmJiBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCk7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdEFsbG93
ZWQpIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxEb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigp
LT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9
IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVz
cG9uc2UudXJsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFyZXF1ZXN0QWxs
b3dlZCkgewotICAgICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBn
bG9iYWxEb2NMb2FkZXItPnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBDb25zb2xlKiBjb25zb2xlID0gMDsKLSAgICAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+b3duZXJE
b2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGNvbnNvbGUgPSBmcmFtZS0+ZG9t
V2luZG93KCktPmNvbnNvbGUoKTsKLSAgICAgICAgICAgIHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1
bmMoY29uc29sZSwgWFNMVFByb2Nlc3Nvcjo6cGFyc2VFcnJvckZ1bmMpOwotICAgICAgICAgICAg
eG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJy
b3JGdW5jKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBh
biBlbmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cwotICAgICAg
ICAgICAgLy8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgSFRUUCBoZWFkZXJzLgotICAg
ICAgICAgICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoZGF0YS5kYXRhKCksIGRhdGEu
c2l6ZSgpLCAoY29uc3QgY2hhciopdXJpLCAwLCBvcHRpb25zKTsKKyAgICBjYXNlIFhTTFRfTE9B
RF9ET0NVTUVOVDogeworICAgICAgICB4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjb250ZXh0ID0g
KHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyKWN0eHQ7CisgICAgICAgIHhtbENoYXIqIGJhc2UgPSB4
bWxOb2RlR2V0QmFzZShjb250ZXh0LT5kb2N1bWVudC0+ZG9jLCBjb250ZXh0LT5ub2RlKTsKKyAg
ICAgICAgS1VSTCB1cmwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGJhc2UpKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJpKSk7Cisg
ICAgICAgIHhtbEZyZWUoYmFzZSk7CisgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CisgICAg
ICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRh
dGE7CisKKyAgICAgICAgYm9vbCByZXF1ZXN0QWxsb3dlZCA9IGdsb2JhbERvY0xvYWRlci0+ZnJh
bWUoKSAmJiBnbG9iYWxEb2NMb2FkZXItPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KHVybCk7CisgICAgICAgIGlmIChyZXF1ZXN0QWxsb3dlZCkgeworICAgICAgICAgICAgZ2xv
YmFsRG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eSh1cmwsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Cisg
ICAgICAgICAgICByZXF1ZXN0QWxsb3dlZCA9IGdsb2JhbERvY0xvYWRlci0+ZG9jKCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpOworICAgICAgICB9CisgICAg
ICAgIGlmICghcmVxdWVzdEFsbG93ZWQpIHsKKyAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGdsb2JhbERvY0xvYWRlci0+cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7
CisgICAgICAgIH0KIAotICAgICAgICAgICAgeG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYygwLCAw
KTsKLSAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgMCk7CisgICAgICAgIENv
bnNvbGUqIGNvbnNvbGUgPSAwOworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZ2xvYmFsUHJv
Y2Vzc29yLT54c2xTdHlsZXNoZWV0KCktPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAg
ICAgICAgIGNvbnNvbGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKKyAgICAgICAg
eG1sU2V0U3RydWN0dXJlZEVycm9yRnVuYyhjb25zb2xlLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVy
cm9yRnVuYyk7CisgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoY29uc29sZSwgWFNMVFBy
b2Nlc3Nvcjo6Z2VuZXJpY0Vycm9yRnVuYyk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lm
eSBhbiBlbmNvZGluZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cworICAg
ICAgICAvLyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBIVFRQIGhlYWRlcnMuCisgICAg
ICAgIHhtbERvY1B0ciBkb2MgPSB4bWxSZWFkTWVtb3J5KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSwgKGNvbnN0IGNoYXIqKXVyaSwgMCwgb3B0aW9ucyk7CiAKLSAgICAgICAgICAgIHJldHVybiBk
b2M7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBYU0xUX0xPQURfU1RZTEVTSEVFVDoKLSAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQoKS0+bG9jYXRlU3R5
bGVzaGVldFN1YlJlc291cmNlKCgoeHNsdFN0eWxlc2hlZXRQdHIpY3R4dCktPmRvYywgdXJpKTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB4bWxTZXRTdHJ1
Y3R1cmVkRXJyb3JGdW5jKDAsIDApOworICAgICAgICB4bWxTZXRHZW5lcmljRXJyb3JGdW5jKDAs
IDApOworCisgICAgICAgIHJldHVybiBkb2M7CisgICAgfQorICAgIGNhc2UgWFNMVF9MT0FEX1NU
WUxFU0hFRVQ6CisgICAgICAgIHJldHVybiBnbG9iYWxQcm9jZXNzb3ItPnhzbFN0eWxlc2hlZXQo
KS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKCgoeHNsdFN0eWxlc2hlZXRQdHIpY3R4dCkt
PmRvYywgdXJpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisK
ICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTgzLDcgKzE3NSw3IEBAIHN0YXRpYyBib29sIHNhdmVS
ZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIKICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdFZlY3RvcjsK
ICAgICBvdXRwdXRCdWYtPmNvbnRleHQgPSAmcmVzdWx0VmVjdG9yOwogICAgIG91dHB1dEJ1Zi0+
d3JpdGVjYWxsYmFjayA9IHdyaXRlVG9WZWN0b3I7Ci0gICAgCisKICAgICBpbnQgcmV0dmFsID0g
eHNsdFNhdmVSZXN1bHRUbyhvdXRwdXRCdWYsIHJlc3VsdERvYywgc2hlZXQpOwogICAgIHhtbE91
dHB1dEJ1ZmZlckNsb3NlKG91dHB1dEJ1Zik7CiAgICAgaWYgKHJldHZhbCA8IDApCkBAIC0xOTgs
MjEgKzE5MCw2IEBAIHN0YXRpYyBib29sIHNhdmVSZXN1bHRUb1N0cmluZyh4bWxEb2NQdHIKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZm9ybVRleHRTdHJp
bmdUb1hIVE1MRG9jdW1lbnRTdHJpbmcoU3RyaW5nJiB0ZXh0KQotewotICAgIC8vIE1vZGlmeSB0
aGUgb3V0cHV0IHNvIHRoYXQgaXQgaXMgYSB3ZWxsLWZvcm1lZCBYSFRNTCBkb2N1bWVudCB3aXRo
IGEgPHByZT4gdGFnIGVuY2xvc2luZyB0aGUgdGV4dC4KLSAgICB0ZXh0LnJlcGxhY2UoJyYnLCAi
JmFtcDsiKTsKLSAgICB0ZXh0LnJlcGxhY2UoJzwnLCAiJmx0OyIpOwotICAgIHRleHQgPSAiPD94
bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iCi0gICAgICAgICI8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiIFwi
aHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZFwiPlxuIgot
ICAgICAgICAiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4i
Ci0gICAgICAgICI8aGVhZD48dGl0bGUvPjwvaGVhZD5cbiIKLSAgICAgICAgIjxib2R5PlxuIgot
ICAgICAgICAiPHByZT4iICsgdGV4dCArICI8L3ByZT5cbiIKLSAgICAgICAgIjwvYm9keT5cbiIK
LSAgICAgICAgIjwvaHRtbD5cbiI7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyKiogeHNsdFBhcmFt
QXJyYXlGcm9tUGFyYW1ldGVyTWFwKFhTTFRQcm9jZXNzb3I6OlBhcmFtZXRlck1hcCYgcGFyYW1l
dGVycykKIHsKICAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KCkpCkBAIC0yMzYsNyArMjEzLDcg
QEAgc3RhdGljIHZvaWQgZnJlZVhzbHRQYXJhbUFycmF5KGNvbnN0IGNoYQogICAgIGNvbnN0IGNo
YXIqKiB0ZW1wID0gcGFyYW1zOwogICAgIGlmICghcGFyYW1zKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICB3aGlsZSAoKnRlbXApIHsKICAgICAgICAgZnJlZSgodm9pZCopKih0ZW1wKysp
KTsgLy8gc3RyZHVwIHJldHVybnMgbWFsbG9jJ2QgYmxvY2tzLCBzbyB3ZSBoYXZlIHRvIHVzZSBm
cmVlKCkgaGVyZQogICAgICAgICBmcmVlKCh2b2lkKikqKHRlbXArKykpOwpAQCAtMjQ0LDY0ICsy
MjEsNiBAQCBzdGF0aWMgdm9pZCBmcmVlWHNsdFBhcmFtQXJyYXkoY29uc3QgY2hhCiAgICAgZmFz
dEZyZWUocGFyYW1zKTsKIH0KIAotCi1QYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29y
OjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsCi0g
ICAgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1F
VHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKQotewotICAgIFJlZlB0cjxEb2N1
bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAgYm9vbCBz
b3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQoKSk7Ci0g
ICAgU3RyaW5nIGRvY3VtZW50U291cmNlID0gc291cmNlU3RyaW5nOwotCi0gICAgUmVmUHRyPERv
Y3VtZW50PiByZXN1bHQ7Ci0gICAgaWYgKHNvdXJjZU1JTUVUeXBlID09ICJ0ZXh0L3BsYWluIikg
ewotICAgICAgICByZXN1bHQgPSBvd25lckRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpLT5jcmVh
dGVEb2N1bWVudChmcmFtZSk7Ci0gICAgICAgIHRyYW5zZm9ybVRleHRTdHJpbmdUb1hIVE1MRG9j
dW1lbnRTdHJpbmcoZG9jdW1lbnRTb3VyY2UpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQg
PSBvd25lckRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpLT5jcmVhdGVEb2N1bWVudChzb3VyY2VN
SU1FVHlwZSwgZnJhbWUsIGZhbHNlKTsKLSAgICAKLSAgICAvLyBCZWZvcmUgcGFyc2luZywgd2Ug
bmVlZCB0byBzYXZlICYgZGV0YWNoIHRoZSBvbGQgZG9jdW1lbnQgYW5kIGdldCB0aGUgbmV3IGRv
Y3VtZW50Ci0gICAgLy8gaW4gcGxhY2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBvbmx5IGlmIHdlJ3Jl
IHJlbmRlcmluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgIGlmIChmcmFtZSkgewotICAgICAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXct
PmNsZWFyKCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoZnJh
bWUtPmRvY3VtZW50KCkpOwotICAgICAgICBmcmFtZS0+c2V0RG9jdW1lbnQocmVzdWx0KTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCi0gICAgICAgIHJlc3VsdC0+c2V0
VVJMKG93bmVyRG9jdW1lbnQtPnVybCgpKTsKLSAgICByZXN1bHQtPm9wZW4oKTsKLSAgICAKLSAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29k
ZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlwZSk7Ci0gICAgZGVjb2Rlci0+c2V0RW5jb2Rpbmcoc291
cmNlRW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2Rpbmcoc291
cmNlRW5jb2RpbmcpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21YTUxIZWFkZXIp
OwotICAgIHJlc3VsdC0+c2V0RGVjb2RlcihkZWNvZGVyLnJlbGVhc2UoKSk7Ci0gICAgCi0gICAg
cmVzdWx0LT53cml0ZShkb2N1bWVudFNvdXJjZSk7Ci0gICAgcmVzdWx0LT5maW5pc2hQYXJzaW5n
KCk7Ci0gICAgcmVzdWx0LT5jbG9zZSgpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiBz
b3VyY2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91dHB1dERvYykKLXsKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUob3V0cHV0RG9j
KTsKLSAgICAKLSAgICBpZiAoc291cmNlTUlNRVR5cGUgPT0gInRleHQvaHRtbCIpCi0gICAgICAg
IHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQoc291cmNlU3RyaW5nLCBmcmFnbWVudC5nZXQoKSk7
Ci0gICAgZWxzZSBpZiAoc291cmNlTUlNRVR5cGUgPT0gInRleHQvcGxhaW4iKQotICAgICAgICBm
cmFnbWVudC0+YWRkQ2hpbGQoVGV4dDo6Y3JlYXRlKG91dHB1dERvYywgc291cmNlU3RyaW5nKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGJvb2wgc3VjY2Vzc2Z1bFBhcnNlID0gcGFyc2VYTUxEb2N1
bWVudEZyYWdtZW50KHNvdXJjZVN0cmluZywgZnJhZ21lbnQuZ2V0KCksIG91dHB1dERvYy0+ZG9j
dW1lbnRFbGVtZW50KCkpOwotICAgICAgICBpZiAoIXN1Y2Nlc3NmdWxQYXJzZSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBt
ZXNzIHdpdGggVVJMcyBoZXJlPwotICAgICAgICAKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0K
IHN0YXRpYyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFBvaW50ZXIoUmVmUHRyPFhT
TFN0eWxlU2hlZXQ+JiBjYWNoZWRTdHlsZXNoZWV0LCBOb2RlKiBzdHlsZXNoZWV0Um9vdE5vZGUp
CiB7CiAgICAgaWYgKCFjYWNoZWRTdHlsZXNoZWV0ICYmIHN0eWxlc2hlZXRSb290Tm9kZSkgewpA
QCAtMzA5LDEwICsyMjgsMTAgQEAgc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNo
ZWV0UAogICAgICAgICAgICAgc3R5bGVzaGVldFJvb3ROb2RlLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSk7CiAgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1h
cmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWNhY2hl
ZFN0eWxlc2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIAorCiAgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVTdHls
ZVNoZWV0KCk7CiB9CiAKQEAgLTMyMCwxNCArMjM5LDE0IEBAIHN0YXRpYyBpbmxpbmUgeG1sRG9j
UHRyIHhtbERvY1B0ckZyb21Ob2QKIHsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1l
bnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOwogICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9
IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOwotICAgIAorCiAgICAgeG1sRG9j
UHRyIHNvdXJjZURvYyA9IDA7CiAgICAgaWYgKHNvdXJjZUlzRG9jdW1lbnQpCiAgICAgICAgIHNv
dXJjZURvYyA9ICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCk7CiAg
ICAgaWYgKCFzb3VyY2VEb2MpIHsKICAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cil4bWxE
b2NQdHJGb3JTdHJpbmcob3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCksIGNyZWF0ZU1hcmt1cChz
b3VyY2VOb2RlKSwKICAgICAgICAgICAgIHNvdXJjZUlzRG9jdW1lbnQgPyBvd25lckRvY3VtZW50
LT51cmwoKS5zdHJpbmcoKSA6IFN0cmluZygpKTsKLSAgICAgICAgc2hvdWxkRGVsZXRlID0gKHNv
dXJjZURvYyAhPSAwKTsKKyAgICAgICAgc2hvdWxkRGVsZXRlID0gc291cmNlRG9jOwogICAgIH0K
ICAgICByZXR1cm4gc291cmNlRG9jOwogfQpAQCAtMzQwLDIxICsyNTksMjEgQEAgc3RhdGljIGlu
bGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRAogCiAgICAgY29uc3QgeG1sQ2hhciogcmVz
dWx0VHlwZSA9IDA7CiAgICAgWFNMVF9HRVRfSU1QT1JUX1BUUihyZXN1bHRUeXBlLCBzaGVldCwg
bWV0aG9kKTsKLSAgICBpZiAocmVzdWx0VHlwZSA9PSAwICYmIHJlc3VsdERvYy0+dHlwZSA9PSBY
TUxfSFRNTF9ET0NVTUVOVF9OT0RFKQorICAgIGlmICghcmVzdWx0VHlwZSAmJiByZXN1bHREb2Mt
PnR5cGUgPT0gWE1MX0hUTUxfRE9DVU1FTlRfTk9ERSkKICAgICAgICAgcmVzdWx0VHlwZSA9IChj
b25zdCB4bWxDaGFyKikiaHRtbCI7Ci0gICAgCisKICAgICBpZiAoeG1sU3RyRXF1YWwocmVzdWx0
VHlwZSwgKGNvbnN0IHhtbENoYXIqKSJodG1sIikpCiAgICAgICAgIHJldHVybiAidGV4dC9odG1s
IjsKLSAgICBlbHNlIGlmICh4bWxTdHJFcXVhbChyZXN1bHRUeXBlLCAoY29uc3QgeG1sQ2hhciop
InRleHQiKSkKKyAgICBpZiAoeG1sU3RyRXF1YWwocmVzdWx0VHlwZSwgKGNvbnN0IHhtbENoYXIq
KSJ0ZXh0IikpCiAgICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7Ci0gICAgICAgIAorCiAgICAg
cmV0dXJuICJhcHBsaWNhdGlvbi94bWwiOwogfQogCiBib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5z
Zm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYg
cmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQogewogICAgIFJlZlB0cjxEb2N1
bWVudD4gb3duZXJEb2N1bWVudCA9IHNvdXJjZU5vZGUtPmRvY3VtZW50KCk7Ci0gICAgCisKICAg
ICBzZXRYU0xUTG9hZENhbGxCYWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQt
PmRvY0xvYWRlcigpKTsKICAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhzbHRTdHlsZXNo
ZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdldCgpKTsKICAg
ICBpZiAoIXNoZWV0KSB7CkBAIC0zNzAsNyArMjg5LDcgQEAgYm9vbCBYU0xUUHJvY2Vzc29yOjp0
cmFuc2Zvcm1Ub1N0cmluZyhObwogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGJvb2wg
c2hvdWxkRnJlZVNvdXJjZURvYyA9IGZhbHNlOwogICAgIGlmICh4bWxEb2NQdHIgc291cmNlRG9j
ID0geG1sRG9jUHRyRnJvbU5vZGUoc291cmNlTm9kZSwgc2hvdWxkRnJlZVNvdXJjZURvYykpIHsK
LSAgICAgICAgLy8gVGhlIFhNTCBkZWNsYXJhdGlvbiB3b3VsZCBwcmV2ZW50IHBhcnNpbmcgdGhl
IHJlc3VsdCBhcyBhIGZyYWdtZW50LCBhbmQgaXQncyBub3QgbmVlZGVkIGV2ZW4gZm9yIGRvY3Vt
ZW50cywgCisgICAgICAgIC8vIFRoZSBYTUwgZGVjbGFyYXRpb24gd291bGQgcHJldmVudCBwYXJz
aW5nIHRoZSByZXN1bHQgYXMgYSBmcmFnbWVudCwgYW5kIGl0J3Mgbm90IG5lZWRlZCBldmVuIGZv
ciBkb2N1bWVudHMsCiAgICAgICAgIC8vIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBp
cyBhbHdheXMgaW1tZWRpYXRlbHkgcGFyc2VkLgogICAgICAgICBzaGVldC0+b21pdFhtbERlY2xh
cmF0aW9uID0gdHJ1ZTsKIApAQCAtMzgwLDI4ICsyOTksMjggQEAgYm9vbCBYU0xUUHJvY2Vzc29y
Ojp0cmFuc2Zvcm1Ub1N0cmluZyhObwogICAgICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzc+OiBYU0xUIHByb2Nlc3NvciA8eHNsOnNvcnQ+IGFsZ29y
aXRobSBvbmx5IGNvbXBhcmVzIGJ5IGNvZGUgcG9pbnQKICAgICAgICAgeHNsdFNldEN0eHRTb3J0
RnVuYyh0cmFuc2Zvcm1Db250ZXh0LCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik7CiAKLSAgICAg
ICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIGxpYnhzbHQuIAorICAgICAg
ICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gbGlieHNsdC4KICAgICAgICAg
Ly8gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiB2ZXJzaW9uIDEuMS4xMywgc28gb25jZSB3ZSBz
aGlwIHRoYXQgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgaWYgKHRyYW5zZm9ybUNvbnRl
eHQtPmdsb2JhbFZhcnMgPT0gTlVMTCkKKyAgICAgICAgaWYgKCF0cmFuc2Zvcm1Db250ZXh0LT5n
bG9iYWxWYXJzKQogICAgICAgICAgICB0cmFuc2Zvcm1Db250ZXh0LT5nbG9iYWxWYXJzID0geG1s
SGFzaENyZWF0ZSgyMCk7CiAKICAgICAgICAgY29uc3QgY2hhcioqIHBhcmFtcyA9IHhzbHRQYXJh
bUFycmF5RnJvbVBhcmFtZXRlck1hcChtX3BhcmFtZXRlcnMpOwogICAgICAgICB4c2x0UXVvdGVV
c2VyUGFyYW1zKHRyYW5zZm9ybUNvbnRleHQsIHBhcmFtcyk7CiAgICAgICAgIHhtbERvY1B0ciBy
ZXN1bHREb2MgPSB4c2x0QXBwbHlTdHlsZXNoZWV0VXNlcihzaGVldCwgc291cmNlRG9jLCAwLCAw
LCAwLCB0cmFuc2Zvcm1Db250ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHhzbHRGcmVlVHJhbnNm
b3JtQ29udGV4dCh0cmFuc2Zvcm1Db250ZXh0KTsgICAgICAgIAorCisgICAgICAgIHhzbHRGcmVl
VHJhbnNmb3JtQ29udGV4dCh0cmFuc2Zvcm1Db250ZXh0KTsKICAgICAgICAgZnJlZVhzbHRQYXJh
bUFycmF5KHBhcmFtcyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzaG91bGRGcmVlU291cmNl
RG9jKQogICAgICAgICAgICAgeG1sRnJlZURvYyhzb3VyY2VEb2MpOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoc3VjY2VzcyA9IHNhdmVSZXN1bHRUb1N0cmluZyhyZXN1bHREb2MsIHNoZWV0LCBy
ZXN1bHRTdHJpbmcpKSB7CiAgICAgICAgICAgICBtaW1lVHlwZSA9IHJlc3VsdE1JTUVUeXBlKHJl
c3VsdERvYywgc2hlZXQpOwogICAgICAgICAgICAgcmVzdWx0RW5jb2RpbmcgPSAoY2hhciopcmVz
dWx0RG9jLT5lbmNvZGluZzsKICAgICAgICAgfQogICAgICAgICB4bWxGcmVlRG9jKHJlc3VsdERv
Yyk7CiAgICAgfQotICAgIAorCiAgICAgc2hlZXQtPm1ldGhvZCA9IG9yaWdNZXRob2Q7CiAgICAg
c2V0WFNMVExvYWRDYWxsQmFjaygwLCAwLCAwKTsKICAgICB4c2x0RnJlZVN0eWxlc2hlZXQoc2hl
ZXQpOwpAQCAtNDEwLDUxICszMjksNiBAQCBib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRv
U3RyaW5nKE5vCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnQ+
IFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvRG9jdW1lbnQoTm9kZSogc291cmNlTm9kZSkKLXsK
LSAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAg
ICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3Vy
Y2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVz
dWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDAp
OwotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW5z
Zm9ybVRvRnJhZ21lbnQoTm9kZSogc291cmNlTm9kZSwgRG9jdW1lbnQqIG91dHB1dERvYykKLXsK
LSAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAg
ICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0KLSAgICAvLyBJZiB0aGUgb3V0cHV0IGRvY3VtZW50
IGlzIEhUTUwsIGRlZmF1bHQgdG8gSFRNTCBtZXRob2QuCi0gICAgaWYgKG91dHB1dERvYy0+aXNI
VE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmVzdWx0TUlNRVR5cGUgPSAidGV4dC9odG1sIjsKLSAg
ICAKLSAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5vZGUsIHJlc3VsdE1JTUVUeXBl
LCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcsIHJlc3VsdE1JTUVU
eXBlLCBvdXRwdXREb2MpOwotfQotCi12b2lkIFhTTFRQcm9jZXNzb3I6OnNldFBhcmFtZXRlcihj
b25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIC8vIEZJWE1FOiBuYW1lc3BhY2Ugc3VwcG9ydD8K
LSAgICAvLyBzaG91bGQgbWFrZSBhIFF1YWxpZmllZE5hbWUgaGVyZSBidXQgd2UnZCBoYXZlIHRv
IGV4cG9zZSB0aGUgaW1wbAotICAgIG1fcGFyYW1ldGVycy5zZXQobG9jYWxOYW1lLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBYU0xUUHJvY2Vzc29yOjpnZXRQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiAv
Km5hbWVzcGFjZVVSSSovLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogbmFtZXNwYWNlIHN1cHBvcnQ/Ci0gICAgLy8gc2hvdWxkIG1ha2UgYSBRdWFsaWZp
ZWROYW1lIGhlcmUgYnV0IHdlJ2QgaGF2ZSB0byBleHBvc2UgdGhlIGltcGwKLSAgICByZXR1cm4g
bV9wYXJhbWV0ZXJzLmdldChsb2NhbE5hbWUpOwotfQotCi12b2lkIFhTTFRQcm9jZXNzb3I6OnJl
bW92ZVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIC8qbmFtZXNwYWNlVVJJKi8sIGNvbnN0IFN0cmlu
ZyYgbG9jYWxOYW1lKQotewotICAgIC8vIEZJWE1FOiBuYW1lc3BhY2Ugc3VwcG9ydD8KLSAgICBt
X3BhcmFtZXRlcnMucmVtb3ZlKGxvY2FsTmFtZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShYU0xUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39888</attachid>
            <date>2009-09-21 15:43:20 -0700</date>
            <delta_ts>2009-09-28 08:12:21 -0700</delta_ts>
            <desc>Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.</desc>
            <filename>Rename-XSLStyleSheet-to-XSLStyleSheetlibxslt.patch</filename>
            <type>text/plain</type>
            <size>36687</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDktMjEgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVuYW1lIFhTTFN0eWxlU2hlZXQuY3BwIHRvIFhTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MzAzCisKKyAg
ICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBh
dHRlcm5zIHRvIHRoZSBRdAorICAgICAgICBwb3J0LCByZW5hbWUgWFNMU3R5bGVTaGVldC5jcHAg
dG8gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwIGFzIHdlIHdpbGwKKyAgICAgICAgaGF2ZSBvdXIg
b3duIGltcGxlbWVudGF0aW9uIHdoaWNoIG1vc3QgbGlrZWx5IHdpbGwgbm90IHNoYXJlIGFueSBj
b2RlCisgICAgICAgIHdpdGggdGhlIGN1cnJlbnQgb25lLgorCisgICAgICAgIEFkZGl0aW9uYWxs
eSwgZml4IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIHhtbC9YU0xTdHls
ZVNoZWV0LmNwcDogUmVuYW1lZCB0byBYU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAuCisgICAgICAg
ICogeG1sL1hTTFN0eWxlU2hlZXQuaDogRml4IGluZGVudGF0aW9uLgorICAgICAgICAqIHhtbC9Y
U0xTdHlsZVNoZWV0TGlieHNsdC5jcHA6IEFkZGVkLgorCiAyMDA5LTA5LTIxICBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDg2MDQpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzk3LDcgKzIzOTcsNyBAQCB3
ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX1hTTFQ9MQogd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMSW1wb3J0
UnVsZS5oIFwKLQlXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmNwcCBcCisJV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldExpYnhzbHQuY3BwIFwKIAlXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0Lmgg
XAogCVdlYkNvcmUveG1sL1hTTFRFeHRlbnNpb25zLmNwcCBcCiAJV2ViQ29yZS94bWwvWFNMVEV4
dGVuc2lvbnMuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDg2MDQpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ0OCw3ICszNDQ4LDcgQEAKICAgICAgICAgICAgICd4
bWwvWFBhdGhWYXJpYWJsZVJlZmVyZW5jZS5oJywKICAgICAgICAgICAgICd4bWwvWFNMSW1wb3J0
UnVsZS5jcHAnLAogICAgICAgICAgICAgJ3htbC9YU0xJbXBvcnRSdWxlLmgnLAotICAgICAgICAg
ICAgJ3htbC9YU0xTdHlsZVNoZWV0LmNwcCcsCisgICAgICAgICAgICAneG1sL1hTTFN0eWxlU2hl
ZXRMaWJ4c2x0LmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFN0eWxlU2hlZXQuaCcsCiAgICAg
ICAgICAgICAneG1sL1hTTFRFeHRlbnNpb25zLmNwcCcsCiAgICAgICAgICAgICAneG1sL1hTTFRF
eHRlbnNpb25zLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDQ4NjA0KQorKysgV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNyArMTA4Myw3
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgeG1s
L1hQYXRoVmFsdWUuY3BwCiAgICAgICAgIHhtbC9YUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcAog
ICAgICAgICB4bWwvWFNMSW1wb3J0UnVsZS5jcHAKLSAgICAgICAgeG1sL1hTTFN0eWxlU2hlZXQu
Y3BwCisgICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKICAgICAgICAgeG1sL1hT
TFRFeHRlbnNpb25zLmNwcAogICAgICAgICB4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAogICAgICAg
ICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gNDg2MDQpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc2NCw3ICsyMzc2NCw3IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYU0xTdHls
ZVNoZWV0LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWFNMU3R5bGVTaGVldExpYnhz
bHQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ4NjA0KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIzMTcsNyArMjMxNyw3IEBACiAJCTkzRjE5QUY4MDgyNDVFNTkwMDFFOUFCQyAvKiBQb3NpdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTkx
RkM4QzA2MTMzNjY2MDA1RTM3OTAgLyogUG9zaXRpb24uY3BwICovOyB9OwogCQk5M0YxOUFGRDA4
MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNkEzRDUwNjYzQkYwNDAwNEQyOTE5IC8q
IEhUTUxDYW52YXNFbGVtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBRkYwODI0NUU1OTAwMUU5QUJD
IC8qIENsaXBib2FyZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi87
IH07Ci0JCTkzRjE5QjAzMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xTdHlsZVNoZWV0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZGMjQ5MDZEMThB
N0UwMDRBNkZBMyAvKiBYU0xTdHlsZVNoZWV0LmNwcCAqLzsgfTsKKwkJOTNGMTlCMDMwODI0NUU1
OTAwMUU5QUJDIC8qIFhTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiBY
U0xTdHlsZVNoZWV0TGlieHNsdC5jcHAgKi87IH07CiAJCTkzRjE5QjA0MDgyNDVFNTkwMDFFOUFC
QyAvKiBYU0xUUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDZGMjRCMDZEMThBN0UwMDRBNkZBMyAvKiBYU0xUUHJvY2Vzc29yLmNw
cCAqLzsgfTsKIAkJOTNGMTlCMDcwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTg1NjA1MTA3MDFG
OTExMDAyMzk3NjkgLyogV2ViQ29yZVZpZXcubSAqLzsgfTsKIAkJOTNGMTlCMDgwODI0NUU1OTAw
MUU5QUJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MEMyQTUwNzAyNjI5ODAwQUY2NDJDIC8qIFdlYkRhc2hi
b2FyZFJlZ2lvbi5tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWNhc3Qt
cXVhbCI7IH07IH07CkBAIC05MDY1LDcgKzkwNjUsNyBAQAogCQlCQzA2RURFMjBCRkQ2RDBEMDA4
NTZFOUQgLyogSlNIVE1MVGFibGVDZWxsRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MVGFibGVDZWxsRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzA2RUUwMjBCRkQ3MUFBMDA4NTZFOUQgLyogSlNIVE1MVGFibGVFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxUYWJsZUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzA2RUUwMzBCRkQ3MUFB
MDA4NTZFOUQgLyogSlNIVE1MVGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxUYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMU3R5
bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OworCQlCQzA2RjI0OTA2RDE4QTdFMDA0QTZGQTMgLyogWFNMU3R5bGVTaGVldExp
YnhzbHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEEwNkQxOEE3RTAwNEE2
RkEzIC8qIFhTTFN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gWFNMU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkMwNkYyNEIwNkQxOEE3RTAwNEE2
RkEzIC8qIFhTTFRQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWFNMVFByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzA2RjI0QzA2RDE4
QTdFMDA0QTZGQTMgLyogWFNMVFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUUHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMTQ4MDMsNyArMTQ4
MDMsNyBAQAogCQkJCTFBQjdGQzY3MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aFZhcmlhYmxlUmVm
ZXJlbmNlLmggKi8sCiAJCQkJODUyMTdFMDAwQTVFQ0Q0NzAwREI4RDAwIC8qIFhTTEltcG9ydFJ1
bGUuY3BwICovLAogCQkJCTg1MjE3RTAxMEE1RUNENDcwMERCOEQwMCAvKiBYU0xJbXBvcnRSdWxl
LmggKi8sCi0JCQkJQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXQuY3Bw
ICovLAorCQkJCUJDMDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiBYU0xTdHlsZVNoZWV0TGlieHNs
dC5jcHAgKi8sCiAJCQkJQkMwNkYyNEEwNkQxOEE3RTAwNEE2RkEzIC8qIFhTTFN0eWxlU2hlZXQu
aCAqLywKIAkJCQlFMUYxRTgyRDBDM0MyQkI5MDA2REIzOTEgLyogWFNMVEV4dGVuc2lvbnMuY3Bw
ICovLAogCQkJCUUxRjFFODJFMEMzQzJCQjkwMDZEQjM5MSAvKiBYU0xURXh0ZW5zaW9ucy5oICov
LApAQCAtMTk4OTEsNyArMTk4OTEsNyBAQAogCQkJCTFBQjdGQzg1MEE4QjkyRUMwMEQ5RDM3QiAv
KiBYUGF0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzg3MEE4QjkyRUMwMEQ5
RDM3QiAvKiBYUGF0aFZhcmlhYmxlUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1
MjE3RTAyMEE1RUNENDcwMERCOEQwMCAvKiBYU0xJbXBvcnRSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTkzRjE5QjAzMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xTdHlsZVNoZWV0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTkzRjE5QjAzMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xTdHlsZVNoZWV0
TGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUYxRTgyRjBDM0MyQkI5MDA2REIzOTEg
LyogWFNMVEV4dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlCMDQwODI0NUU1
OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUx
MkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxMiArMCwwIEBACi0vKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhTTCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5o
IgotCi0jaWYgRU5BQkxFKFhTTFQpCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAi
Q29uc29sZS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJO
b2RlLmgiCi0jaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiWE1MVG9rZW5pemVy
U2NvcGUuaCIKLSNpbmNsdWRlICJYU0xJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiWFNMVFByb2Nl
c3Nvci5oIgotI2luY2x1ZGUgImxvYWRlci5oIgotCi0jaW5jbHVkZSA8bGlieG1sL3VyaS5oPgot
I2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5j
bHVkZSAiU29mdExpbmtpbmcuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotU09GVF9M
SU5LX0xJQlJBUlkobGlieHNsdCkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0SXNCbGFuaywgaW50
LCAoeG1sQ2hhciAqc3RyKSwgKHN0cikpCi1TT0ZUX0xJTksobGlieHNsdCwgeHNsdEdldE5zUHJv
cCwgeG1sQ2hhciAqLCAoeG1sTm9kZVB0ciBub2RlLCBjb25zdCB4bWxDaGFyICpuYW1lLCBjb25z
dCB4bWxDaGFyICpuYW1lU3BhY2UpLCAobm9kZSwgbmFtZSwgbmFtZVNwYWNlKSkKLVNPRlRfTElO
SyhsaWJ4c2x0LCB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jLCB4c2x0U3R5bGVzaGVldFB0ciwgKHht
bERvY1B0ciBkb2MpLCAoZG9jKSkKLVNPRlRfTElOSyhsaWJ4c2x0LCB4c2x0TG9hZFN0eWxlc2hl
ZXRQSSwgeHNsdFN0eWxlc2hlZXRQdHIsICh4bWxEb2NQdHIgZG9jKSwgKGRvYykpCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1YU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhT
TEltcG9ydFJ1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFN0cmluZyYgaHJlZikKLSAgICA6IFN0eWxl
U2hlZXQocGFyZW50UnVsZSwgaHJlZikKLSAgICAsIG1fb3duZXJEb2N1bWVudCgwKQotICAgICwg
bV9zdHlsZXNoZWV0RG9jKDApCi0gICAgLCBtX2VtYmVkZGVkKGZhbHNlKQotICAgICwgbV9wcm9j
ZXNzZWQoZmFsc2UpIC8vIENoaWxkIHNoZWV0cyBnZXQgbWFya2VkIGFzIHByb2Nlc3NlZCB3aGVu
IHRoZSBsaWJ4c2x0IGVuZ2luZSBoYXMgZmluYWxseSBzZWVuIHRoZW0uCi0gICAgLCBtX3N0eWxl
c2hlZXREb2NUYWtlbihmYWxzZSkKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQotewotfQot
Ci1YU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0
cmluZyYgaHJlZiwgIGJvb2wgZW1iZWRkZWQpCi0gICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUs
IGhyZWYpCi0gICAgLCBtX293bmVyRG9jdW1lbnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKLSAg
ICAsIG1fc3R5bGVzaGVldERvYygwKQotICAgICwgbV9lbWJlZGRlZChlbWJlZGRlZCkKLSAgICAs
IG1fcHJvY2Vzc2VkKHRydWUpIC8vIFRoZSByb290IHNoZWV0IHN0YXJ0cyBvZmYgcHJvY2Vzc2Vk
LgotICAgICwgbV9zdHlsZXNoZWV0RG9jVGFrZW4oZmFsc2UpCi0gICAgLCBtX3BhcmVudFN0eWxl
U2hlZXQoMCkKLXsKLX0KLQotWFNMU3R5bGVTaGVldDo6flhTTFN0eWxlU2hlZXQoKQotewotICAg
IGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCi0gICAgICAgIHhtbEZyZWVEb2MobV9zdHlsZXNo
ZWV0RG9jKTsKLX0KLQotYm9vbCBYU0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQotewotICAgIHVu
c2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
ICsraSkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAo
cnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFhTTEltcG9ydFJ1bGUqIGltcG9y
dCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKLSAgICAgICAgICAgIGlmIChp
bXBvcnQtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBYU0xTdHlsZVNoZWV0Ojpj
aGVja0xvYWRlZCgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKSAKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFyZW50KCktPmNoZWNrTG9hZGVkKCk7Ci0gICAg
aWYgKG93bmVyTm9kZSgpKQotICAgICAgICBvd25lck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsKLX0K
LQoteG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6OmRvY3VtZW50KCkKLXsKLSAgICBpZiAobV9lbWJl
ZGRlZCAmJiBvd25lckRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAoeG1sRG9jUHRyKW93bmVy
RG9jdW1lbnQoKS0+dHJhbnNmb3JtU291cmNlKCk7Ci0gICAgcmV0dXJuIG1fc3R5bGVzaGVldERv
YzsKLX0KLQotdm9pZCBYU0xTdHlsZVNoZWV0OjpjbGVhckRvY3VtZW50cygpCi17Ci0gICAgbV9z
dHlsZXNoZWV0RG9jID0gMDsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBydWxl
ID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7Ci0gICAgICAg
ICAgICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4o
cnVsZSk7Ci0gICAgICAgICAgICBpZiAoaW1wb3J0LT5zdHlsZVNoZWV0KCkpCi0gICAgICAgICAg
ICAgICAgaW1wb3J0LT5zdHlsZVNoZWV0KCktPmNsZWFyRG9jdW1lbnRzKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLURvY0xvYWRlciogWFNMU3R5bGVTaGVldDo6ZG9jTG9hZGVyKCkKLXsKLSAg
ICBpZiAoIW1fb3duZXJEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1f
b3duZXJEb2N1bWVudC0+ZG9jTG9hZGVyKCk7Ci19Ci0KLWJvb2wgWFNMU3R5bGVTaGVldDo6cGFy
c2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wpCi17Ci0gICAgLy8gUGFyc2UgaW4g
YSBzaW5nbGUgY2h1bmsgaW50byBhbiB4bWxEb2NQdHIKLSAgICBjb25zdCBVQ2hhciBCT00gPSAw
eEZFRkY7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKLSAgICBpZiAoIW1fc3R5bGVzaGVl
dERvY1Rha2VuKQotICAgICAgICB4bWxGcmVlRG9jKG1fc3R5bGVzaGVldERvYyk7Ci0gICAgbV9z
dHlsZXNoZWV0RG9jVGFrZW4gPSBmYWxzZTsKLQotICAgIENvbnNvbGUqIGNvbnNvbGUgPSAwOwot
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBvd25lckRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAg
IGNvbnNvbGUgPSBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKLQotICAgIFhNTFRva2Vu
aXplclNjb3BlIHNjb3BlKGRvY0xvYWRlcigpLCBYU0xUUHJvY2Vzc29yOjpnZW5lcmljRXJyb3JG
dW5jLCBYU0xUUHJvY2Vzc29yOjpwYXJzZUVycm9yRnVuYywgY29uc29sZSk7Ci0KLSAgICBjb25z
dCBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcuY2hh
cmFjdGVycygpKTsKLSAgICBpbnQgc2l6ZSA9IHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hh
cik7Ci0KLSAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQgPSB4bWxDcmVhdGVNZW1vcnlQYXJzZXJD
dHh0KGJ1ZmZlciwgc2l6ZSk7Ci0KLSAgICBpZiAobV9wYXJlbnRTdHlsZVNoZWV0KSB7Ci0gICAg
ICAgIC8vIFRoZSBYU0wgdHJhbnNmb3JtIG1heSBsZWF2ZSB0aGUgbmV3bHktdHJhbnNmb3JtZWQg
ZG9jdW1lbnQKLSAgICAgICAgLy8gd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzeW1ib2wgZGljdGlv
bmFyaWVzIG9mIHRoZSBzdHlsZSBzaGVldAotICAgICAgICAvLyBhbmQgYW55IG9mIGl0cyBjaGls
ZHJlbi4gWE1MIGRvY3VtZW50IGRpc3Bvc2FsIGNhbiBjb3JydXB0IG1lbW9yeQotICAgICAgICAv
LyBpZiBhIGRvY3VtZW50IHVzZXMgbW9yZSB0aGFuIG9uZSBzeW1ib2wgZGljdGlvbmFyeSwgc28g
d2UKLSAgICAgICAgLy8gZW5zdXJlIHRoYXQgYWxsIGNoaWxkIHN0eWxlc2hlZXRzIHVzZSB0aGUg
c2FtZSBkaWN0aW9uYXJpZXMgYXMgdGhlaXIKLSAgICAgICAgLy8gcGFyZW50cy4KLSAgICAgICAg
eG1sRGljdEZyZWUoY3R4dC0+ZGljdCk7Ci0gICAgICAgIGN0eHQtPmRpY3QgPSBtX3BhcmVudFN0
eWxlU2hlZXQtPm1fc3R5bGVzaGVldERvYy0+ZGljdDsKLSAgICAgICAgeG1sRGljdFJlZmVyZW5j
ZShjdHh0LT5kaWN0KTsKLSAgICB9Ci0KLSAgICBtX3N0eWxlc2hlZXREb2MgPSB4bWxDdHh0UmVh
ZE1lbW9yeShjdHh0LCBidWZmZXIsIHNpemUsCi0gICAgICAgIGhyZWYoKS51dGY4KCkuZGF0YSgp
LAotICAgICAgICBCT01IaWdoQnl0ZSA9PSAweEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIs
IAotICAgICAgICBYTUxfUEFSU0VfTk9FTlQgfCBYTUxfUEFSU0VfRFREQVRUUiB8IFhNTF9QQVJT
RV9OT1dBUk5JTkcgfCBYTUxfUEFSU0VfTk9DREFUQSk7Ci0gICAgeG1sRnJlZVBhcnNlckN0eHQo
Y3R4dCk7Ci0KLSAgICBsb2FkQ2hpbGRTaGVldHMoKTsKLQotICAgIHJldHVybiBtX3N0eWxlc2hl
ZXREb2M7Ci19Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXRzKCkKLXsKLSAg
ICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB4bWxOb2RlUHRy
IHN0eWxlc2hlZXRSb290ID0gZG9jdW1lbnQoKS0+Y2hpbGRyZW47Ci0gICAgCi0gICAgLy8gVG9w
IGxldmVsIGNoaWxkcmVuIG1heSBpbmNsdWRlIG90aGVyIHRoaW5ncyBzdWNoIGFzIERURCBub2Rl
cywgd2UgaWdub3JlIHRob3NlLgotICAgIHdoaWxlIChzdHlsZXNoZWV0Um9vdCAmJiBzdHlsZXNo
ZWV0Um9vdC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFKQotICAgICAgICBzdHlsZXNoZWV0Um9v
dCA9IHN0eWxlc2hlZXRSb290LT5uZXh0OwotICAgIAotICAgIGlmIChtX2VtYmVkZGVkKSB7Ci0g
ICAgICAgIC8vIFdlIGhhdmUgdG8gbG9jYXRlIChieSBJRCkgdGhlIGFwcHJvcHJpYXRlIGVtYmVk
ZGVkIHN0eWxlc2hlZXQgZWxlbWVudCwgc28gdGhhdCB3ZSBjYW4gd2FsayB0aGUgCi0gICAgICAg
IC8vIGltcG9ydC9pbmNsdWRlIGxpc3QuCi0gICAgICAgIHhtbEF0dHJQdHIgaWROb2RlID0geG1s
R2V0SUQoZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVmKCkudXRmOCgpLmRhdGEoKSkp
OwotICAgICAgICBpZiAoIWlkTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5
bGVzaGVldFJvb3QgPSBpZE5vZGUtPnBhcmVudDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBG
SVhNRTogTmVlZCB0byBoYW5kbGUgYW4gZXh0ZXJuYWwgVVJJIHdpdGggYSAjIGluIGl0LiAgVGhp
cyBpcyBhIHByZXR0eSBtaW5vciBlZGdlIGNhc2UsIHNvIHdlJ2xsIGRlYWwKLSAgICAgICAgLy8g
d2l0aCBpdCBsYXRlci4KLSAgICB9Ci0gICAgCi0gICAgaWYgKHN0eWxlc2hlZXRSb290KSB7Ci0g
ICAgICAgIC8vIFdhbGsgdGhlIGNoaWxkcmVuIG9mIHRoZSByb290IGVsZW1lbnQgYW5kIGxvb2sg
Zm9yIGltcG9ydC9pbmNsdWRlIGVsZW1lbnRzLgotICAgICAgICAvLyBJbXBvcnRzIG11c3Qgb2Nj
dXIgZmlyc3QuCi0gICAgICAgIHhtbE5vZGVQdHIgY3VyciA9IHN0eWxlc2hlZXRSb290LT5jaGls
ZHJlbjsKLSAgICAgICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT50eXBl
ICE9IFhNTF9FTEVNRU5UX05PREUpIHsKLSAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4
dDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBvcnQiKSkg
ewotICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3AoY3Vyciwg
KGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOyAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBsb2FkQ2hpbGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25zdCBj
aGFyKil1cmlSZWYpKTsKLSAgICAgICAgICAgICAgICB4bWxGcmVlKHVyaVJlZik7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGN1cnIgPSBj
dXJyLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93IGhhbmRsZSBpbmNsdWRlcy4K
LSAgICAgICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT50eXBlID09IFhN
TF9FTEVNRU5UX05PREUgJiYgSVNfWFNMVF9FTEVNKGN1cnIpICYmIElTX1hTTFRfTkFNRShjdXJy
LCAiaW5jbHVkZSIpKSB7Ci0gICAgICAgICAgICAgICAgeG1sQ2hhciogdXJpUmVmID0geHNsdEdl
dE5zUHJvcChjdXJyLCAoY29uc3QgeG1sQ2hhciopImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7Ci0g
ICAgICAgICAgICAgICAgbG9hZENoaWxkU2hlZXQoU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hh
ciopdXJpUmVmKSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJlZSh1cmlSZWYpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVm
KQotewotICAgIFJlZlB0cjxYU0xJbXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBYU0xJbXBvcnRSdWxl
OjpjcmVhdGUodGhpcywgaHJlZik7Ci0gICAgYXBwZW5kKGNoaWxkUnVsZSk7Ci0gICAgY2hpbGRS
dWxlLT5sb2FkU2hlZXQoKTsKLX0KLQoteHNsdFN0eWxlc2hlZXRQdHIgWFNMU3R5bGVTaGVldDo6
Y29tcGlsZVN0eWxlU2hlZXQoKQotewotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIHJlcG9y
dGluZyBmb3IgdGhlIHN0eWxlc2hlZXQgY29tcGlsYXRpb24gcHJvY2Vzcy4KLSAgICBpZiAobV9l
bWJlZGRlZCkKLSAgICAgICAgcmV0dXJuIHhzbHRMb2FkU3R5bGVzaGVldFBJKGRvY3VtZW50KCkp
OwotICAgIAotICAgIC8vIHhzbHRQYXJzZVN0eWxlc2hlZXREb2MgbWFrZXMgdGhlIGRvY3VtZW50
IHBhcnQgb2YgdGhlIHN0eWxlc2hlZXQKLSAgICAvLyBzbyB3ZSBoYXZlIHRvIHJlbGVhc2Ugb3Vy
IHBvaW50ZXIgdG8gaXQuCi0gICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7Ci0gICAg
eHNsdFN0eWxlc2hlZXRQdHIgcmVzdWx0ID0geHNsdFBhcnNlU3R5bGVzaGVldERvYyhtX3N0eWxl
c2hlZXREb2MpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIG1fc3R5bGVzaGVldERvY1Rha2Vu
ID0gdHJ1ZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6OnNl
dFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCogcGFyZW50KQotewotICAgIG1fcGFyZW50
U3R5bGVTaGVldCA9IHBhcmVudDsKLSAgICBpZiAocGFyZW50KQotICAgICAgICBtX293bmVyRG9j
dW1lbnQgPSBwYXJlbnQtPm93bmVyRG9jdW1lbnQoKTsKLX0KLQoteG1sRG9jUHRyIFhTTFN0eWxl
U2hlZXQ6OmxvY2F0ZVN0eWxlc2hlZXRTdWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBj
b25zdCB4bWxDaGFyKiB1cmkpCi17Ci0gICAgYm9vbCBtYXRjaGVkUGFyZW50ID0gKHBhcmVudERv
YyA9PSBkb2N1bWVudCgpKTsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBydWxl
ID0gaXRlbShpKTsKLSAgICAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7Ci0gICAgICAg
ICAgICBYU0xJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxYU0xJbXBvcnRSdWxlKj4o
cnVsZSk7Ci0gICAgICAgICAgICBYU0xTdHlsZVNoZWV0KiBjaGlsZCA9IGltcG9ydC0+c3R5bGVT
aGVldCgpOwotICAgICAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChtYXRjaGVkUGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5wcm9jZXNzZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGxp
YnhzbHQgaGFzIGJlZW4gZ2l2ZW4gdGhpcyBzaGVldCBhbHJlYWR5LgotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBVUkkgb2YgdGhlIGNoaWxkIHN0eWxlc2hl
ZXQgYWdhaW5zdCB0aGUgZG9jIFVSSS4KLSAgICAgICAgICAgICAgICAvLyBJbiBvcmRlciB0byBl
bnN1cmUgdGhhdCBsaWJ4bWwgY2Fub25pY2FsaXplZCBib3RoIFVSTHMsIHdlIGdldCB0aGUgb3Jp
Z2luYWwgaHJlZgotICAgICAgICAgICAgICAgIC8vIHN0cmluZyBmcm9tIHRoZSBpbXBvcnQgcnVs
ZSBhbmQgY2Fub25pY2FsaXplIGl0IHVzaW5nIGxpYnhtbCBiZWZvcmUgY29tcGFyaW5nIGl0Ci0g
ICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgVVJJIGFyZ3VtZW50LgotICAgICAgICAgICAgICAg
IENTdHJpbmcgaW1wb3J0SHJlZiA9IGltcG9ydC0+aHJlZigpLnV0ZjgoKTsKLSAgICAgICAgICAg
ICAgICB4bWxDaGFyKiBiYXNlID0geG1sTm9kZUdldEJhc2UocGFyZW50RG9jLCAoeG1sTm9kZVB0
cilwYXJlbnREb2MpOwotICAgICAgICAgICAgICAgIHhtbENoYXIqIGNoaWxkVVJJID0geG1sQnVp
bGRVUkkoKGNvbnN0IHhtbENoYXIqKWltcG9ydEhyZWYuZGF0YSgpLCBiYXNlKTsKLSAgICAgICAg
ICAgICAgICBib29sIGVxdWFsVVJJcyA9IHhtbFN0ckVxdWFsKHVyaSwgY2hpbGRVUkkpOwotICAg
ICAgICAgICAgICAgIHhtbEZyZWUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgeG1sRnJlZShjaGls
ZFVSSSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsVVJJcykgewotICAgICAgICAgICAgICAg
ICAgICBjaGlsZC0+bWFya0FzUHJvY2Vzc2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjaGlsZC0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHhtbERvY1B0ciByZXN1bHQgPSBpbXBvcnQtPnN0eWxlU2hl
ZXQoKS0+bG9jYXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHBhcmVudERvYywgdXJpKTsKLSAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwot
fQotCi12b2lkIFhTTFN0eWxlU2hlZXQ6Om1hcmtBc1Byb2Nlc3NlZCgpCi17Ci0gICAgQVNTRVJU
KCFtX3Byb2Nlc3NlZCk7Ci0gICAgQVNTRVJUKCFtX3N0eWxlc2hlZXREb2NUYWtlbik7Ci0gICAg
bV9wcm9jZXNzZWQgPSB0cnVlOwotICAgIG1fc3R5bGVzaGVldERvY1Rha2VuID0gdHJ1ZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFhTTFQpCkluZGV4
OiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldC5oCShyZXZpc2lvbiA0ODYwNCkKKysrIFdlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNjYgKzMyLDY2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBYU0xJ
bXBvcnRSdWxlOwotICAgIAotY2xhc3MgWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBjcmVhdGUo
WFNMSW1wb3J0UnVsZSogcGFyZW50SW1wb3J0LCBjb25zdCBTdHJpbmcmIGhyZWYpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50SW1wb3J0LCBo
cmVmKSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0
ZShOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgZmFsc2Up
KTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlRW1i
ZWRkZWQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYsIHRy
dWUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5YU0xTdHlsZVNoZWV0KCk7Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzWFNMU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC94bWwiOyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wg
c3RyaWN0ID0gdHJ1ZSk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpOwotICAg
IHZpcnR1YWwgdm9pZCBjaGVja0xvYWRlZCgpOwotCi0gICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMo
KTsKLSAgICB2b2lkIGxvYWRDaGlsZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7Ci0KLSAgICB4
c2x0U3R5bGVzaGVldFB0ciBjb21waWxlU3R5bGVTaGVldCgpOwotCi0gICAgRG9jTG9hZGVyKiBk
b2NMb2FkZXIoKTsKLQotICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9v
d25lckRvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hl
ZXQqIHBhcmVudCk7Ci0KLSAgICB4bWxEb2NQdHIgZG9jdW1lbnQoKTsKLQotICAgIHZvaWQgY2xl
YXJEb2N1bWVudHMoKTsKLQotICAgIHhtbERvY1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3Vy
Y2UoeG1sRG9jUHRyIHBhcmVudERvYywgY29uc3QgeG1sQ2hhciogdXJpKTsKLSAgICAKLSAgICB2
b2lkIG1hcmtBc1Byb2Nlc3NlZCgpOwotICAgIGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jZXNzZWQ7IH0KLQotcHJpdmF0ZToKLSAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBh
cmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgYm9vbCBlbWJlZGRlZCk7Ci0gICAgWFNMU3R5
bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZik7
Ci0KLSAgICBEb2N1bWVudCogbV9vd25lckRvY3VtZW50OwotICAgIHhtbERvY1B0ciBtX3N0eWxl
c2hlZXREb2M7Ci0gICAgYm9vbCBtX2VtYmVkZGVkOwotICAgIGJvb2wgbV9wcm9jZXNzZWQ7Ci0g
ICAgYm9vbCBtX3N0eWxlc2hlZXREb2NUYWtlbjsKLSAgICBYU0xTdHlsZVNoZWV0KiBtX3BhcmVu
dFN0eWxlU2hlZXQ7Ci19OworICAgIGNsYXNzIERvY0xvYWRlcjsKKyAgICBjbGFzcyBEb2N1bWVu
dDsKKyAgICBjbGFzcyBYU0xJbXBvcnRSdWxlOworCisgICAgY2xhc3MgWFNMU3R5bGVTaGVldCA6
IHB1YmxpYyBTdHlsZVNoZWV0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNv
bnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudEltcG9ydCwgaHJlZikpOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBwYXJlbnRO
b2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBmYWxzZSkpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZUVt
YmVkZGVkKE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xTdHlsZVNoZWV0KHBhcmVudE5vZGUs
IGhyZWYsIHRydWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgflhTTFN0eWxlU2hl
ZXQoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJl
dHVybiAidGV4dC94bWwiOyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNv
bnN0IFN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCA9IHRydWUpOworCisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0xvYWRpbmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7
CisKKyAgICAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMoKTsKKyAgICAgICAgdm9pZCBsb2FkQ2hp
bGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpOworCisgICAgICAgIHhzbHRTdHlsZXNoZWV0UHRy
IGNvbXBpbGVTdHlsZVNoZWV0KCk7CisKKyAgICAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsK
KworICAgICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIG1fb3duZXJEb2N1
bWVudDsgfQorICAgICAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoWFNMU3R5bGVTaGVldCog
cGFyZW50KTsKKworICAgICAgICB4bWxEb2NQdHIgZG9jdW1lbnQoKTsKKworICAgICAgICB2b2lk
IGNsZWFyRG9jdW1lbnRzKCk7CisKKyAgICAgICAgeG1sRG9jUHRyIGxvY2F0ZVN0eWxlc2hlZXRT
dWJSZXNvdXJjZSh4bWxEb2NQdHIgcGFyZW50RG9jLCBjb25zdCB4bWxDaGFyKiB1cmkpOworCisg
ICAgICAgIHZvaWQgbWFya0FzUHJvY2Vzc2VkKCk7CisgICAgICAgIGJvb2wgcHJvY2Vzc2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFhT
TFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBib29sIGVt
YmVkZGVkKTsKKyAgICAgICAgWFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBv
cnQsIGNvbnN0IFN0cmluZyYgaHJlZik7CisKKyAgICAgICAgRG9jdW1lbnQqIG1fb3duZXJEb2N1
bWVudDsKKyAgICAgICAgeG1sRG9jUHRyIG1fc3R5bGVzaGVldERvYzsKKyAgICAgICAgYm9vbCBt
X2VtYmVkZGVkOworICAgICAgICBib29sIG1fcHJvY2Vzc2VkOworICAgICAgICBib29sIG1fc3R5
bGVzaGVldERvY1Rha2VuOworICAgICAgICBYU0xTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hl
ZXQ7CisgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3ht
bC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNM
U3R5bGVTaGVldExpYnhzbHQuY3BwCShyZXZpc2lvbiA0ODYwNCkJKGZyb20gV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldC5jcHA6NDg2MDQpCisrKyBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCisKKyNpZiBF
TkFCTEUoWFNMVCkKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgi
CisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNp
bmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXJTY29wZS5oIgor
I2luY2x1ZGUgIlhTTEltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCisj
aW5jbHVkZSAibG9hZGVyLmgiCisKKyNpbmNsdWRlIDxsaWJ4bWwvdXJpLmg+CisjaW5jbHVkZSA8
bGlieHNsdC94c2x0dXRpbHMuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitTT0ZUX0xJTktfTElCUkFS
WShsaWJ4c2x0KQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRJc0JsYW5rLCBpbnQsICh4bWxDaGFy
ICpzdHIpLCAoc3RyKSkKK1NPRlRfTElOSyhsaWJ4c2x0LCB4c2x0R2V0TnNQcm9wLCB4bWxDaGFy
ICosICh4bWxOb2RlUHRyIG5vZGUsIGNvbnN0IHhtbENoYXIgKm5hbWUsIGNvbnN0IHhtbENoYXIg
Km5hbWVTcGFjZSksIChub2RlLCBuYW1lLCBuYW1lU3BhY2UpKQorU09GVF9MSU5LKGxpYnhzbHQs
IHhzbHRQYXJzZVN0eWxlc2hlZXREb2MsIHhzbHRTdHlsZXNoZWV0UHRyLCAoeG1sRG9jUHRyIGRv
YyksIChkb2MpKQorU09GVF9MSU5LKGxpYnhzbHQsIHhzbHRMb2FkU3R5bGVzaGVldFBJLCB4c2x0
U3R5bGVzaGVldFB0ciwgKHhtbERvY1B0ciBkb2MpLCAoZG9jKSkKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1hTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0UnVs
ZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBocmVmKQorICAgIDogU3R5bGVTaGVldChwYXJl
bnRSdWxlLCBocmVmKQorICAgICwgbV9vd25lckRvY3VtZW50KDApCisgICAgLCBtX3N0eWxlc2hl
ZXREb2MoMCkKKyAgICAsIG1fZW1iZWRkZWQoZmFsc2UpCisgICAgLCBtX3Byb2Nlc3NlZChmYWxz
ZSkgLy8gQ2hpbGQgc2hlZXRzIGdldCBtYXJrZWQgYXMgcHJvY2Vzc2VkIHdoZW4gdGhlIGxpYnhz
bHQgZW5naW5lIGhhcyBmaW5hbGx5IHNlZW4gdGhlbS4KKyAgICAsIG1fc3R5bGVzaGVldERvY1Rh
a2VuKGZhbHNlKQorICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KDApCit7Cit9CisKK1hTTFN0eWxl
U2hlZXQ6OlhTTFN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVm
LCAgYm9vbCBlbWJlZGRlZCkKKyAgICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKKyAg
ICAsIG1fb3duZXJEb2N1bWVudChwYXJlbnROb2RlLT5kb2N1bWVudCgpKQorICAgICwgbV9zdHls
ZXNoZWV0RG9jKDApCisgICAgLCBtX2VtYmVkZGVkKGVtYmVkZGVkKQorICAgICwgbV9wcm9jZXNz
ZWQodHJ1ZSkgLy8gVGhlIHJvb3Qgc2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCisgICAgLCBt
X3N0eWxlc2hlZXREb2NUYWtlbihmYWxzZSkKKyAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQor
eworfQorCitYU0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCit7CisgICAgaWYgKCFtX3N0
eWxlc2hlZXREb2NUYWtlbikKKyAgICAgICAgeG1sRnJlZURvYyhtX3N0eWxlc2hlZXREb2MpOwor
fQorCitib29sIFhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCit7CisgICAgdW5zaWduZWQgbGVu
ID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Cisg
ICAgICAgIFN0eWxlQmFzZSogcnVsZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChydWxlLT5pc0lt
cG9ydFJ1bGUoKSkgeworICAgICAgICAgICAgWFNMSW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGlj
X2Nhc3Q8WFNMSW1wb3J0UnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgaWYgKGltcG9ydC0+aXNM
b2FkaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVk
KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkpIAorICAgICAgICByZXR1cm47CisgICAgaWYgKHBh
cmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICBpZiAob3duZXJO
b2RlKCkpCisgICAgICAgIG93bmVyTm9kZSgpLT5zaGVldExvYWRlZCgpOworfQorCit4bWxEb2NQ
dHIgWFNMU3R5bGVTaGVldDo6ZG9jdW1lbnQoKQoreworICAgIGlmIChtX2VtYmVkZGVkICYmIG93
bmVyRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICh4bWxEb2NQdHIpb3duZXJEb2N1bWVudCgp
LT50cmFuc2Zvcm1Tb3VyY2UoKTsKKyAgICByZXR1cm4gbV9zdHlsZXNoZWV0RG9jOworfQorCit2
b2lkIFhTTFN0eWxlU2hlZXQ6OmNsZWFyRG9jdW1lbnRzKCkKK3sKKyAgICBtX3N0eWxlc2hlZXRE
b2MgPSAwOworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkp
OworICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIFhTTElt
cG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKKyAg
ICAgICAgICAgIGlmIChpbXBvcnQtPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICBpbXBv
cnQtPnN0eWxlU2hlZXQoKS0+Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworRG9jTG9hZGVyKiBYU0xTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQoreworICAgIGlmICghbV9v
d25lckRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vd25lckRvY3Vt
ZW50LT5kb2NMb2FkZXIoKTsKK30KKworYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCkKK3sKKyAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBj
aHVuayBpbnRvIGFuIHhtbERvY1B0cgorICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KCZCT00pOworICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4p
CisgICAgICAgIHhtbEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKKyAgICBtX3N0eWxlc2hlZXRE
b2NUYWtlbiA9IGZhbHNlOworCisgICAgQ29uc29sZSogY29uc29sZSA9IDA7CisgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgY29uc29sZSA9
IGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpOworCisgICAgWE1MVG9rZW5pemVyU2NvcGUg
c2NvcGUoZG9jTG9hZGVyKCksIFhTTFRQcm9jZXNzb3I6OmdlbmVyaWNFcnJvckZ1bmMsIFhTTFRQ
cm9jZXNzb3I6OnBhcnNlRXJyb3JGdW5jLCBjb25zb2xlKTsKKworICAgIGNvbnN0IGNoYXIqIGJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzKCkp
OworICAgIGludCBzaXplID0gc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAg
IHhtbFBhcnNlckN0eHRQdHIgY3R4dCA9IHhtbENyZWF0ZU1lbW9yeVBhcnNlckN0eHQoYnVmZmVy
LCBzaXplKTsKKworICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgLy8gVGhl
IFhTTCB0cmFuc2Zvcm0gbWF5IGxlYXZlIHRoZSBuZXdseS10cmFuc2Zvcm1lZCBkb2N1bWVudAor
ICAgICAgICAvLyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbCBkaWN0aW9uYXJpZXMgb2Yg
dGhlIHN0eWxlIHNoZWV0CisgICAgICAgIC8vIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLiBYTUwg
ZG9jdW1lbnQgZGlzcG9zYWwgY2FuIGNvcnJ1cHQgbWVtb3J5CisgICAgICAgIC8vIGlmIGEgZG9j
dW1lbnQgdXNlcyBtb3JlIHRoYW4gb25lIHN5bWJvbCBkaWN0aW9uYXJ5LCBzbyB3ZQorICAgICAg
ICAvLyBlbnN1cmUgdGhhdCBhbGwgY2hpbGQgc3R5bGVzaGVldHMgdXNlIHRoZSBzYW1lIGRpY3Rp
b25hcmllcyBhcyB0aGVpcgorICAgICAgICAvLyBwYXJlbnRzLgorICAgICAgICB4bWxEaWN0RnJl
ZShjdHh0LT5kaWN0KTsKKyAgICAgICAgY3R4dC0+ZGljdCA9IG1fcGFyZW50U3R5bGVTaGVldC0+
bV9zdHlsZXNoZWV0RG9jLT5kaWN0OworICAgICAgICB4bWxEaWN0UmVmZXJlbmNlKGN0eHQtPmRp
Y3QpOworICAgIH0KKworICAgIG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFkTWVtb3J5KGN0
eHQsIGJ1ZmZlciwgc2l6ZSwKKyAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCksCisgICAgICAg
IEJPTUhpZ2hCeXRlID09IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwgCisgICAgICAg
IFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERBVFRSIHwgWE1MX1BBUlNFX05PV0FSTklO
RyB8IFhNTF9QQVJTRV9OT0NEQVRBKTsKKyAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKwor
ICAgIGxvYWRDaGlsZFNoZWV0cygpOworCisgICAgcmV0dXJuIG1fc3R5bGVzaGVldERvYzsKK30K
Kwordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldHMoKQoreworICAgIGlmICghZG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHhtbE5vZGVQdHIgc3R5bGVzaGVl
dFJvb3QgPSBkb2N1bWVudCgpLT5jaGlsZHJlbjsKKyAgICAKKyAgICAvLyBUb3AgbGV2ZWwgY2hp
bGRyZW4gbWF5IGluY2x1ZGUgb3RoZXIgdGhpbmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25v
cmUgdGhvc2UuCisgICAgd2hpbGUgKHN0eWxlc2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50
eXBlICE9IFhNTF9FTEVNRU5UX05PREUpCisgICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVz
aGVldFJvb3QtPm5leHQ7CisgICAgCisgICAgaWYgKG1fZW1iZWRkZWQpIHsKKyAgICAgICAgLy8g
V2UgaGF2ZSB0byBsb2NhdGUgKGJ5IElEKSB0aGUgYXBwcm9wcmlhdGUgZW1iZWRkZWQgc3R5bGVz
aGVldCBlbGVtZW50LCBzbyB0aGF0IHdlIGNhbiB3YWxrIHRoZSAKKyAgICAgICAgLy8gaW1wb3J0
L2luY2x1ZGUgbGlzdC4KKyAgICAgICAgeG1sQXR0clB0ciBpZE5vZGUgPSB4bWxHZXRJRChkb2N1
bWVudCgpLCAoY29uc3QgeG1sQ2hhciopKGhyZWYoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAg
IGlmICghaWROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdHlsZXNoZWV0Um9v
dCA9IGlkTm9kZS0+cGFyZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGhhbmRsZSBhbiBleHRlcm5hbCBVUkkgd2l0aCBhICMgaW4gaXQuICBUaGlzIGlzIGEgcHJl
dHR5IG1pbm9yIGVkZ2UgY2FzZSwgc28gd2UnbGwgZGVhbAorICAgICAgICAvLyB3aXRoIGl0IGxh
dGVyLgorICAgIH0KKyAgICAKKyAgICBpZiAoc3R5bGVzaGVldFJvb3QpIHsKKyAgICAgICAgLy8g
V2FsayB0aGUgY2hpbGRyZW4gb2YgdGhlIHJvb3QgZWxlbWVudCBhbmQgbG9vayBmb3IgaW1wb3J0
L2luY2x1ZGUgZWxlbWVudHMuCisgICAgICAgIC8vIEltcG9ydHMgbXVzdCBvY2N1ciBmaXJzdC4K
KyAgICAgICAgeG1sTm9kZVB0ciBjdXJyID0gc3R5bGVzaGVldFJvb3QtPmNoaWxkcmVuOworICAg
ICAgICB3aGlsZSAoY3VycikgeworICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgIT0gWE1MX0VM
RU1FTlRfTk9ERSkgeworICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKElTX1hT
TFRfRUxFTShjdXJyKSAmJiBJU19YU0xUX05BTUUoY3VyciwgImltcG9ydCIpKSB7CisgICAgICAg
ICAgICAgICAgeG1sQ2hhciogdXJpUmVmID0geHNsdEdldE5zUHJvcChjdXJyLCAoY29uc3QgeG1s
Q2hhciopImhyZWYiLCBYU0xUX05BTUVTUEFDRSk7ICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGxvYWRDaGlsZFNoZWV0KFN0cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXVyaVJl
ZikpOworICAgICAgICAgICAgICAgIHhtbEZyZWUodXJpUmVmKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7
CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgaGFuZGxlIGluY2x1ZGVzLgorICAgICAgICB3
aGlsZSAoY3VycikgeworICAgICAgICAgICAgaWYgKGN1cnItPnR5cGUgPT0gWE1MX0VMRU1FTlRf
Tk9ERSAmJiBJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbmNsdWRl
IikpIHsKKyAgICAgICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1
cnIsIChjb25zdCB4bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsKKyAgICAgICAgICAg
ICAgICBsb2FkQ2hpbGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKil1cmlSZWYp
KTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKHVyaVJlZik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBY
U0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25zdCBTdHJpbmcmIGhyZWYpCit7CisgICAg
UmVmUHRyPFhTTEltcG9ydFJ1bGU+IGNoaWxkUnVsZSA9IFhTTEltcG9ydFJ1bGU6OmNyZWF0ZSh0
aGlzLCBocmVmKTsKKyAgICBhcHBlbmQoY2hpbGRSdWxlKTsKKyAgICBjaGlsZFJ1bGUtPmxvYWRT
aGVldCgpOworfQorCit4c2x0U3R5bGVzaGVldFB0ciBYU0xTdHlsZVNoZWV0Ojpjb21waWxlU3R5
bGVTaGVldCgpCit7CisgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0
aGUgc3R5bGVzaGVldCBjb21waWxhdGlvbiBwcm9jZXNzLgorICAgIGlmIChtX2VtYmVkZGVkKQor
ICAgICAgICByZXR1cm4geHNsdExvYWRTdHlsZXNoZWV0UEkoZG9jdW1lbnQoKSk7CisgICAgCisg
ICAgLy8geHNsdFBhcnNlU3R5bGVzaGVldERvYyBtYWtlcyB0aGUgZG9jdW1lbnQgcGFydCBvZiB0
aGUgc3R5bGVzaGVldAorICAgIC8vIHNvIHdlIGhhdmUgdG8gcmVsZWFzZSBvdXIgcG9pbnRlciB0
byBpdC4KKyAgICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKKyAgICB4c2x0U3R5bGVz
aGVldFB0ciByZXN1bHQgPSB4c2x0UGFyc2VTdHlsZXNoZWV0RG9jKG1fc3R5bGVzaGVldERvYyk7
CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6c2V0UGFyZW50U3R5
bGVTaGVldChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpCit7CisgICAgbV9wYXJlbnRTdHlsZVNoZWV0
ID0gcGFyZW50OworICAgIGlmIChwYXJlbnQpCisgICAgICAgIG1fb3duZXJEb2N1bWVudCA9IHBh
cmVudC0+b3duZXJEb2N1bWVudCgpOworfQorCit4bWxEb2NQdHIgWFNMU3R5bGVTaGVldDo6bG9j
YXRlU3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENo
YXIqIHVyaSkKK3sKKyAgICBib29sIG1hdGNoZWRQYXJlbnQgPSAocGFyZW50RG9jID09IGRvY3Vt
ZW50KCkpOworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBpdGVtKGkp
OworICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIFhTTElt
cG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PFhTTEltcG9ydFJ1bGUqPihydWxlKTsKKyAg
ICAgICAgICAgIFhTTFN0eWxlU2hlZXQqIGNoaWxkID0gaW1wb3J0LT5zdHlsZVNoZWV0KCk7Cisg
ICAgICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKG1hdGNoZWRQYXJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnBy
b2Nlc3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gbGlieHNsdCBoYXMg
YmVlbiBnaXZlbiB0aGlzIHNoZWV0IGFscmVhZHkuCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0
IHRoZSBkb2MgVVJJLgorICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0
IGxpYnhtbCBjYW5vbmljYWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVm
CisgICAgICAgICAgICAgICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5v
bmljYWxpemUgaXQgdXNpbmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKKyAgICAgICAgICAg
ICAgICAvLyB3aXRoIHRoZSBVUkkgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgQ1N0cmluZyBp
bXBvcnRIcmVmID0gaW1wb3J0LT5ocmVmKCkudXRmOCgpOworICAgICAgICAgICAgICAgIHhtbENo
YXIqIGJhc2UgPSB4bWxOb2RlR2V0QmFzZShwYXJlbnREb2MsICh4bWxOb2RlUHRyKXBhcmVudERv
Yyk7CisgICAgICAgICAgICAgICAgeG1sQ2hhciogY2hpbGRVUkkgPSB4bWxCdWlsZFVSSSgoY29u
c3QgeG1sQ2hhciopaW1wb3J0SHJlZi5kYXRhKCksIGJhc2UpOworICAgICAgICAgICAgICAgIGJv
b2wgZXF1YWxVUklzID0geG1sU3RyRXF1YWwodXJpLCBjaGlsZFVSSSk7CisgICAgICAgICAgICAg
ICAgeG1sRnJlZShiYXNlKTsKKyAgICAgICAgICAgICAgICB4bWxGcmVlKGNoaWxkVVJJKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZXF1YWxVUklzKSB7CisgICAgICAgICAgICAgICAgICAgIGNoaWxk
LT5tYXJrQXNQcm9jZXNzZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLT5k
b2N1bWVudCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgeG1sRG9jUHRyIHJlc3VsdCA9IGltcG9ydC0+c3R5bGVTaGVldCgpLT5sb2Nh
dGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UocGFyZW50RG9jLCB1cmkpOworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
WFNMU3R5bGVTaGVldDo6bWFya0FzUHJvY2Vzc2VkKCkKK3sKKyAgICBBU1NFUlQoIW1fcHJvY2Vz
c2VkKTsKKyAgICBBU1NFUlQoIW1fc3R5bGVzaGVldERvY1Rha2VuKTsKKyAgICBtX3Byb2Nlc3Nl
ZCA9IHRydWU7CisgICAgbV9zdHlsZXNoZWV0RG9jVGFrZW4gPSB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoWFNMVCkKSW5kZXg6IFdlYkNvcmUv
eG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9Y
U0xTdHlsZVNoZWV0TGlieHNsdC5jcHAJKHJldmlzaW9uIDQ4NjA0KQorKysgV2ViQ29yZS94bWwv
WFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBA
IGJvb2wgWFNMU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKIAogdm9pZCBYU0xTdHlsZVNoZWV0Ojpj
aGVja0xvYWRlZCgpCiB7Ci0gICAgaWYgKGlzTG9hZGluZygpKSAKKyAgICBpZiAoaXNMb2FkaW5n
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAocGFyZW50KCkpCiAgICAgICAgIHBhcmVudCgp
LT5jaGVja0xvYWRlZCgpOwpAQCAtMTY4LDcgKzE2OCw3IEBAIGJvb2wgWFNMU3R5bGVTaGVldDo6
cGFyc2VTdHJpbmcoY29uc3QgU3QKIAogICAgIG1fc3R5bGVzaGVldERvYyA9IHhtbEN0eHRSZWFk
TWVtb3J5KGN0eHQsIGJ1ZmZlciwgc2l6ZSwKICAgICAgICAgaHJlZigpLnV0ZjgoKS5kYXRhKCks
Ci0gICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwg
CisgICAgICAgIEJPTUhpZ2hCeXRlID09IDB4RkYgPyAiVVRGLTE2TEUiIDogIlVURi0xNkJFIiwK
ICAgICAgICAgWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RUREFUVFIgfCBYTUxfUEFSU0Vf
Tk9XQVJOSU5HIHwgWE1MX1BBUlNFX05PQ0RBVEEpOwogICAgIHhtbEZyZWVQYXJzZXJDdHh0KGN0
eHQpOwogCkBAIC0xODEsMTUgKzE4MSwxNSBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGls
ZFNoZWV0cygpCiB7CiAgICAgaWYgKCFkb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
CisKICAgICB4bWxOb2RlUHRyIHN0eWxlc2hlZXRSb290ID0gZG9jdW1lbnQoKS0+Y2hpbGRyZW47
Ci0gICAgCisKICAgICAvLyBUb3AgbGV2ZWwgY2hpbGRyZW4gbWF5IGluY2x1ZGUgb3RoZXIgdGhp
bmdzIHN1Y2ggYXMgRFREIG5vZGVzLCB3ZSBpZ25vcmUgdGhvc2UuCiAgICAgd2hpbGUgKHN0eWxl
c2hlZXRSb290ICYmIHN0eWxlc2hlZXRSb290LT50eXBlICE9IFhNTF9FTEVNRU5UX05PREUpCiAg
ICAgICAgIHN0eWxlc2hlZXRSb290ID0gc3R5bGVzaGVldFJvb3QtPm5leHQ7Ci0gICAgCisKICAg
ICBpZiAobV9lbWJlZGRlZCkgewotICAgICAgICAvLyBXZSBoYXZlIHRvIGxvY2F0ZSAoYnkgSUQp
IHRoZSBhcHByb3ByaWF0ZSBlbWJlZGRlZCBzdHlsZXNoZWV0IGVsZW1lbnQsIHNvIHRoYXQgd2Ug
Y2FuIHdhbGsgdGhlIAorICAgICAgICAvLyBXZSBoYXZlIHRvIGxvY2F0ZSAoYnkgSUQpIHRoZSBh
cHByb3ByaWF0ZSBlbWJlZGRlZCBzdHlsZXNoZWV0IGVsZW1lbnQsIHNvIHRoYXQgd2UgY2FuIHdh
bGsgdGhlCiAgICAgICAgIC8vIGltcG9ydC9pbmNsdWRlIGxpc3QuCiAgICAgICAgIHhtbEF0dHJQ
dHIgaWROb2RlID0geG1sR2V0SUQoZG9jdW1lbnQoKSwgKGNvbnN0IHhtbENoYXIqKShocmVmKCku
dXRmOCgpLmRhdGEoKSkpOwogICAgICAgICBpZiAoIWlkTm9kZSkKQEAgLTE5OSw3ICsxOTksNyBA
QCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGlsZFNoZWV0cygpCiAgICAgICAgIC8vIEZJWE1F
OiBOZWVkIHRvIGhhbmRsZSBhbiBleHRlcm5hbCBVUkkgd2l0aCBhICMgaW4gaXQuICBUaGlzIGlz
IGEgcHJldHR5IG1pbm9yIGVkZ2UgY2FzZSwgc28gd2UnbGwgZGVhbAogICAgICAgICAvLyB3aXRo
IGl0IGxhdGVyLgogICAgIH0KLSAgICAKKwogICAgIGlmIChzdHlsZXNoZWV0Um9vdCkgewogICAg
ICAgICAvLyBXYWxrIHRoZSBjaGlsZHJlbiBvZiB0aGUgcm9vdCBlbGVtZW50IGFuZCBsb29rIGZv
ciBpbXBvcnQvaW5jbHVkZSBlbGVtZW50cy4KICAgICAgICAgLy8gSW1wb3J0cyBtdXN0IG9jY3Vy
IGZpcnN0LgpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxk
U2hlZXRzKCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChJU19YU0xUX0VMRU0oY3VycikgJiYgSVNfWFNMVF9OQU1FKGN1cnIsICJpbXBv
cnQiKSkgewotICAgICAgICAgICAgICAgIHhtbENoYXIqIHVyaVJlZiA9IHhzbHRHZXROc1Byb3Ao
Y3VyciwgKGNvbnN0IHhtbENoYXIqKSJocmVmIiwgWFNMVF9OQU1FU1BBQ0UpOyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICB4bWxDaGFyKiB1cmlSZWYgPSB4c2x0R2V0TnNQcm9wKGN1
cnIsIChjb25zdCB4bWxDaGFyKikiaHJlZiIsIFhTTFRfTkFNRVNQQUNFKTsKICAgICAgICAgICAg
ICAgICBsb2FkQ2hpbGRTaGVldChTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKil1cmlSZWYp
KTsKICAgICAgICAgICAgICAgICB4bWxGcmVlKHVyaVJlZik7CiAgICAgICAgICAgICB9IGVsc2UK
QEAgLTI0Miw3ICsyNDIsNyBAQCB4c2x0U3R5bGVzaGVldFB0ciBYU0xTdHlsZVNoZWV0Ojpjb21w
aWxlCiAgICAgLy8gRklYTUU6IEhvb2sgdXAgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGUgc3R5bGVz
aGVldCBjb21waWxhdGlvbiBwcm9jZXNzLgogICAgIGlmIChtX2VtYmVkZGVkKQogICAgICAgICBy
ZXR1cm4geHNsdExvYWRTdHlsZXNoZWV0UEkoZG9jdW1lbnQoKSk7Ci0gICAgCisKICAgICAvLyB4
c2x0UGFyc2VTdHlsZXNoZWV0RG9jIG1ha2VzIHRoZSBkb2N1bWVudCBwYXJ0IG9mIHRoZSBzdHls
ZXNoZWV0CiAgICAgLy8gc28gd2UgaGF2ZSB0byByZWxlYXNlIG91ciBwb2ludGVyIHRvIGl0Lgog
ICAgIEFTU0VSVCghbV9zdHlsZXNoZWV0RG9jVGFrZW4pOwpAQCAtMjczLDcgKzI3Myw3IEBAIHht
bERvY1B0ciBYU0xTdHlsZVNoZWV0Ojpsb2NhdGVTdHlsZXNoZWUKICAgICAgICAgICAgIGlmICht
YXRjaGVkUGFyZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5wcm9jZXNzZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGxpYnhzbHQgaGFzIGJlZW4gZ2l2ZW4g
dGhpcyBzaGVldCBhbHJlYWR5LgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhlIFVSSSBvZiB0aGUgY2hpbGQgc3R5bGVzaGVldCBhZ2FpbnN0IHRoZSBkb2Mg
VVJJLgogICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpYnhtbCBj
YW5vbmljYWxpemVkIGJvdGggVVJMcywgd2UgZ2V0IHRoZSBvcmlnaW5hbCBocmVmCiAgICAgICAg
ICAgICAgICAgLy8gc3RyaW5nIGZyb20gdGhlIGltcG9ydCBydWxlIGFuZCBjYW5vbmljYWxpemUg
aXQgdXNpbmcgbGlieG1sIGJlZm9yZSBjb21wYXJpbmcgaXQKQEAgLTI5NSw3ICsyOTUsNyBAQCB4
bWxEb2NQdHIgWFNMU3R5bGVTaGVldDo6bG9jYXRlU3R5bGVzaGVlCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOmVvbC1zdHlsZQogICAtIG5hdGl2ZQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40244</attachid>
            <date>2009-09-28 10:49:28 -0700</date>
            <delta_ts>2009-09-28 13:10:51 -0700</delta_ts>
            <desc>[Qt] Implement XSLT support with QtXmlPatterns.</desc>
            <filename>Qt-Implement-XSLT-support.patch</filename>
            <type>text/plain</type>
            <size>38705</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">RnJvbSAyOTI3ZDYxNWQ5YmJiMDU1ZTY0M2VlODc4NjBjNTk4NTEyNGQ4NzMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CkRh
dGU6IE1vbiwgMjggU2VwIDIwMDkgMjA6NDM6MjEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBbUXRd
IEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRlcm5zLgoKLS0tCiBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICB8ICAgIDkgKysKIEphdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrKysrKwogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYkNvcmUvV2ViQ29yZS5n
eXBpICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBXZWJDb3JlL1dlYkNvcmUucHJvICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKystLS0KIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogICAgIHwgICAgOCArKwogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogfCAgICA3ICsrCiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCAgICAg
ICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwICAgICAgICAgICAg
ICAgICAgfCAgIDE2ICstLS0KIFdlYkNvcmUvZG9tL0RvY3VtZW50LmggICAgICAgICAgICAgICAg
ICAgIHwgICAxMyArKy0KIFdlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZS5oICAgICAgICAgICAg
IHwgICA1MSArKysrKysrKysrCiBXZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNw
cCAgICB8ICAgNDMgKysrKysrKysKIFdlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0LmNwcCAg
ICAgICAgIHwgICAzNCArKysrKysrCiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNw
cCAgICAgICB8ICAgIDQgKy0KIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcCAgICAgICAg
ICAgIHwgICA0OSArKystLS0tLS0tCiBXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggICAgICAg
ICAgICAgICB8ICAgMjYgKysrKy0KIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNw
cCAgICAgIHwgICAgOSArLQogV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0LmNwcCAgICAgICAg
ICAgfCAgMTAzICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmggICAgICAgICAgICAgICB8ICAgIDggKy0KIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcCAgICAgIHwgICAgNSArLQogV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvclF0LmNwcCAg
ICAgICAgICAgfCAgMTQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyMiBmaWxlcyBj
aGFuZ2VkLCA1MzEgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFdlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yUXQuY3BwCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY2YTY0NGEuLjA1OTQ1NzIg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOS0yOCAgSmFrdWIgV2llY3pvcmVr
ICA8ZmF3MjE3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBYU0xUIHN1cHBvcnQgd2l0aCBRdFhtbFBhdHRl
cm5zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgz
MDMKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgYSBXVEZfVVNFX1FYTUxRVUVSWSAj
ZGVmaW5lLgorCiAyMDA5LTA5LTI4ICBKb2VyZyBCb3JuZW1hbm4gIDxqb2VyZy5ib3JuZW1hbm5A
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAppbmRleCA1NzZlOTg2Li45ZmJmYTg1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApA
QCAtNzc3LDExICs3NzcsMTEgQEAgb24gTWluR1cuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNjggKi8KICNkZWZpbmUgRU5BQkxFX1BBTl9TQ1JPTExJTkcg
MQogI2VuZGlmCiAKLS8qIFVzZSB0aGUgUXRYbWxTdHJlYW1SZWFkZXIgaW1wbGVtZW50YXRpb24g
Zm9yIFhNTFRva2VuaXplciAqLworLyogVXNlIHRoZSBRWG1sU3RyZWFtUmVhZGVyIGltcGxlbWVu
dGF0aW9uIGZvciBYTUxUb2tlbml6ZXIgKi8KKy8qIFVzZSB0aGUgUVhtbFF1ZXJ5IGltcGxlbWVu
dGF0aW9uIGZvciBYU0xUUHJvY2Vzc29yICovCiAjaWYgUExBVEZPUk0oUVQpCi0jaWYgIUVOQUJM
RShYU0xUKQogI2RlZmluZSBXVEZfVVNFX1FYTUxTVFJFQU0gMQotI2VuZGlmCisjZGVmaW5lIFdU
Rl9VU0VfUVhNTFFVRVJZIDEKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NjdlNDAwLi4x
ZTJhYzAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDA5LTA5LTI4ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcy
MTdAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gSW1wbGVtZW50IFhTTFQgc3VwcG9ydCB3aXRoIFF0WG1sUGF0dGVybnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODMwMworCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnNldFRyYW5zZm9ybVNvdXJjZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6dHJhbnNmb3JtU291cmNlKToKKyAgICAgICAgKiBkb20vVHJh
bnNmb3JtU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtU291cmNl
OjpwbGF0Zm9ybVNvdXJjZSk6CisgICAgICAgICogZG9tL1RyYW5zZm9ybVNvdXJjZUxpYnhzbHQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVNvdXJjZTo6VHJhbnNmb3Jt
U291cmNlKTogV3JhcHMgYSBsaWJ4bWwyIGRvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNmb3JtU291cmNlOjp+VHJhbnNmb3JtU291cmNlKToKKyAgICAgICAgKiBkb20vVHJhbnNmb3Jt
U291cmNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybVNvdXJjZTo6
VHJhbnNmb3JtU291cmNlKTogV3JhcHMgYSBwbGFpbiBzdHJpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2Zvcm1Tb3VyY2U6On5UcmFuc2Zvcm1Tb3VyY2UpOgorICAgICAgICAqIGRvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZG9F
bmQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxUb2tlbml6ZXI6OmRvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6
cGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpzaGVldFN0cmluZyk6CisgICAg
ICAgICogeG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhT
TFN0eWxlU2hlZXQ6OmRvY3VtZW50KToKKyAgICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldFF0LmNw
cDogQWRkZWQuCisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuaDoKKyAgICAgICAgKiB4bWwv
WFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6eG1sRG9jUHRyRnJv
bU5vZGUpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yUXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhTTFRNZXNzYWdlSGFuZGxlcjo6WFNMVE1lc3NhZ2VIYW5kbGVyKTogQSBz
dWJjbGFzcyBvZiBRQWJzdHJhY3RNZXNzYWdlSGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlhT
TFRNZXNzYWdlSGFuZGxlcjo6aGFuZGxlTWVzc2FnZSk6IEZvcndhcmRzIGFsbCBwcm9jZXNzb3Ig
bWVzc2FnZXMgdG8gdGhlIENvbnNvbGUuCisgICAgICAgIChXZWJDb3JlOjpYU0xUUHJvY2Vzc29y
Ojp0cmFuc2Zvcm1Ub1N0cmluZyk6IFVzZXMgUVhtbFF1ZXJ5LgorCiAyMDA5LTA5LTI4ICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQppbmRleCA3N2I5ZGQzLi5lNmJkMWVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTI0MTAsNiArMjQx
MCw4IEBAIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YU0xUPTEKIHdlYmNv
cmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfWFNMVD0xCiAKIHdlYmNvcmVfc291cmNlcyArPSBcCisJ
V2ViQ29yZS9kb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgXAorCVdlYkNvcmUvZG9tL1Ry
YW5zZm9ybVNvdXJjZS5oIFwKIAlXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcCBcCiAJV2Vi
Q29yZS94bWwvWFNMSW1wb3J0UnVsZS5oIFwKIAlXZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGli
eHNsdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA2ODM2Yjc1Li42ZDAzMjYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTExMCw2ICsxMTEwLDgg
QEAKICAgICAgICAgICAgICdkb20vVGV4dEV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL1Rl
eHRFdmVudC5oJywKICAgICAgICAgICAgICdkb20vVG9rZW5pemVyLmgnLAorICAgICAgICAgICAg
J2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCcsCisgICAgICAgICAgICAnZG9tL1RyYW5z
Zm9ybVNvdXJjZS5oJywKICAgICAgICAgICAgICdkb20vVHJhdmVyc2FsLmNwcCcsCiAgICAgICAg
ICAgICAnZG9tL1RyYXZlcnNhbC5oJywKICAgICAgICAgICAgICdkb20vVHJlZVdhbGtlci5jcHAn
LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggZmY5MmFmZS4uM2FmMDgyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMjcsNyArMTI3LDYgQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURFRD0xKSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVNIQk9BUkRfU1VQ
UE9SVD0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0ZJTFRFUlM9Lik6IERFRklORVMgKz0g
RU5BQkxFX0ZJTFRFUlM9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVG
SU5FUyArPSBFTkFCTEVfWFBBVEg9MQotIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YU0xUPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9YU0xUPTAKICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hC
TD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEJMPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
V0NTUz0uKTogREVGSU5FUyArPSBFTkFCTEVfV0NTUz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01MPTAKQEAgLTE3Miw2ICsxNzEsMTIgQEAg
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NJTkdMRV9USFJFQURFRD0xKSB7CiAjIFdlYiBTb2Nr
ZXQgc3VwcG9ydC4KICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCX1NPQ0tFVFM9Lik6IERF
RklORVMgKz0gRU5BQkxFX1dFQl9TT0NLRVRTPTEKIAorIyBYU0xUIHN1cHBvcnQgd2l0aCBRdFht
bFBhdHRlcm5zCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9LikgeworICAgIGNvbnRh
aW5zKFFUX0NPTkZJRywgeG1scGF0dGVybnMpOiFsZXNzVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA1
KTpERUZJTkVTICs9IEVOQUJMRV9YU0xUPTEKKyAgICBlbHNlOkRFRklORVMgKz0gRU5BQkxFX1hT
TFQ9MAorfQorCiBERUZJTkVTICs9IFdURl9VU0VfSkFWQVNDUklQVENPUkVfQklORElOR1M9MSBX
VEZfQ0hBTkdFUz0xCiAKICMgVXNlZCB0byBjb21wdXRlIGRlZmF1bHRzIGZvciB0aGUgYnVpbGQt
d2Via2l0IHNjcmlwdApAQCAtOTA4LDcgKzkxMyw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9X
aGVlbEV2ZW50LmNwcCBcCiAgICAgZG9tL1hNTFRva2VuaXplci5jcHAgXAogICAgIGRvbS9YTUxU
b2tlbml6ZXJRdC5jcHAgXAotICAgIGRvbS9YTUxUb2tlbml6ZXJTY29wZS5jcHAgXAogICAgIGRv
bS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCBcCiAgICAgZWRpdGluZy9B
cHBlbmROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
IFwKQEAgLTE1NjgsNiArMTU3Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9UYWdOb2RlTGlz
dC5oIFwKICAgICBkb20vVGV4dEV2ZW50LmggXAogICAgIGRvbS9UZXh0LmggXAorICAgIGRvbS9U
cmFuc2Zvcm1Tb3VyY2UuaCBcCiAgICAgZG9tL1RyYXZlcnNhbC5oIFwKICAgICBkb20vVHJlZVdh
bGtlci5oIFwKICAgICBkb20vVUlFdmVudC5oIFwKQEAgLTE1NzYsNyArMTU4MSw2IEBAIEhFQURF
UlMgKz0gXAogICAgIGRvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBcCiAgICAgZG9tL1doZWVs
RXZlbnQuaCBcCiAgICAgZG9tL1hNTFRva2VuaXplci5oIFwKLSAgICBkb20vWE1MVG9rZW5pemVy
U2NvcGUuaCBcCiAgICAgZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFu
ZC5oIFwKQEAgLTI3MTQsMjUgKzI3MTgsMTYgQEAgdW5peDohbWFjOkNPTkZJRyArPSBsaW5rX3Br
Z2NvbmZpZwogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWFNMVD0xKSB7CiAgICAgRkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hTTFQ9MQotICAgIFBLR0NPTkZJRyArPSBs
aWJ4bWwtMi4wIGxpYnhzbHQKIAotICAgIG1hY3ggewotICAgICAgICBJTkNMVURFUEFUSCArPSAv
dXNyL2luY2x1ZGUvbGlieG1sMgotICAgICAgICBMSUJTICs9IC1seG1sMiAtbHhzbHQKLSAgICB9
Ci0KLSAgICB3aW4zMi1tc3ZjKiB7Ci0gICAgICAgIExJQlMgKz0gLWxsaWJ4bWwyIC1sbGlieHNs
dAotICAgIH0KKyAgICBRVCArPSB4bWxwYXR0ZXJucwogCiAgICAgU09VUkNFUyArPSBcCiAgICAg
ICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9yLmNwcCBcCiAgICAgICAg
IGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAgXAotICAgICAgICB4bWwvWFNM
SW1wb3J0UnVsZS5jcHAgXAotICAgICAgICB4bWwvWFNMU3R5bGVTaGVldC5jcHAgXAotICAgICAg
ICB4bWwvWFNMVEV4dGVuc2lvbnMuY3BwIFwKKyAgICAgICAgZG9tL1RyYW5zZm9ybVNvdXJjZVF0
LmNwcCBcCisgICAgICAgIHhtbC9YU0xTdHlsZVNoZWV0UXQuY3BwIFwKICAgICAgICAgeG1sL1hT
TFRQcm9jZXNzb3IuY3BwIFwKLSAgICAgICAgeG1sL1hTTFRVbmljb2RlU29ydC5jcHAKKyAgICAg
ICAgeG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1hCTD0xKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAzZGQ0MWNj
Li4xOGU2NDYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI0NDc2
LDYgKzI0NDc2LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxUcmFuc2Zvcm1T
b3VyY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxUcmF2ZXJzYWwuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzYzODdlMi4uYTkyNmRlYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1NDQsNiAr
MTU0NCw4IEBACiAJCTg1NEZFNzM3MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzJEMEEyMjk3
QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCAqLzsgfTsKIAkJODU0RkU3MzgwQTIyOTdCRTAwNThE
N0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODU0RkU3MkUwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwICov
OyB9OwogCQk4NTRGRTczOTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODU0RkU3MkYwQTIyOTdCRTAw
NThEN0FEIC8qIFRyZWVXYWxrZXIuaCAqLzsgfTsKKwkJODU0RkU3NDAwQTIyOTdCRTAwNThEN0FE
IC8qIFRyYW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODU0RkU3MkcwQTIyOTdCRTAwNThEN0FEIC8qIFRyYW5zZm9y
bVNvdXJjZUxpYnhzbHQuY3BwICovOyB9OworCQk4NTRGRTc0MTBBMjI5N0JFMDA1OEQ3QUQgLyog
VHJhbnNmb3JtU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NTRGRTcySDBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhbnNmb3JtU291cmNlLmggKi87
IH07CiAJCTg1NTI0N0NGMEFEODUwQjgwMDEyMDkzQiAvKiBET01IVE1MQXBwbGV0RWxlbWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NTUyNDdDRDBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEFwcGxldEVsZW1lbnRJbnRlcm5hbC5o
ICovOyB9OwogCQk4NTUyNDdEMDBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEVtYmVkRWxlbWVu
dEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NTUyNDdDRTBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEVtYmVkRWxlbWVudEludGVybmFs
LmggKi87IH07CiAJCTg1NTI2QzM3MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NTI2QzM1
MEFCMEExN0UwMDAzMDJFQSAvKiBET01Ob2RlSXRlcmF0b3IuaCAqLzsgfTsKQEAgLTY3NzMsNiAr
Njc3NSw4IEBACiAJCTg1NEZFNzJEMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NTRGRTcyRTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJlZVdhbGtlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1NEZFNzJGMEEyMjk3QkUwMDU4RDdBRCAv
KiBUcmVlV2Fsa2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmVlV2Fs
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1NEZFNzJHMEEyMjk3QkUwMDU4
RDdBRCAvKiBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODU0RkU3MkgwQTIyOTdCRTAwNThEN0FEIC8qIFRyYW5zZm9ybVNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNmb3JtU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1NTI0N0NEMEFEODUwQjgwMDEyMDkz
QiAvKiBET01IVE1MQXBwbGV0RWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MQXBwbGV0RWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg1NTI0N0NFMEFEODUwQjgwMDEyMDkzQiAvKiBET01IVE1MRW1i
ZWRFbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TUhUTUxFbWJlZEVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NTUyNkMzNTBBQjBBMTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Ob2RlSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDc2LDYgKzE1NDgwLDggQEAKIAkJCQk4NTRGRTcyRTBBMjI5
N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgKi8sCiAJCQkJODU0RkU3MkYwQTIyOTdCRTAw
NThEN0FEIC8qIFRyZWVXYWxrZXIuaCAqLywKIAkJCQkxQTc1MEQzQzBBOTBERTM1MDAwRkYyMTUg
LyogVHJlZVdhbGtlci5pZGwgKi8sCisJCQkJODU0RkU3MkcwQTIyOTdCRTAwNThEN0FEIC8qIFRy
YW5zZm9ybVNvdXJjZUxpYnhzbHQuY3BwICovLAorCQkJCTg1NEZFNzJIMEEyMjk3QkUwMDU4RDdB
RCAvKiBUcmFuc2Zvcm1Tb3VyY2UuaCAqLywKIAkJCQk4NTAzMUIzNzBBNDRFRkM3MDBGOTkyRTAg
LyogVUlFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZl
bnQuaCAqLywKIAkJCQkxNDFCOTRFRTA5RUM0MjVBMDAwRTk0MTMgLyogVUlFdmVudC5pZGwgKi8s
CkBAIC0xOTc5OSw2ICsxOTgwNSw3IEBACiAJCQkJNDlFOTExQzMwRUY4NkQ0NzAwOUQwQ0FGIC8q
IFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTU4MEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ5RTkxMUNGMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTg1NEZFNzQwMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmFuc2Zv
cm1Tb3VyY2VMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTAwQUIxMEY1NERCMzEw
MEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFE
MTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg1NEZFNzM2MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBi
L1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGU3OGI4MDQuLjMwZTE3MDAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCkBAIC01MDcsNiArNTA3LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0
IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBkb20vVGFnTm9kZUxp
c3QuY3BwCiAgICAgICAgIGRvbS9UZXh0LmNwcAogICAgICAgICBkb20vVGV4dEV2ZW50LmNwcAor
ICAgICAgICBkb20vVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAKICAgICAgICAgZG9tL1RyYXZl
cnNhbC5jcHAKICAgICAgICAgZG9tL1RyZWVXYWxrZXIuY3BwCiAgICAgICAgIGRvbS9VSUV2ZW50
LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCmluZGV4IDE3NGMwZWUuLjVlNDM3YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTExNiw2
ICsxMTYsNyBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNv
dXJjZS5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKICNpbmNsdWRlICJVSUV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKQEAgLTMyMSw5ICszMjIsNiBAQCBEb2N1
bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzWEhUTUwpCiAgICAgLCBtX3RpdGxl
U2V0RXhwbGljaXRseShmYWxzZSkKICAgICAsIG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlVGltZXIo
dGhpcywgJkRvY3VtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKQogICAgICwg
bV9leGVjdXRlU2NyaXB0U29vblRpbWVyKHRoaXMsICZEb2N1bWVudDo6ZXhlY3V0ZVNjcmlwdFNv
b25UaW1lckZpcmVkKQotI2lmIEVOQUJMRShYU0xUKQotICAgICwgbV90cmFuc2Zvcm1Tb3VyY2Uo
MCkKLSNlbmRpZgogICAgICwgbV94bWxWZXJzaW9uKCIxLjAiKQogICAgICwgbV94bWxTdGFuZGFs
b25lKGZhbHNlKQogI2lmIEVOQUJMRShYQkwpCkBAIC00ODcsMTAgKzQ4NSw2IEBAIERvY3VtZW50
Ojp+RG9jdW1lbnQoKQogICAgICAgICBtX3JlbmRlckFyZW5hID0gMDsKICAgICB9CiAKLSNpZiBF
TkFCTEUoWFNMVCkKLSAgICB4bWxGcmVlRG9jKCh4bWxEb2NQdHIpbV90cmFuc2Zvcm1Tb3VyY2Up
OwotI2VuZGlmCi0KICNpZiBFTkFCTEUoWEJMKQogICAgIGRlbGV0ZSBtX2JpbmRpbmdNYW5hZ2Vy
OwogI2VuZGlmCkBAIC0zODUwLDEzICszODQ0LDExIEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCiAgICAgcHJvY2Vzc29yLT5jcmVh
dGVEb2N1bWVudEZyb21Tb3VyY2UobmV3U291cmNlLCByZXN1bHRFbmNvZGluZywgcmVzdWx0TUlN
RVR5cGUsIHRoaXMsIGZyYW1lKCkpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRUcmFuc2Zvcm1T
b3VyY2Uodm9pZCogZG9jKQordm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNlKFBhc3NP
d25QdHI8VHJhbnNmb3JtU291cmNlPiBzb3VyY2UpCiB7Ci0gICAgaWYgKGRvYyA9PSBtX3RyYW5z
Zm9ybVNvdXJjZSkKKyAgICBpZiAobV90cmFuc2Zvcm1Tb3VyY2UgPT0gc291cmNlKQogICAgICAg
ICByZXR1cm47Ci0KLSAgICB4bWxGcmVlRG9jKCh4bWxEb2NQdHIpbV90cmFuc2Zvcm1Tb3VyY2Up
OwotICAgIG1fdHJhbnNmb3JtU291cmNlID0gZG9jOworICAgIG1fdHJhbnNmb3JtU291cmNlID0g
c291cmNlOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50Lmgg
Yi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDI4MDU1NjIuLmU0NjBjMGUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApA
QCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTEwMyw2ICsxMDUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFNWR0RvY3VtZW50RXh0ZW5zaW9uczsKICNlbmRpZgogICAgIAorI2lmIEVOQUJM
RShYU0xUKQorICAgIGNsYXNzIFRyYW5zZm9ybVNvdXJjZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFhCTCkKICAgICBjbGFzcyBYQkxCaW5kaW5nTWFuYWdlcjsKICNlbmRpZgpAQCAtNzQ2LDEwICs3
NTIsMTEgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgdm9pZCBhcHBseVhTTFRy
YW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKTsKLSAgICB2b2lkIHNldFRyYW5zZm9y
bVNvdXJjZSh2b2lkKiBkb2MpOwotICAgIGNvbnN0IHZvaWQqIHRyYW5zZm9ybVNvdXJjZSgpIHsg
cmV0dXJuIG1fdHJhbnNmb3JtU291cmNlOyB9CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gdHJh
bnNmb3JtU291cmNlRG9jdW1lbnQoKSB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50
OyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1bWVudCogZG9jKSB7
IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2M7IH0KKworICAgIHZvaWQgc2V0VHJhbnNm
b3JtU291cmNlKFBhc3NPd25QdHI8VHJhbnNmb3JtU291cmNlPik7CisgICAgVHJhbnNmb3JtU291
cmNlKiB0cmFuc2Zvcm1Tb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZS5n
ZXQoKTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoWEJMKQpAQCAtMTA1NCw3ICsxMDYxLDcgQEAg
cHJpdmF0ZToKICAgICBUaW1lcjxEb2N1bWVudD4gbV9leGVjdXRlU2NyaXB0U29vblRpbWVyOwog
ICAgIAogI2lmIEVOQUJMRShYU0xUKQotICAgIHZvaWQqIG1fdHJhbnNmb3JtU291cmNlOworICAg
IE93blB0cjxUcmFuc2Zvcm1Tb3VyY2U+IG1fdHJhbnNmb3JtU291cmNlOwogICAgIFJlZlB0cjxE
b2N1bWVudD4gbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudDsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2UuaCBiL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5N2FmY2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2UuaApAQCAtMCwwICsxLDUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpha3ViIFdpZWN6b3JlayA8ZmF3MjE3QGdt
YWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBUcmFuc2Zvcm1Tb3VyY2VfaAorI2RlZmluZSBUcmFuc2Zvcm1Tb3Vy
Y2VfaAorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiBVU0UoUVhNTFFVRVJZKQorICAgIHR5cGVkZWYgU3RyaW5nIFBsYXRmb3JtVHJhbnNmb3JtU291
cmNlOworI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtVHJhbnNmb3JtU291cmNlOwor
I2VuZGlmCisKKyAgICBjbGFzcyBUcmFuc2Zvcm1Tb3VyY2UgOiBwdWJsaWMgTm9uY29weWFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNmb3JtU291cmNlKGNvbnN0IFBsYXRmb3JtVHJh
bnNmb3JtU291cmNlJiBzb3VyY2UpOworICAgICAgICB+VHJhbnNmb3JtU291cmNlKCk7CisKKyAg
ICAgICAgUGxhdGZvcm1UcmFuc2Zvcm1Tb3VyY2UgcGxhdGZvcm1Tb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGxhdGZvcm1UcmFuc2Zv
cm1Tb3VyY2UgbV9zb3VyY2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKworI2VuZGlmIC8vIFRyYW5zZm9ybVNvdXJjZV9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0LmNwcCBiL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNv
dXJjZUxpYnhzbHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTg1
ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9UcmFuc2Zvcm1Tb3VyY2VMaWJ4c2x0
LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJj
ZS5oIgorCisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitUcmFuc2Zvcm1Tb3VyY2U6OlRyYW5zZm9ybVNvdXJjZShjb25zdCBQbGF0Zm9ybVRyYW5zZm9y
bVNvdXJjZSYgc291cmNlKQorICAgIDogbV9zb3VyY2Uoc291cmNlKQoreworfQorCitUcmFuc2Zv
cm1Tb3VyY2U6On5UcmFuc2Zvcm1Tb3VyY2UoKQoreworICAgIHhtbEZyZWVEb2MoKHhtbERvY1B0
ciltX3NvdXJjZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNv
dXJjZVF0LmNwcCBiL1dlYkNvcmUvZG9tL1RyYW5zZm9ybVNvdXJjZVF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzRmMmNiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9kb20vVHJhbnNmb3JtU291cmNlUXQuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFrdWIgV2llY3pvcmVrIDxmYXcyMTdAZ21haWwuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworVHJhbnNmb3JtU291cmNlOjpUcmFuc2Zvcm1Tb3VyY2UoY29uc3QgUGxh
dGZvcm1UcmFuc2Zvcm1Tb3VyY2UmIHNvdXJjZSkKKyAgICA6IG1fc291cmNlKHNvdXJjZSkKK3sK
K30KKworVHJhbnNmb3JtU291cmNlOjp+VHJhbnNmb3JtU291cmNlKCkKK3sKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgYi9XZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAppbmRleCBkYTJmOWI2Li5kM2M2NTQ2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNj
cmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNs
dWRlICJYTUxUb2tlbml6ZXJTY29wZS5oIgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNp
bmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CkBAIC0xMjgwLDcgKzEyODEsOCBAQCB2
b2lkIFhNTFRva2VuaXplcjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xUKQogICAgIGlmICht
X3Nhd1hTTFRyYW5zZm9ybSkgewotICAgICAgICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNlKHht
bERvY1B0ckZvclN0cmluZyhtX2RvYy0+ZG9jTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JU
cmFuc2Zvcm0sIG1fZG9jLT51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICB2b2lkKiBkb2MgPSB4
bWxEb2NQdHJGb3JTdHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9y
VHJhbnNmb3JtLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBtX2RvYy0+c2V0VHJh
bnNmb3JtU291cmNlKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2RvYy0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRv
bmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KICAgICAgICAgbV9kb2MtPnVwZGF0ZVN0
eWxlU2VsZWN0b3IoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNw
cCBiL1dlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAppbmRleCA3OTllZWYzLi5mNzQ1ODMw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVNvdXJjZS5oIgogI2luY2x1
ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CkBAIC0yNDgsNDUgKzI0OSwxOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW5p
dGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgY2hhciogY2h1bmspCiB2b2lkIFhNTFRva2VuaXpl
cjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xUKQotICAgICN3YXJuaW5nIExvb2sgYXQgWE1M
VG9rZW5pemVyTGliWG1sLmNwcAotI2VuZGlmCi0KLSAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSA9
PSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IgfHwgKG1fd3Jv
dGVUZXh0ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCkpIHsKLSAgICAgICAgaGFuZGxlRXJyb3IoZmF0
YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyKCkpOworICAgIGlmIChtX3Nhd1hTTFRyYW5z
Zm9ybSkgeworICAgICAgICBtX2RvYy0+c2V0VHJhbnNmb3JtU291cmNlKG5ldyBUcmFuc2Zvcm1T
b3VyY2UobV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSkpOworICAgICAgICBtX2RvYy0+c2V0
UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdp
bGwgYXBwbHkgeHNsIHNoZWV0cy4KKyAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3Io
KTsKKyAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcodHJ1ZSk7CisgICAgICAgIG1fcGFyc2VyU3Rv
cHBlZCA9IHRydWU7CiAgICAgfQotfQotCi0jaWYgRU5BQkxFKFhTTFQpCi12b2lkKiB4bWxEb2NQ
dHJGb3JTdHJpbmcoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBQYXJzZSBpbiBhIHNpbmdsZSBjaHVuayBpbnRvIGFuIHhtbERv
Y1B0cgotICAgIC8vIEZJWE1FOiBIb29rIHVwIGVycm9yIGhhbmRsZXJzIHNvIHRoYXQgYSBmYWls
dXJlIHRvIHBhcnNlIHRoZSBtYWluIGRvY3VtZW50IHJlc3VsdHMgaW4KLSAgICAvLyBnb29kIGVy
cm9yIG1lc3NhZ2VzLgotICAgIGNvbnN0IFVDaGFyIEJPTSA9IDB4RkVGRjsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KCZCT00pOwotCi0gICAgeG1sR2VuZXJpY0Vycm9yRnVuYyBvbGRFcnJvckZ1bmMg
PSB4bWxHZW5lcmljRXJyb3I7Ci0gICAgdm9pZCogb2xkRXJyb3JDb250ZXh0ID0geG1sR2VuZXJp
Y0Vycm9yQ29udGV4dDsKLSAgICAKLSAgICBzZXRMb2FkZXJGb3JMaWJYTUxDYWxsYmFja3MoZG9j
TG9hZGVyKTsgICAgICAgIAotICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgZXJyb3JGdW5j
KTsKLSAgICAKLSAgICB4bWxEb2NQdHIgc291cmNlRG9jID0geG1sUmVhZE1lbW9yeShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihzb3VyY2UuY2hhcmFjdGVycygpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubGVuZ3RoKCkgKiBzaXplb2YoVUNo
YXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybC5sYXRpbjEo
KS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9NSGln
aEJ5dGUgPT0gMHhGRiA/ICJVVEYtMTZMRSIgOiAiVVRGLTE2QkUiLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYU0xUX1BBUlNFX09QVElPTlMpOwotICAgIAotICAg
IHNldExvYWRlckZvckxpYlhNTENhbGxiYWNrcygwKTsKLSAgICB4bWxTZXRHZW5lcmljRXJyb3JG
dW5jKG9sZEVycm9yQ29udGV4dCwgb2xkRXJyb3JGdW5jKTsKKyNlbmRpZgogICAgIAotICAgIHJl
dHVybiBzb3VyY2VEb2M7CisgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJl
YWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9yCisgICAgICAgIHx8IChtX3dyb3RlVGV4
dCAmJiAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgIW1fc2F3WFNMVHJhbnNmb3JtKSkKKyAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxp
bmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwogfQotI2VuZGlmCiAKIGludCBYTUxUb2tlbml6
ZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogewpAQCAtNjgzLDcgKzY1OCw3IEBAIHZvaWQgWE1MVG9r
ZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpCiAKICNpZiBFTkFCTEUoWFNMVCkK
ICAgICBtX3Nhd1hTTFRyYW5zZm9ybSA9ICFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBwaS0+aXNYU0wo
KTsKLSAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCgpKSkKKyAgICBpZiAobV9zYXdYU0xUcmFuc2Zvcm0gJiYgIW1fZG9jLT50cmFuc2Zv
cm1Tb3VyY2VEb2N1bWVudCgpKQogICAgICAgICBzdG9wUGFyc2luZygpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0LmggYi9XZWJDb3JlL3htbC9YU0xT
dHlsZVNoZWV0LmgKaW5kZXggZmU5N2I1NC4uZGNhNTY1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94
bWwvWFNMU3R5bGVTaGVldC5oCisrKyBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaApAQCAt
MjYsOCArMjYsMTIgQEAKICNpZiBFTkFCTEUoWFNMVCkKIAogI2luY2x1ZGUgIlN0eWxlU2hlZXQu
aCIKKworI2lmICFVU0UoUVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNp
bmNsdWRlIDxsaWJ4c2x0L3RyYW5zZm9ybS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArNDIsMTIgQEAgY2xh
c3MgWFNMSW1wb3J0UnVsZTsKICAgICAKIGNsYXNzIFhTTFN0eWxlU2hlZXQgOiBwdWJsaWMgU3R5
bGVTaGVldCB7CiBwdWJsaWM6CisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwg
Y29uc3QgU3RyaW5nJiBocmVmKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBY
U0xTdHlsZVNoZWV0KHBhcmVudEltcG9ydCwgaHJlZikpOwogICAgIH0KKyNlbmRpZgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShOb2RlKiBwYXJlbnROb2RlLCBj
b25zdCBTdHJpbmcmIGhyZWYpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhT
TFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgZmFsc2UpKTsKQEAgLTY1LDMxICs3MSw0MSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBsb2FkQ2hpbGRTaGVldHMoKTsKICAgICB2b2lkIGxvYWRDaGls
ZFNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CiAKLSAgICB4c2x0U3R5bGVzaGVldFB0ciBjb21w
aWxlU3R5bGVTaGVldCgpOwotCiAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKTsKIAogICAgIERv
Y3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gbV9vd25lckRvY3VtZW50OyB9CiAgICAg
dm9pZCBzZXRQYXJlbnRTdHlsZVNoZWV0KFhTTFN0eWxlU2hlZXQqIHBhcmVudCk7CiAKKyNpZiBV
U0UoUVhNTFFVRVJZKQorICAgIFN0cmluZyBzaGVldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1f
c2hlZXRTdHJpbmc7IH0KKyNlbHNlCiAgICAgeG1sRG9jUHRyIGRvY3VtZW50KCk7CisgICAgeHNs
dFN0eWxlc2hlZXRQdHIgY29tcGlsZVN0eWxlU2hlZXQoKTsKKyAgICB4bWxEb2NQdHIgbG9jYXRl
U3R5bGVzaGVldFN1YlJlc291cmNlKHhtbERvY1B0ciBwYXJlbnREb2MsIGNvbnN0IHhtbENoYXIq
IHVyaSk7CisjZW5kaWYKIAogICAgIHZvaWQgY2xlYXJEb2N1bWVudHMoKTsKIAotICAgIHhtbERv
Y1B0ciBsb2NhdGVTdHlsZXNoZWV0U3ViUmVzb3VyY2UoeG1sRG9jUHRyIHBhcmVudERvYywgY29u
c3QgeG1sQ2hhciogdXJpKTsKLSAgICAKICAgICB2b2lkIG1hcmtBc1Byb2Nlc3NlZCgpOwogICAg
IGJvb2wgcHJvY2Vzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7IH0KIAogcHJpdmF0
ZToKICAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgYm9vbCBlbWJlZGRlZCk7CisjaWYgIVVTRShRWE1MUVVFUlkpCiAgICAgWFNMU3R5bGVTaGVl
dChYU0xJbXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZik7CisjZW5k
aWYKIAogICAgIERvY3VtZW50KiBtX293bmVyRG9jdW1lbnQ7Ci0gICAgeG1sRG9jUHRyIG1fc3R5
bGVzaGVldERvYzsKICAgICBib29sIG1fZW1iZWRkZWQ7CiAgICAgYm9vbCBtX3Byb2Nlc3NlZDsK
KworI2lmIFVTRShRWE1MUVVFUlkpCisgICAgU3RyaW5nIG1fc2hlZXRTdHJpbmc7CisjZWxzZQor
ICAgIHhtbERvY1B0ciBtX3N0eWxlc2hlZXREb2M7CiAgICAgYm9vbCBtX3N0eWxlc2hlZXREb2NU
YWtlbjsKKyNlbmRpZgorICAgIAogICAgIFhTTFN0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVl
dDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNw
cCBiL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRMaWJ4c2x0LmNwcAppbmRleCBlZDI3NTNkLi4y
YWU4YjgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHAK
KysrIGIvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlICJYTUxUb2tl
bml6ZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXJTY29wZS5oIgogI2luY2x1ZGUgIlhTTElt
cG9ydFJ1bGUuaCIKQEAgLTU3LDkgKzU4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogWFNMU3R5
bGVTaGVldDo6WFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBT
dHJpbmcmIGhyZWYpCiAgICAgOiBTdHlsZVNoZWV0KHBhcmVudFJ1bGUsIGhyZWYpCiAgICAgLCBt
X293bmVyRG9jdW1lbnQoMCkKLSAgICAsIG1fc3R5bGVzaGVldERvYygwKQogICAgICwgbV9lbWJl
ZGRlZChmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2VkKGZhbHNlKSAvLyBDaGlsZCBzaGVldHMgZ2V0
IG1hcmtlZCBhcyBwcm9jZXNzZWQgd2hlbiB0aGUgbGlieHNsdCBlbmdpbmUgaGFzIGZpbmFsbHkg
c2VlbiB0aGVtLgorICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCiAgICAgLCBtX3N0eWxlc2hlZXRE
b2NUYWtlbihmYWxzZSkKICAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQogewpAQCAtNjgsOSAr
NjksOSBAQCBYU0xTdHlsZVNoZWV0OjpYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVu
dFJ1bGUsIGNvbnN0IFN0cmluZyYgaHJlZikKIFhTTFN0eWxlU2hlZXQ6OlhTTFN0eWxlU2hlZXQo
Tm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCAgYm9vbCBlbWJlZGRlZCkKICAg
ICA6IFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZikKICAgICAsIG1fb3duZXJEb2N1bWVudChw
YXJlbnROb2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9zdHlsZXNoZWV0RG9jKDApCiAgICAgLCBt
X2VtYmVkZGVkKGVtYmVkZGVkKQogICAgICwgbV9wcm9jZXNzZWQodHJ1ZSkgLy8gVGhlIHJvb3Qg
c2hlZXQgc3RhcnRzIG9mZiBwcm9jZXNzZWQuCisgICAgLCBtX3N0eWxlc2hlZXREb2MoMCkKICAg
ICAsIG1fc3R5bGVzaGVldERvY1Rha2VuKGZhbHNlKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0
KDApCiB7CkBAIC0xMDgsOCArMTA5LDggQEAgdm9pZCBYU0xTdHlsZVNoZWV0OjpjaGVja0xvYWRl
ZCgpCiAKIHhtbERvY1B0ciBYU0xTdHlsZVNoZWV0Ojpkb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1f
ZW1iZWRkZWQgJiYgb3duZXJEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gKHhtbERvY1B0cilv
d25lckRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZSgpOworICAgIGlmIChtX2VtYmVkZGVkICYm
IG93bmVyRG9jdW1lbnQoKSAmJiBvd25lckRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZSgpKQor
ICAgICAgICByZXR1cm4gKHhtbERvY1B0cilvd25lckRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJj
ZSgpLT5wbGF0Zm9ybVNvdXJjZSgpOwogICAgIHJldHVybiBtX3N0eWxlc2hlZXREb2M7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXRRdC5jcHAgYi9XZWJDb3JlL3ht
bC9YU0xTdHlsZVNoZWV0UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjlmYWRhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0UXQu
Y3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFhT
TCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFrdWIgV2llY3pv
cmVrIDxmYXcyMTdAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFNM
U3R5bGVTaGVldC5oIgorCisjaWYgRU5BQkxFKFhTTFQpCisKKyNpbmNsdWRlICJET01XaW5kb3cu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJs
b2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitYU0xTdHlsZVNoZWV0OjpYU0xTdHls
ZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgIGJvb2wgZW1iZWRk
ZWQpCisgICAgOiBTdHlsZVNoZWV0KHBhcmVudE5vZGUsIGhyZWYpCisgICAgLCBtX293bmVyRG9j
dW1lbnQocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fZW1iZWRkZWQoZW1iZWRkZWQp
Cit7Cit9CisKK1hTTFN0eWxlU2hlZXQ6On5YU0xTdHlsZVNoZWV0KCkKK3sKK30KKworYm9vbCBY
U0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKK3sK
KyAgICBpZiAob3duZXJOb2RlKCkpCisgICAgICAgIG93bmVyTm9kZSgpLT5zaGVldExvYWRlZCgp
OworfQorCit2b2lkIFhTTFN0eWxlU2hlZXQ6OmNsZWFyRG9jdW1lbnRzKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitEb2NMb2FkZXIqIFhTTFN0eWxlU2hlZXQ6OmRvY0xvYWRlcigp
Cit7CisgICAgaWYgKCFtX293bmVyRG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtX293bmVyRG9jdW1lbnQtPmRvY0xvYWRlcigpOworfQorCitib29sIFhTTFN0eWxlU2hl
ZXQ6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sKQoreworICAgIC8vIEZJ
WE1FOiBGaXggUVhtbFF1ZXJ5IHNvIHRoYXQgaXQgYWxsb3dzIGNvbXBpbGluZyB0aGUgc3R5bGVz
aGVldCBiZWZvcmUgc2V0dGluZyB0aGUgZG9jdW1lbnQKKyAgICAvLyB0byBiZSB0cmFuc2Zvcm1l
ZC4gVGhpcyB3YXkgd2UgY291bGQgbm90IG9ubHkgY2hlY2sgaWYgdGhlIHN0eWxlc2hlZXQgaXMg
Y29ycmVjdCBiZWZvcmUgdXNpbmcgaXQKKyAgICAvLyBidXQgYWxzbyB0dXJuIFhTTFN0eWxlU2hl
ZXQ6OnNoZWV0U3RyaW5nKCkgaW50byBYU0xTdHlsZVNoZWV0OjpxdWVyeSgpIHRoYXQgcmV0dXJu
cyBhIFFYbWxRdWVyeS4KKworICAgIG1fc2hlZXRTdHJpbmcgPSBzdHJpbmc7CisgICAgcmV0dXJu
ICFtX3NoZWV0U3RyaW5nLmlzRW1wdHkoKTsKK30KKwordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2Fk
Q2hpbGRTaGVldHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgWFNMU3R5
bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgWFNMU3R5bGVTaGVldDo6c2V0UGFyZW50U3R5bGVTaGVl
dChYU0xTdHlsZVNoZWV0KiBwYXJlbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBYU0xTdHlsZVNoZWV0OjptYXJrQXNQcm9jZXNzZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShY
U0xUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oIGIvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5oCmluZGV4IDRiOTBjMTYuLjliOTEwMTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmgKQEAgLTI4LDkgKzI4LDEyIEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKworI2lmICFVU0UoUVhNTFFVRVJZKQogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRl
cm5hbHMuaD4KICNpbmNsdWRlIDxsaWJ4c2x0L2RvY3VtZW50cy5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OCwxMiArNjEs
MTMgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldCgpOwogCisjaWYgIVVTRShRWE1MUVVFUlkp
CiAgICAgc3RhdGljIHZvaWQgcGFyc2VFcnJvckZ1bmModm9pZCogdXNlckRhdGEsIHhtbEVycm9y
Kik7CiAgICAgc3RhdGljIHZvaWQgZ2VuZXJpY0Vycm9yRnVuYyh2b2lkKiB1c2VyRGF0YSwgY29u
c3QgY2hhciogbXNnLCAuLi4pOwogICAgIAotcHVibGljOgogICAgIC8vIE9ubHkgZm9yIGxpYlhT
TFQgY2FsbGJhY2tzCiAgICAgWFNMU3R5bGVTaGVldCogeHNsU3R5bGVzaGVldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGVzaGVldC5nZXQoKTsgfQorI2VuZGlmCiAKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFBhcmFtZXRlck1hcDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGIvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwCmluZGV4IDZiMmEwZmQuLjIwMGM1NmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1s
L1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6
ZXIuaCIKICNpbmNsdWRlICJYU0xTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiWFNMVEV4dGVuc2lv
bnMuaCIKQEAgLTI0MSw4ICsyNDIsOCBAQCBzdGF0aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQ
dHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGREZWxldGUpCiAgICAgYm9v
bCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gb3duZXJEb2N1bWVudC5nZXQoKSk7
CiAKICAgICB4bWxEb2NQdHIgc291cmNlRG9jID0gMDsKLSAgICBpZiAoc291cmNlSXNEb2N1bWVu
dCkKLSAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cilvd25lckRvY3VtZW50LT50cmFuc2Zv
cm1Tb3VyY2UoKTsKKyAgICBpZiAoc291cmNlSXNEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LT50
cmFuc2Zvcm1Tb3VyY2UoKSkKKyAgICAgICAgc291cmNlRG9jID0gKHhtbERvY1B0cilvd25lckRv
Y3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKS0+cGxhdGZvcm1Tb3VyY2UoKTsKICAgICBpZiAoIXNv
dXJjZURvYykgewogICAgICAgICBzb3VyY2VEb2MgPSAoeG1sRG9jUHRyKXhtbERvY1B0ckZvclN0
cmluZyhvd25lckRvY3VtZW50LT5kb2NMb2FkZXIoKSwgY3JlYXRlTWFya3VwKHNvdXJjZU5vZGUp
LAogICAgICAgICAgICAgc291cmNlSXNEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQtPnVybCgpLnN0
cmluZygpIDogU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
clF0LmNwcCBiL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmYTg1YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3JRdC5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgWFNMIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBKYWt1YiBXaWVjem9yZWsgPGZhdzIxN0BnbWFpbC5jb20+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShYU0xUKQorCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgor
CisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCisjaW5jbHVkZSAibG9hZGVy
LmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpbmNs
dWRlIDxxYWJzdHJhY3RtZXNzYWdlaGFuZGxlci5oPgorI2luY2x1ZGUgPHFidWZmZXIuaD4KKyNp
bmNsdWRlIDxxc291cmNlbG9jYXRpb24uaD4KKyNpbmNsdWRlIDxxeG1scXVlcnkuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYU0xUTWVzc2FnZUhhbmRsZXIgOiBwdWJsaWMgUUFi
c3RyYWN0TWVzc2FnZUhhbmRsZXIgeworCitwdWJsaWM6CisgICAgWFNMVE1lc3NhZ2VIYW5kbGVy
KERvY3VtZW50KiBkb2N1bWVudCA9IDApOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVNZXNzYWdl
KFF0TXNnVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsJiBpZGVudGlmaWVyLCBjb25zdCBRU291cmNl
TG9jYXRpb24mIHNvdXJjZUxvY2F0aW9uKTsKKworcHJpdmF0ZToKKyAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKK307CisKK1hTTFRNZXNzYWdlSGFuZGxlcjo6WFNMVE1lc3NhZ2VIYW5kbGVyKERv
Y3VtZW50KiBkb2N1bWVudCkKKyAgICA6IFFBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyKCkKKyAgICAs
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7Cit9CisKK3ZvaWQgWFNMVE1lc3NhZ2VIYW5kbGVyOjpo
YW5kbGVNZXNzYWdlKFF0TXNnVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBkZXNjcmlwdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
VXJsJiBpZGVudGlmaWVyLCBjb25zdCBRU291cmNlTG9jYXRpb24mIHNvdXJjZUxvY2F0aW9uKQor
eworICAgIGlmICghbV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TWVzc2FnZUxldmVsIGxldmVsOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUXREZWJ1
Z01zZzoKKyAgICAgICAgbGV2ZWwgPSBUaXBNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUXRXYXJuaW5nTXNnOgorICAgICAgICBsZXZlbCA9IFdhcm5pbmdNZXNzYWdlTGV2
ZWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUXRDcml0aWNhbE1zZzoKKyAgICBjYXNlIFF0
RmF0YWxNc2c6CisgICAgICAgIGxldmVsID0gRXJyb3JNZXNzYWdlTGV2ZWw7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGxldmVsID0gTG9nTWVzc2FnZUxldmVsOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBDb25zb2xlKiBjb25zb2xlID0gbV9kb2N1bWVudC0+
ZnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKTsKKyAgICBjb25zb2xlLT5hZGRNZXNzYWdl
KFhNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBsZXZlbCwgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VMb2NhdGlvbi5saW5lKCksIHNvdXJjZUxvY2F0
aW9uLnVyaSgpLnRvU3RyaW5nKCkpOworfQorCitib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9y
bVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVz
dWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQoreworICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOworCisgICAgUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IHN0eWxlc2hlZXQgPSBtX3N0eWxl
c2hlZXQ7CisgICAgaWYgKCFzdHlsZXNoZWV0ICYmIG1fc3R5bGVzaGVldFJvb3ROb2RlKSB7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX3N0eWxlc2hlZXRSb290Tm9kZS5nZXQoKTsKKyAgICAgICAg
c3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0ZShub2RlLT5wYXJlbnQoKSA/IG5vZGUt
PnBhcmVudCgpIDogbm9kZSwgbm9kZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAg
ICAgICBzdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAobm9kZSkpOworICAgIH0K
KworICAgIGlmICghc3R5bGVzaGVldCB8fCBzdHlsZXNoZWV0LT5zaGVldFN0cmluZygpLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG93
bmVyRG9jdW1lbnQgPSBzb3VyY2VOb2RlLT5kb2N1bWVudCgpOworICAgIGJvb2wgc291cmNlSXNE
b2N1bWVudCA9IChzb3VyY2VOb2RlID09IG93bmVyRG9jdW1lbnQuZ2V0KCkpOworCisgICAgUVht
bFF1ZXJ5IHF1ZXJ5KFFYbWxRdWVyeTo6WFNMVDIwKTsKKworICAgIFhTTFRNZXNzYWdlSGFuZGxl
ciBtZXNzYWdlSGFuZGxlcihvd25lckRvY3VtZW50LmdldCgpKTsKKyAgICBxdWVyeS5zZXRNZXNz
YWdlSGFuZGxlcigmbWVzc2FnZUhhbmRsZXIpOworCisgICAgWFNMVFByb2Nlc3Nvcjo6UGFyYW1l
dGVyTWFwOjppdGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7CisgICAgZm9yIChYU0xU
UHJvY2Vzc29yOjpQYXJhbWV0ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcXVlcnkuYmluZFZhcmlhYmxlKFFTdHJpbmco
aXQtPmZpcnN0KSwgUVhtbEl0ZW0oUVZhcmlhbnQoaXQtPnNlY29uZCkpKTsKKworICAgIFFTdHJp
bmcgc291cmNlOworICAgIGlmIChzb3VyY2VJc0RvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQtPnRy
YW5zZm9ybVNvdXJjZSgpKQorICAgICAgICBzb3VyY2UgPSBvd25lckRvY3VtZW50LT50cmFuc2Zv
cm1Tb3VyY2UoKS0+cGxhdGZvcm1Tb3VyY2UoKTsKKyAgICBpZiAoIXNvdXJjZUlzRG9jdW1lbnQg
fHwgc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlID0gY3JlYXRlTWFya3VwKHNvdXJj
ZU5vZGUpOworCisgICAgUUJ1ZmZlciBpbnB1dEJ1ZmZlcjsKKyAgICBRQnVmZmVyIHN0eWxlU2hl
ZXRCdWZmZXI7CisgICAgUUJ1ZmZlciBvdXRwdXRCdWZmZXI7CisKKyAgICBpbnB1dEJ1ZmZlci5z
ZXREYXRhKHNvdXJjZS50b1V0ZjgoKSk7CisgICAgc3R5bGVTaGVldEJ1ZmZlci5zZXREYXRhKFFT
dHJpbmcoc3R5bGVzaGVldC0+c2hlZXRTdHJpbmcoKSkudG9VdGY4KCkpOworCisgICAgaW5wdXRC
dWZmZXIub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKKyAgICBzdHlsZVNoZWV0QnVmZmVyLm9w
ZW4oUUlPRGV2aWNlOjpSZWFkT25seSk7CisgICAgb3V0cHV0QnVmZmVyLm9wZW4oUUlPRGV2aWNl
OjpSZWFkV3JpdGUpOworCisgICAgcXVlcnkuc2V0Rm9jdXMoJmlucHV0QnVmZmVyKTsKKyAgICBx
dWVyeS5zZXRRdWVyeSgmc3R5bGVTaGVldEJ1ZmZlciwgUVVybChzdHlsZXNoZWV0LT5ocmVmKCkp
KTsKKyAgICBzdWNjZXNzID0gcXVlcnkuZXZhbHVhdGVUbygmb3V0cHV0QnVmZmVyKTsKKyAgICBv
dXRwdXRCdWZmZXIucmVzZXQoKTsKKyAgICByZXN1bHRTdHJpbmcgPSBRU3RyaW5nOjpmcm9tVXRm
OChvdXRwdXRCdWZmZXIucmVhZEFsbCgpKS50cmltbWVkKCk7CisKKyAgICBpZiAobV9zdHlsZXNo
ZWV0KSB7CisgICAgICAgIG1fc3R5bGVzaGVldC0+Y2xlYXJEb2N1bWVudHMoKTsKKyAgICAgICAg
bV9zdHlsZXNoZWV0ID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFhTTFQpCi0tIAoxLjYuNC40
Cgo=
</data>
<flag name="review"
          id="21431"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>