<?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>26146</bug_id>
          
          <creation_ts>2009-06-02 12:01:52 -0700</creation_ts>
          <short_desc>Change to use ThreadableLoader to load the worker script in order to check URL origin for redirection.</short_desc>
          <delta_ts>2009-06-16 11:17:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>26196</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>124029</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-02 12:01:52 -0700</bug_when>
    <thetext>Per the discussion on Worker URL origin check for redirection scenario (http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-May/019965.html), we feel that it is a good practice to check every URL on the redirect chain in order to make sure it is coming from the same origin as the original document.

Currently the URL origin is only checked before we use DocLoader to load the script. To support the redirection URL origin check, we need to switch to using ThreadableLoader, i.e. SubresourceLoader, to load the script since it enforces such check for every redirection URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124203</commentid>
    <comment_count>1</comment_count>
      <attachid>30922</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-03 13:09:50 -0700</bug_when>
    <thetext>Created attachment 30922
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124220</commentid>
    <comment_count>2</comment_count>
      <attachid>30922</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-03 14:57:36 -0700</bug_when>
    <thetext>Comment on attachment 30922
Proposed Patch

I didn&apos;t full review this yet, but wanted to share some comments anyway.

&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26146
&gt; +        Test for the above bug.

Please add a title of the bug (or, better yet, what is fixed, because the bug&apos;s title mentions both the problem and a suggested approach, which may be confusing to some watchers).

&gt; +        * http/tests/workers/resources/redirect.php: Copied from LayoutTests/http/tests/xmlhttprequest/resources/redirect.php.

We have a copy in http/tests/resources (I think that we should remove the xmlhttprequest and other copies one day for consistency).

I don&apos;t understand why importScripts() uses WorkerScriptLoader - isn&apos;t it ok for these scripts to come from any domain, or via redirects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124221</commentid>
    <comment_count>3</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-03 15:07:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 30922 [review])
&gt; I didn&apos;t full review this yet, but wanted to share some comments anyway.
&gt; 
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=26146
&gt; &gt; +        Test for the above bug.
&gt; 
&gt; Please add a title of the bug (or, better yet, what is fixed, because the bug&apos;s
&gt; title mentions both the problem and a suggested approach, which may be
&gt; confusing to some watchers).
I will add more details in next patch.
&gt; 
&gt; &gt; +        * http/tests/workers/resources/redirect.php: Copied from LayoutTests/http/tests/xmlhttprequest/resources/redirect.php.
&gt; 
&gt; We have a copy in http/tests/resources (I think that we should remove the
&gt; xmlhttprequest and other copies one day for consistency).
I will change to use that copy.
&gt; 
&gt; I don&apos;t understand why importScripts() uses WorkerScriptLoader - isn&apos;t it ok
&gt; for these scripts to come from any domain, or via redirects?
&gt; 
importScripts() uses WorkerImportScriptsClient, that has been renamed to WorkerScriptLoader so that both normal script loading and importScript could use the same functionaility.

Yes, currently there is a bug in redirect handling for importScripts. It should allow script coming and redirecting from any origin. I will fix it in other patch and also add a layout test for it next time.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124222</commentid>
    <comment_count>4</comment_count>
      <attachid>30922</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-03 15:16:34 -0700</bug_when>
    <thetext>Comment on attachment 30922
Proposed Patch

Marking r- per the above discussion to get this out of review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124384</commentid>
    <comment_count>5</comment_count>
      <attachid>30961</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-04 14:42:28 -0700</bug_when>
    <thetext>Created attachment 30961
Proposed Patch

The importScripts redirect check bug is fixed in the patch for bug 26196. I&apos;ve updated this patch to be built on top of patch for bug 26196. In addition, I have updated LayoutTests/ChangeLog and changed to use redirect.php in http/tests/resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124913</commentid>
    <comment_count>6</comment_count>
      <attachid>30961</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-09 01:16:23 -0700</bug_when>
    <thetext>Comment on attachment 30961
Proposed Patch

&gt; +void WorkerScriptLoader::load(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, RedirectOriginCheck redirectOriginCheck, WorkerScriptLoaderClient* client)
&gt; +{
&gt; +    ResourceRequest request(url);
&gt; +    request.setHTTPMethod(&quot;GET&quot;);
&gt; +    request.setHTTPOrigin(scriptExecutionContext-&gt;securityOrigin()-&gt;toString());

Why don&apos;t you need to set the Referer here too?

&gt; +        ContentSniff contentSniff = request.url().isLocalFile() ? SniffContent : DoNotSniffContent;

This flag is super mysterious to me, but I suspect this usage is &quot;correct&quot; insofar as it is consistent with other locations.

&gt; +    if (response.httpStatusCode() / 100 != 2 &amp;&amp; response.httpStatusCode() != 0) {

This is super ugly.  I know Chromium does this, but do we do this elsewhere in Webcore?  If so, please file a bug to clean up this nonsense. 

&gt; +    protected:
&gt; +        virtual ~WorkerScriptLoaderClient() { }

Why is this protected?

&gt; +        WorkerScriptLoader()
&gt; +            : m_client(0)
&gt; +            , m_failed(false)
&gt; +            , m_identifier(0)
&gt; +        {
&gt; +        }

Please move this function to the .cpp file.  It is an implementation detail.

&gt; +        // If loaderClient is provided, load the script asynchronously. Otherwise, load it synchronously.
&gt; +        void load(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, RedirectOriginCheck redirectOriginCheck, WorkerScriptLoaderClient* client);

Why not have two entry points, one for sync and one for async?  Conditioning this on the nullity of the client is asking for future bugs.

The above comments are all pretty minor, but I&apos;d like to see an updated patch before giving an r+.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125067</commentid>
    <comment_count>7</comment_count>
      <attachid>31122</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-09 18:27:56 -0700</bug_when>
    <thetext>Created attachment 31122
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125068</commentid>
    <comment_count>8</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-09 18:31:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 30961 [review])
&gt; &gt; +void WorkerScriptLoader::load(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, RedirectOriginCheck redirectOriginCheck, WorkerScriptLoaderClient* client)
&gt; &gt; +{
&gt; &gt; +    ResourceRequest request(url);
&gt; &gt; +    request.setHTTPMethod(&quot;GET&quot;);
&gt; &gt; +    request.setHTTPOrigin(scriptExecutionContext-&gt;securityOrigin()-&gt;toString());
&gt; 
&gt; Why don&apos;t you need to set the Referer here too?

We don&apos;t really neeed to set the Referer here since underneath it, SubresourceLoader will set the correct Referer. 
&gt; 
&gt; &gt; +        ContentSniff contentSniff = request.url().isLocalFile() ? SniffContent : DoNotSniffContent;
&gt; 
&gt; This flag is super mysterious to me, but I suspect this usage is &quot;correct&quot;
&gt; insofar as it is consistent with other locations.
&gt; 
Yes, it is used in other places.
&gt; &gt; +    if (response.httpStatusCode() / 100 != 2 &amp;&amp; response.httpStatusCode() != 0) {
&gt; 
&gt; This is super ugly.  I know Chromium does this, but do we do this elsewhere in
&gt; Webcore?  If so, please file a bug to clean up this nonsense. 
&gt; 
Yes, this is kind of ugly. However, it is widely used throughout WebCore as a way to check HTTP status code.
&gt; &gt; +    protected:
&gt; &gt; +        virtual ~WorkerScriptLoaderClient() { }
&gt; 
&gt; Why is this protected?

Yes, this has to be protected because the derived class will get to this.
&gt; 
&gt; &gt; +        WorkerScriptLoader()
&gt; &gt; +            : m_client(0)
&gt; &gt; +            , m_failed(false)
&gt; &gt; +            , m_identifier(0)
&gt; &gt; +        {
&gt; &gt; +        }
&gt; 
&gt; Please move this function to the .cpp file.  It is an implementation detail.

Done.
&gt; 
&gt; &gt; +        // If loaderClient is provided, load the script asynchronously. Otherwise, load it synchronously.
&gt; &gt; +        void load(ScriptExecutionContext* scriptExecutionContext, const String&amp; url, RedirectOriginCheck redirectOriginCheck, WorkerScriptLoaderClient* client);
&gt; 
&gt; Why not have two entry points, one for sync and one for async?  Conditioning
&gt; this on the nullity of the client is asking for future bugs.
&gt; 
Done.
&gt; The above comments are all pretty minor, but I&apos;d like to see an updated patch
&gt; before giving an r+.
&gt; 
&gt; Thanks!
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125075</commentid>
    <comment_count>9</comment_count>
      <attachid>31122</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-09 18:55:57 -0700</bug_when>
    <thetext>Comment on attachment 31122
Proposed Patch

LGTM, with one question:

&gt; +    request.setHTTPOrigin(scriptExecutionContext-&gt;securityOrigin()-&gt;toString());

I still don&apos;t understand this line of code.  Where in http://www.whatwg.org/specs/web-workers/current-work/ does it say to send the Origin header?  Usually, we send the Origin header for POST requests and requests generated from cross-origin XMLHttpRequests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125664</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-13 13:43:10 -0700</bug_when>
    <thetext>&gt; &gt; +        ContentSniff contentSniff = request.url().isLocalFile() ? SniffContent : DoNotSniffContent;
&gt; 
&gt; This flag is super mysterious to me, but I suspect this usage is &quot;correct&quot;
&gt; insofar as it is consistent with other locations.

It is not consistent, and I think it&apos;s incorrect. The only place we use similar logic is in WorkerThreadableLoader::loadResourceSynchronously(), while in this patch, it&apos;s added for async loading.

The original copy/paste source for this was XMLHttpRequest - we had to enable content sniffing for local files in order for extension-based MIME type guessing to work on Windows, working around a CFNetwork bug. This is no longer needed, and the code was removed in &lt;http://trac.webkit.org/changeset/43511&gt;. I think that the whole ContentSniff enum can be removed now, together with associated function arguments (in a separate patch, of course).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125677</commentid>
    <comment_count>11</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-13 14:40:50 -0700</bug_when>
    <thetext>Thanks for sharing the background info about this enum. I will change to always use DoNotSniffContent. Also, I will change the enum value RequireSameRedirectOrigin to DenyCrossOriginRedirect as suggested by Adam in another thread.

I am still waiting for Oliver to confirm the removal of Origin header. Once all these are settled, I will send in a new patch and then land it.

(In reply to comment #10)
&gt; &gt; &gt; +        ContentSniff contentSniff = request.url().isLocalFile() ? SniffContent : DoNotSniffContent;
&gt; &gt; 
&gt; &gt; This flag is super mysterious to me, but I suspect this usage is &quot;correct&quot;
&gt; &gt; insofar as it is consistent with other locations.
&gt; 
&gt; It is not consistent, and I think it&apos;s incorrect. The only place we use similar
&gt; logic is in WorkerThreadableLoader::loadResourceSynchronously(), while in this
&gt; patch, it&apos;s added for async loading.
&gt; 
&gt; The original copy/paste source for this was XMLHttpRequest - we had to enable
&gt; content sniffing for local files in order for extension-based MIME type
&gt; guessing to work on Windows, working around a CFNetwork bug. This is no longer
&gt; needed, and the code was removed in &lt;http://trac.webkit.org/changeset/43511&gt;. I
&gt; think that the whole ContentSniff enum can be removed now, together with
&gt; associated function arguments (in a separate patch, of course).
&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125735</commentid>
    <comment_count>12</comment_count>
      <attachid>31122</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-13 22:16:16 -0700</bug_when>
    <thetext>Comment on attachment 31122
Proposed Patch

Changing back to ? because we&apos;re waiting on feedback from Olliej</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125988</commentid>
    <comment_count>13</comment_count>
      <attachid>31122</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-15 11:13:20 -0700</bug_when>
    <thetext>Comment on attachment 31122
Proposed Patch

I think Dave Levin should review this patch, but also i&apos;m unsure what it is trying to do -- the bug conflates changing the loader and adding origin checks, and i&apos;m unsure whether this effects new Worker or importScripts

The discussion i had with firefox people some time ago resulted in the conclusion that importScripts should not have an origin check (eg. it would behave as &lt;script&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126049</commentid>
    <comment_count>14</comment_count>
      <attachid>31122</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-15 15:08:39 -0700</bug_when>
    <thetext>Comment on attachment 31122
Proposed Patch

Tthis is looking pretty good.  As far the code itself, it all looks good as far as the algorithm. I have one concern about the script encoding below when loading the worker script itself.

Several style/comment/etc. comments below.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +2009-06-09  Jian Li  &lt;jianli@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 26146: Change to use ThreadableLoader to load the worker script
&gt; +        in order to check URL origin for redirection.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26146
&gt; +
&gt; +        Test: http/tests/workers/worker-redirect.html
&gt; +
&gt; +        * WebCore.xcodeproj/project.pbxproj:
&gt; +        * workers/Worker.cpp:
&gt; +        (WebCore::Worker::Worker):
&gt; +        (WebCore::Worker::notifyFinished):
&gt; +        * workers/Worker.h:
&gt; +        * workers/WorkerContext.cpp:
&gt; +        (WebCore::WorkerContext::importScripts):
&gt; +        * workers/WorkerImportScriptsClient.cpp: Removed.
&gt; +        * workers/WorkerImportScriptsClient.h: Removed.
&gt; +        * workers/WorkerScriptLoader.cpp: Renamed from workers/WorkerImportScriptsClient.cpp.
&gt; +        (WebCore::WorkerScriptLoader::loadSynchronously):
&gt; +        (WebCore::WorkerScriptLoader::loadAsynchronously):
&gt; +        (WebCore::WorkerScriptLoader::didFinishLoading):
&gt; +        (WebCore::WorkerScriptLoader::didFail):
&gt; +        (WebCore::WorkerScriptLoader::didFailRedirectCheck):
&gt; +        (WebCore::WorkerScriptLoader::didReceiveAuthenticationCancellation):
&gt; +        (WebCore::WorkerScriptLoader::notifyFinished):
&gt; +        * workers/WorkerScriptLoader.h: Renamed from workers/WorkerImportScriptsClient.h.
&gt; +

It would be nice to have some more function level of file level comments.  For example, why was 
WorkerScriptLoader.cpp renamed from workers/WorkerImportScriptsClient.cpp could be one comment.

It would have been nice to separate the two changes as I see them:
1. Making WorkerImportScriptsClient more generic so other could use it.
2. Making WorkerContext use it for loading scripts.



&gt; diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj

There are several other makefiles that need to be fixed up.



&gt; diff --git a/WebCore/workers/Worker.h b/WebCore/workers/Worker.h
&gt; +        OwnPtr&lt;WorkerScriptLoader&gt; m_workerScriptLoader;

What about m_scriptLoader as the variable name?


&gt; diff --git a/WebCore/workers/WorkerContext.cpp b/WebCore/workers/WorkerContext.cpp

&gt; +        WorkerScriptLoader workerScriptLoader;
Consider using scriptLoader instead of orkerScriptLoader (just because shorter variable names are easier to skim and not get confused).



&gt; diff --git a/WebCore/workers/WorkerScriptLoader.cpp b/WebCore/workers/WorkerScriptLoader.cpp
&gt; new file mode 100644
&gt; index 0000000..a0f3c48
&gt; --- /dev/null
&gt; +++ b/WebCore/workers/WorkerScriptLoader.cpp


&gt; +     // We only support synchronous script loading for importScripts in WorkerContext.
I wonder if this comment is necessary.  Especially because it could easily get out of date and I&apos;m not sure that it adds value.

How about just removing it?  The assert and the code right below it makes it clear that the sync load path is only for use by workers.


&gt; +void WorkerScriptLoader::didReceiveResponse(const ResourceResponse&amp; response)
&gt; +{
&gt; +    if (response.httpStatusCode() / 100 != 2 &amp;&amp; response.httpStatusCode() != 0) {

Avoid comparisons to zero.

s/response.httpStatusCode() != 0/response.httpStatusCode()/


+   m_responseEncoding = response.textEncodingName();
About this for the script for the Worker itself. dimich did a lot of investigation about the encodings for worker scripts, so
we should get a comment from him if this is the right thing or not.


&gt; +
&gt; +}
Add the namespace comment.


&gt; diff --git a/WebCore/workers/WorkerScriptLoader.h b/WebCore/workers/WorkerScriptLoader.h


&gt; +    class WorkerScriptLoaderClient {
&gt; +    public:
&gt; +        virtual void notifyFinished() { }
&gt; +        
&gt; +    protected:
&gt; +        virtual ~WorkerScriptLoaderClient() { }
&gt; +    };
&gt; +
It would be good to have WorkerScriptLoaderClient in a separate header file.

Why does the destructor need to be defined (as virtual)?



&gt; +    class WorkerScriptLoader : public ThreadableLoaderClient {

There are a lot of parameter names that don&apos;t add any information.  Please remove them.

First example &quot;ScriptExecutionContext* scriptExecutionContext&quot;


&gt;
&gt; +}
Add namespace comment.

&gt; +#endif // ENABLE(WORKERS)
&gt; +#endif
Add comment about what this ends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126095</commentid>
    <comment_count>15</comment_count>
      <attachid>31321</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-15 17:37:37 -0700</bug_when>
    <thetext>Created attachment 31321
Proposed Patch

Fixed all per levin&apos;s feedbacks. I&apos;ve talked with dimich about the text encoding and what we do now is fine.

I am going to use a different patch to change the enum values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126103</commentid>
    <comment_count>16</comment_count>
      <attachid>31321</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-15 18:01:09 -0700</bug_when>
    <thetext>Comment on attachment 31321
Proposed Patch

Just a few things here that you can fix on landing.


&gt; diff --git a/LayoutTests/http/tests/workers/worker-redirect.html b/LayoutTests/http/tests/workers/worker-redirect.html
worker-redirect-cross-origin.html?

&gt; @@ -0,0 +1,28 @@
&gt; +&lt;body&gt;
&gt; +&lt;p&gt;Test worker script URL origin check for redirections.&lt;/p&gt;

Test that loading the worker&apos;s script does not allow a cross origin redirect (bug &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=26146&quot;&gt;bug 26146&lt;a/&gt;)


&gt; +var worker = new Worker(&apos;/resources/redirect.php?url=http://localhost:8000/workers/resources/worker-redirect-target.js&apos;);
&gt; +worker.onerror = function(evt) {
&gt; +    log(&quot;SUCCESS: threw error when attempting to load script redirected from different origin&quot;);
SUCCESS: threw error when attempting to redirected cross origin while loading the worker script.

&gt; +worker.onmessage = function(evt) {
&gt; +    log(&quot;FAIL: executed script redirected from different origin&quot;);
FAIL: executed script when redirect cross origin.


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        * workers/WorkerImportScriptsClient.h: Removed.
&gt; +        * workers/WorkerScriptLoader.cpp: Renamed from workers/WorkerImportScriptsClient.cpp.
&gt; +          This to make it more generic so other could use it.
so others
(or you could just say &quot;Worker script loading&quot;).


&gt; +        (WebCore::WorkerScriptLoader::notifyFinished):
&gt; +        * workers/WorkerScriptLoader.h: Renamed from workers/WorkerImportScriptsClient.h.
&gt; +          This to make it more generic so other could use it.
others


&gt; diff --git a/WebCore/workers/Worker.h b/WebCore/workers/Worker.h
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;WorkerScriptLoader.h&quot;
Only needs WorkerScriptLoaderClient.h and add &quot;class WorkerScriptLoader;&quot; below.



&gt; diff --git a/WebCore/workers/WorkerScriptLoader.h b/WebCore/workers/WorkerScriptLoader.h
&gt; +#include &quot;ThreadableLoaderClient.h&quot;
&gt; +#include &quot;WorkerScriptLoaderClient.h&quot;
I don&apos;t think you need to include this header.  Only add &quot;class WorkerScriptLoaderClient;&quot; below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126238</commentid>
    <comment_count>17</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-06-16 11:17:55 -0700</bug_when>
    <thetext>Committed as hhttp://trac.webkit.org/changeset/44726</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30922</attachid>
            <date>2009-06-03 13:09:50 -0700</date>
            <delta_ts>2009-06-04 14:42:28 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>26146</filename>
            <type>text/plain</type>
            <size>31438</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MGQ4NTNhLi43NTU4YTJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDYt
MDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNjE0NgorICAgICAgICBUZXN0IGZvciB0aGUgYWJvdmUgYnVnLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9yZWRpcmVjdC5waHA6IENvcGllZCBm
cm9tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3JlZGly
ZWN0LnBocC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1y
ZWRpcmVjdC10YXJnZXQuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy93
b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDA5LTA2LTAyICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBMYW5kIGNvcnJlY3Qg
cmVzdWx0cyBmb3IgYSB0ZXN0IEkganVzdCBhZGRlZCAoZm9yZ290IHRvIHJlZ2VuZXJhdGUgdGhl
bSBhZnRlciBhZGRpbmcgbmV3CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dv
cmtlcnMvcmVzb3VyY2VzL3JlZGlyZWN0LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29y
a2Vycy9yZXNvdXJjZXMvcmVkaXJlY3QucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVlY2QyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dvcmtlcnMvcmVzb3VyY2VzL3JlZGlyZWN0LnBocApAQCAtMCwwICsxLDQgQEAKKzw/cGhwCisg
ICAgJHVybCA9ICRfR0VUWyd1cmwnXTsKKyAgICBoZWFkZXIoIkxvY2F0aW9uOiAkdXJsIik7Cis/
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93
b3JrZXItcmVkaXJlY3QtdGFyZ2V0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJz
L3Jlc291cmNlcy93b3JrZXItcmVkaXJlY3QtdGFyZ2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY0ZGIxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMKQEAg
LTAsMCArMSBAQAorcG9zdE1lc3NhZ2UoIkZvbyIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmJhYjk5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw0IEBACitUZXN0IHdvcmtlciBzY3JpcHQgVVJMIG9yaWdpbiBjaGVj
ayBmb3IgcmVkaXJlY3Rpb25zLgorCitTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRp
bmcgdG8gbG9hZCBzY3JpcHQgcmVkaXJlY3RlZCBmcm9tIGRpZmZlcmVudCBvcmlnaW4KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDNjNDUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0
bWwKQEAgLTAsMCArMSwyOCBAQAorPGJvZHk+Cis8cD5UZXN0IHdvcmtlciBzY3JpcHQgVVJMIG9y
aWdpbiBjaGVjayBmb3IgcmVkaXJlY3Rpb25zLjwvcD4KKzxkaXYgaWQ9cmVzdWx0PjwvZGl2Pgor
PHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvcmVkaXJlY3QucGhwP3Vy
bD1odHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXJlZGlyZWN0
LXRhcmdldC5qcycpOword29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2co
IlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBsb2FkIHNjcmlwdCByZWRp
cmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2coIkZBSUw6IGV4
ZWN1dGVkIHNjcmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMTE5ZmE2
Li40ZjMzNzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDA5LTA2LTAzICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYxNDYKKyAgICAg
ICAgQ2hhbmdlIHRvIHVzZSBUaHJlYWRhYmxlTG9hZGVyIHRvIGxvYWQgdGhlIHdvcmtlciBzY3Jp
cHQgaW4gb3JkZXIgdG8gY2hlY2sgVVJMIG9yaWdpbiBmb3IgcmVkaXJlY3Rpb24uCisKKyAgICAg
ICAgVGVzdDogaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sCisKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpXb3JrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXIuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyk6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyU2NyaXB0TG9hZGVyLmg6IEFkZGVkLgorCiAyMDA5LTA2LTAyICBKdWxpZW4gQ2hhZmZyYWl4
ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMjc0
MmFjLi5hODIyMTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjE3MSw4ICsyMTcxLDggQEAKIAkJQTdEMDMxOEUwRTkzNTQwMzAwRTI0QUNEIC8qIEpT
SW1hZ2VEYXRhQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0YUN1c3RvbS5j
cHAgKi87IH07CiAJCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjdGQzMwRTBB
NTk5RjAwNzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgKi87IH07CiAJCUE3RDNDNTI0MEI1NzZCNEIw
MDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2Fy
ZEhlbHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0
NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oICovOyB9Owot
CQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0
ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgKi87IH07
CisJCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZCMzQ3MEY2MTEw
NDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLzsgfTsKKwkJQTdENkIzNEEwRjYx
MTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyog
V29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdG
IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dy
YWRpZW50U3RvcC5oICovOyB9OwogCQlBODA5RjE0ODBCNzM3OTNCMDAyRTREN0YgLyogUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0
b3AuY3BwICovOyB9OwogCQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmggKi87IH07CkBAIC03MDQ2LDggKzcwNDYsOCBAQAogCQlBN0QwMzE4RDBFOTM1NDAzMDBFMjRB
Q0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNJbWFnZURhdGFDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0QyN0ZDMzBFMEE1OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRIZWxwZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQx
IC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3Jr
ZXJJbXBvcnRTY3JpcHRzQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3
RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlckltcG9ydFNjcmlwdHND
bGllbnQuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8q
IFdvcmtlclNjcmlwdExvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
b3JrZXJTY3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAv
KiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0
TG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDUwQjczNzkz
QTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50
U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdH
cmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjFBODBC
NzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3MSw4ICs5NzcxLDYgQEAKIAkJCQkyRTQzNDYzNzBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovLAogCQkJCTJFNDM0NjM4MEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLywKIAkJCQkyRTQzNDYzOTBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi8sCi0JCQkJQTdENkIzNDgwRjYxMTA0
NTAwQjc5RkQxIC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwICovLAotCQkJCUE3RDZC
MzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmggKi8sCiAJ
CQkJMkU0MzQ2M0EwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLywKIAkJ
CQkyRTQzNDYzQjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaCAqLywKIAkJCQky
RTQzNDYzQzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaWRsICovLApAQCAtOTc4
MSw2ICs5Nzc5LDggQEAKIAkJCQkyRTQzNDYzRjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyT2Jq
ZWN0UHJveHkuaCAqLywKIAkJCQkyRTQzNDY0MDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyUnVu
TG9vcC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDEwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxv
b3AuaCAqLywKKwkJCQlBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9h
ZGVyLmNwcCAqLywKKwkJCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0
TG9hZGVyLmggKi8sCiAJCQkJMkU0MzQ2NDIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVh
ZC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5o
ICovLAogCQkJKTsKQEAgLTE2NjkwLDEzICsxNjY5MCwxMyBAQAogCQkJCTJFNDM0NjQ2MEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0NjQ5MEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY0
QjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggaW4gSGVhZGVycyAqLywK
LQkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NEQwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
ckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY1MDBGNTQ2QTgyMDBCMEYxQkEg
LyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjcxQTBCMEVF
RUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJF
NDM0NjUxMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkU0MzQ2NTMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEg
LyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY1NTBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTZG
OTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODY5MSwxMiArMTg2OTEsMTIgQEAKIAkJ
CQlCQzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkU0MzQ2NDUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2Vy
SW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY0QzBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0
MzQ2NEYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUUxMjcxQTE0MEVFRUM4MDQwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NTIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
clJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBNjQzRkQwRUMwOTdBMDAwNzc5NjY4
IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdENkIz
NEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRTQzNDY1NDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0OTIwMDU2RTU4
MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuY3BwCmluZGV4IDg1YmE2OTAuLjFiMjhjNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAKICNpbmNsdWRlICJXb3JrZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlw
dC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02NSwxOCArNjQsOSBAQCBXb3JrZXI6Oldvcmtlcihjb25z
dCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9u
Q29kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IE5lc3RlZCB3b3Jr
ZXJzIG5lZWQgbG9hZGluZyBzdXBwb3J0LiBDb25zaWRlciBhZG9wdGluZyBUaHJlYWRhYmxlTG9h
ZGVyIGhlcmUuCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVu
dCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50
LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVSTCwgIlVURi04Iik7Ci0gICAg
aWYgKCFtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQorICAgIG1fd29ya2VyU2NyaXB0TG9hZGVyID0gbmV3IFdv
cmtlclNjcmlwdExvYWRlcigpOworICAgIG1fd29ya2VyU2NyaXB0TG9hZGVyLT5sb2FkKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9zY3JpcHRVUkwsIHRoaXMpOwogICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsgIC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGls
ZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5v
dCBjb2xsZWN0ZWQsIGFzIHdlbGwgYXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KLSAgICBtX2NhY2hl
ZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogfQogCiBXb3JrZXI6On5Xb3JrZXIoKQpAQCAtMTEy
LDE3ICsxMDIsMTQgQEAgYm9vbCBXb3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fY29udGV4dFByb3h5LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSB8fCBBY3RpdmVE
T01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCi12b2lkIFdvcmtlcjo6bm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQordm9pZCBXb3JrZXI6Om5v
dGlmeUZpbmlzaGVkKCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1bnVz
ZWRSZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAobV9jYWNoZWRTY3JpcHQt
PmVycm9yT2NjdXJyZWQoKSkKKyAgICBpZiAobV93b3JrZXJTY3JpcHRMb2FkZXItPmZhaWxlZCgp
KQogICAgICAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dFByb3h5LT5zdGFydFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0VVJMKSwgbV9jYWNoZWRTY3JpcHQtPnNjcmlw
dCgpKTsKKyAgICAgICAgbV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3Njcmlw
dFVSTCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBt
X3dvcmtlclNjcmlwdExvYWRlci0+c2NyaXB0KCkpOwogCi0gICAgbV9jYWNoZWRTY3JpcHQtPnJl
bW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlwdCA9IDA7CisgICAgbV93b3JrZXJT
Y3JpcHRMb2FkZXIgPSAwOwogCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmgKaW5kZXggZDA1ZjlkNS4uYWI3ZmMwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlci5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaApAQCAtMzEsMjUgKzMxLDI0
IEBACiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJXb3JrZXJT
Y3JpcHRMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2U7Ci0gICAgY2xhc3MgQ2FjaGVkU2NyaXB0OwogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eTsK
IAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBXb3JrZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxXb3JrZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRl
IENhY2hlZFJlc291cmNlQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworICAgIGNsYXNzIFdv
cmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3Qs
IHByaXZhdGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgewog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyKHVybCwgY29udGV4dCwgZWMp
KTsgfQogICAgICAgICB+V29ya2VyKCk7CkBAIC04OSwxMyArODgsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOworICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJn
ZXQoKSB7IHJlZigpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkg
eyBkZXJlZigpOyB9CiAKICAgICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICAgICAgT3du
UHRyPFdvcmtlclNjcmlwdExvYWRlcj4gbV93b3JrZXJTY3JpcHRMb2FkZXI7CiAKICAgICAgICAg
V29ya2VyQ29udGV4dFByb3h5KiBtX2NvbnRleHRQcm94eTsgLy8gVGhlIHByb3h5IG91dGxpdmVz
IHRoZSB3b3JrZXIgdG8gcGVyZm9ybSB0aHJlYWQgc2h1dGRvd24uCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcAppbmRleCA1OTE2OGM3Li4zYmU4MmFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuY3BwCkBAIC0zOCwxNSArMzgsMTQgQEAKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5o
IgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCi0jaW5jbHVkZSAiV29ya2VySW1wb3J0U2Ny
aXB0c0NsaWVudC5oIgogI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV29y
a2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRl
ICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNs
dWRlICJYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
QEAgLTI3MCwyNCArMjY5LDIzIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjYWxsCiAgICAgICAgIH0K
ICAgICAgICAgY29tcGxldGVkVVJMcy5hcHBlbmQodXJsKTsKICAgICB9Ci0gICAgU3RyaW5nIHNl
Y3VyaXR5T3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigp
LT50b1N0cmluZygpOwogICAgIFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29t
cGxldGVkVVJMcy5lbmQoKTsKIAogICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGNvbXBsZXRlZFVSTHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KCppdCk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE1l
dGhvZCgiR0VUIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihzZWN1cml0eU9yaWdp
bik7Ci0gICAgICAgIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQgY2xpZW50KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKml0LCBjYWxsZXJVUkwsIGNhbGxlckxpbmUpOwotICAgICAgICBUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgcmVxdWVzdCwgY2xpZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKKyAgICAg
ICAgV29ya2VyU2NyaXB0TG9hZGVyIHdvcmtlclNjcmlwdExvYWRlcjsKKyAgICAgICAgd29ya2Vy
U2NyaXB0TG9hZGVyLmxvYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaXQsIDApOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFpbGVkLCB0aHJvdyBh
IE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0ZXBzLgotICAgICAg
ICBpZiAoY2xpZW50LmZhaWxlZCgpKSB7CisgICAgICAgIGlmICh3b3JrZXJTY3JpcHRMb2FkZXIu
ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5F
VFdPUktfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zY3JpcHRJbXBvcnRlZCh3b3JrZXJTY3JpcHRMb2FkZXIu
aWRlbnRpZmllcigpLCB3b3JrZXJTY3JpcHRMb2FkZXIuc2NyaXB0KCkpOworICAgICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmFkZE1lc3NhZ2UoSW5zcGVjdG9yQ29udHJvbGxlckRlc3Rp
bmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgIldvcmtlciBzY3JpcHQg
aW1wb3J0ZWQ6IFwiIiArICppdCArICJcIi4iLCBjYWxsZXJMaW5lLCBjYWxsZXJVUkwpOworCiAg
ICAgICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRl
KFNjcmlwdFNvdXJjZUNvZGUoY2xpZW50LnNjcmlwdCgpLCAqaXQpLCAmZXhjZXB0aW9uKTsKKyAg
ICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUod29ya2VyU2NyaXB0TG9h
ZGVyLnNjcmlwdCgpLCAqaXQpLCAmZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCFleGNlcHRpb24u
aGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhjZXB0aW9uKGV4Y2Vw
dGlvbik7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VySW1w
b3J0U2NyaXB0c0NsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiODA2
MWIuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGll
bnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIldvcmtl
ckltcG9ydFNjcmlwdHNDbGllbnQuaCIKLQotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHND
bGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKLXsKLSAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyICYmIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMCkgewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9u
c2UudGV4dEVuY29kaW5nTmFtZSgpOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGll
bnQ6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCi17Ci0gICAgaWYg
KG1fZmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZGVjb2RlcikgewotICAg
ICAgICBpZiAoIW1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Rl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsIG1f
cmVzcG9uc2VFbmNvZGluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZGVjb2RlciA9
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9qYXZhc2NyaXB0IiwgIlVURi04Iik7
Ci0gICAgfQotCi0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAo
bGVuID09IC0xKQotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7Ci0gICAgCi0gICAgbV9zY3Jp
cHQgKz0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKLX0KLQotdm9pZCBXb3JrZXJJbXBv
cnRTY3JpcHRzQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikKLXsKLSAgICBpZiAobV9mYWlsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Rl
Y29kZXIpCi0gICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICAKLSAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNjcmlwdEltcG9ydGVkKGlkZW50aWZpZXIsIG1f
c2NyaXB0KTsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2UoSW5zcGVj
dG9yQ29udHJvbGxlckRlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZl
bCwgIldvcmtlciBzY3JpcHQgaW1wb3J0ZWQ6IFwiIiArIG1fdXJsICsgIlwiLiIsIG1fY2FsbGVy
TGluZU51bWJlciwgbV9jYWxsZXJVUkwpOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHND
bGllbnQ6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgbV9mYWlsZWQgPSB0
cnVlOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZEZhaWxSZWRpcmVj
dENoZWNrKCkKLXsKLSAgICBtX2ZhaWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgV29ya2VySW1wb3J0
U2NyaXB0c0NsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKQotewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VySW1wb3J0U2NyaXB0c0NsaWVudC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNj
cmlwdHNDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNzA1NC4uMDAw
MDAwMAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZuZGVmIFdvcmtl
ckltcG9ydFNjcmlwdHNDbGllbnRfaAotI2RlZmluZSBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50
X2gKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgCi0gICAg
Y2xhc3MgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudCA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2FsbGVyVVJMLCBpbnQgY2FsbGVyTGluZU51bWJlcikK
LSAgICAgICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCi0gICAgICAgICAgICAsIG1fdXJsKHVybCkKLSAgICAgICAgICAgICwgbV9jYWxsZXJV
UkwoY2FsbGVyVVJMKQotICAgICAgICAgICAgLCBtX2NhbGxlckxpbmVOdW1iZXIoY2FsbGVyTGlu
ZU51bWJlcikKLSAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHQ7IH0KLSAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsg
fQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgICAgIFN0cmluZyBtX3VybDsKLSAgICAgICAg
U3RyaW5nIG1fY2FsbGVyVVJMOwotICAgICAgICBpbnQgbV9jYWxsZXJMaW5lTnVtYmVyOwotICAg
ICAgICBTdHJpbmcgbV9yZXNwb25zZUVuY29kaW5nOyAgICAgICAgCi0gICAgICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7Ci0gICAgICAgIFN0cmluZyBtX3NjcmlwdDsK
LSAgICAgICAgYm9vbCBtX2ZhaWxlZDsKLSAgICB9OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2Ny
aXB0TG9hZGVyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWY4N2IKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcApAQCAtMCwwICsxLDEy
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JL
RVJTKQorCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCisKKyNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFdv
cmtlclNjcmlwdExvYWRlcjo6bG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKworICAg
IGlmIChjbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIENvbnRl
bnRTbmlmZiBjb250ZW50U25pZmYgPSByZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgPyBTbmlm
ZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKKyAgICAgICAgbV90aHJlYWRhYmxlTG9hZGVy
ID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMs
IHJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIGNvbnRlbnRTbmlmZiwgQWxsb3dTdG9y
ZWRDcmVkZW50aWFscyk7CisgICAgfSBlbHNlCisgICAgICAgIFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwg
KnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOworfQorICAgIAordm9pZCBXb3JrZXJTY3Jp
cHRMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyICYm
IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMCkgeworICAgICAgICBtX2ZhaWxlZCA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVz
cG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6
ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK3sKKyAgICBpZiAobV9m
YWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAg
IGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9qYXZhc2NyaXB0IiwgbV9yZXNw
b25zZUVuY29kaW5nKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4
dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2phdmFzY3JpcHQiLCAiVVRGLTgiKTsKKyAg
ICB9CisKKyAgICBpZiAoIWxlbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsZW4g
PT0gLTEpCisgICAgICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKKyAgICAKKyAgICBtX3NjcmlwdCAr
PSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pOworfQorCit2b2lkIFdvcmtlclNjcmlwdExv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAg
aWYgKG1fZmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kZWNvZGVyKQorICAg
ICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisKKyAgICBtX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOworICAgIG5vdGlmeUZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgV29ya2VyU2Ny
aXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG1fZmFpbGVk
ID0gdHJ1ZTsKKyAgICBub3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExv
YWRlcjo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQoreworICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAg
ICBub3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQor
eworICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICBub3RpZnlGaW5pc2hlZCgpOworfQorICAgIAor
dm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkKK3sKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjMyMDg4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCkBAIC0wLDAgKzEsOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtlclNjcmlwdExvYWRlcl9oCisjZGVmaW5lIFdv
cmtlclNjcmlwdExvYWRlcl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlJl
c291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKKyNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIGNsYXNzIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RmluaXNoZWQoKSB7IH0KKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIH5Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQoKSB7IH0KKyAgICB9OworCisgICAgY2xhc3Mg
V29ya2VyU2NyaXB0TG9hZGVyIDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgV29ya2VyU2NyaXB0TG9hZGVyKCkKKyAgICAgICAgICAgIDogbV9j
bGllbnQoMCkKKyAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1f
aWRlbnRpZmllcigwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBsb2Fk
ZXJDbGllbnQgaXMgcHJvdmlkZWQsIGxvYWQgdGhlIHNjcmlwdCBhc3luY2hyb25vdXNseS4gT3Ro
ZXJ3aXNlLCBsb2FkIGl0IHN5bmNocm9ub3VzbHkuCisgICAgICAgIHZvaWQgbG9hZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHVy
bCwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQpOworCisgICAgICAgIGNvbnN0IFN0
cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAgYm9vbCBm
YWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQorICAgICAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWxSZWRpcmVjdENoZWNrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBub3RpZnlGaW5pc2hlZCgpOworCisgICAgICAgIFdvcmtl
clNjcmlwdExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxl
TG9hZGVyPiBtX3RocmVhZGFibGVMb2FkZXI7CisgICAgICAgIFN0cmluZyBtX3Jlc3BvbnNlRW5j
b2Rpbmc7ICAgICAgICAKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVj
b2RlcjsKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBib29sIG1fZmFpbGVkOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKKyAgICB9OworCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoV09SS0VSUykKKyNlbmRpZgorCg==
</data>
<flag name="review"
          id="15714"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30961</attachid>
            <date>2009-06-04 14:42:28 -0700</date>
            <delta_ts>2009-06-09 18:27:56 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>26146_2</filename>
            <type>text/plain</type>
            <size>31805</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MGQ4NTNhLi45OGY1YjUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYt
MDQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNjE0NgorICAgICAgICBBZGQgYSBsYXlvdXQgdGVzdCB0byBjb3ZlciB0aGUg
c2NlbmFyaW8gdGhhdCB0aGUgd29ya2VyIHNjcmlwdCBpcyBsb2FkZWQgZnJvbSBkaWZmZXJlbnQg
cmVkaXJlY3Qgb3JpZ2luLgorCisgICAgICAgICogaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItcmVkaXJlY3QtdGFyZ2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sOiBBZGRlZC4KKwogMjAwOS0w
Ni0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTGFu
ZCBjb3JyZWN0IHJlc3VsdHMgZm9yIGEgdGVzdCBJIGp1c3QgYWRkZWQgKGZvcmdvdCB0byByZWdl
bmVyYXRlIHRoZW0gYWZ0ZXIgYWRkaW5nIG5ldwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItcmVkaXJlY3QtdGFyZ2V0LmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItcmVkaXJlY3QtdGFy
Z2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGIxMDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dv
cmtlci1yZWRpcmVjdC10YXJnZXQuanMKQEAgLTAsMCArMSBAQAorcG9zdE1lc3NhZ2UoIkZvbyIp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3dvcmtlci1yZWRp
cmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2Vy
LXJlZGlyZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wMmJhYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3Jr
ZXJzL3dvcmtlci1yZWRpcmVjdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitUZXN0IHdv
cmtlciBzY3JpcHQgVVJMIG9yaWdpbiBjaGVjayBmb3IgcmVkaXJlY3Rpb25zLgorCitTVUNDRVNT
OiB0aHJldyBlcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gbG9hZCBzY3JpcHQgcmVkaXJlY3RlZCBm
cm9tIGRpZmZlcmVudCBvcmlnaW4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
b3JrZXJzL3dvcmtlci1yZWRpcmVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY4NGM1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPGJvZHk+Cis8
cD5UZXN0IHdvcmtlciBzY3JpcHQgVVJMIG9yaWdpbiBjaGVjayBmb3IgcmVkaXJlY3Rpb25zLjwv
cD4KKzxkaXYgaWQ9cmVzdWx0PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0g
bWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2Vy
KCcvcmVzb3VyY2VzL3JlZGlyZWN0LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3dvcmtl
cnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMnKTsKK3dvcmtlci5vbmVycm9y
ID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgbG9nKCJTVUNDRVNTOiB0aHJldyBlcnJvciB3aGVuIGF0
dGVtcHRpbmcgdG8gbG9hZCBzY3JpcHQgcmVkaXJlY3RlZCBmcm9tIGRpZmZlcmVudCBvcmlnaW4i
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rp
b24oZXZ0KSB7CisgICAgbG9nKCJGQUlMOiBleGVjdXRlZCBzY3JpcHQgcmVkaXJlY3RlZCBmcm9t
IGRpZmZlcmVudCBvcmlnaW4iKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYjExOWZhNi4uNTQ1ZDdjZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAw
OS0wNi0wNCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2MTQ2CisgICAgICAgIENoYW5nZSB0byB1c2UgVGhyZWFkYWJsZUxv
YWRlciB0byBsb2FkIHRoZSB3b3JrZXIgc2NyaXB0IGluIG9yZGVyIHRvIGNoZWNrIFVSTCBvcmln
aW4gZm9yIHJlZGlyZWN0aW9uLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvd29ya2Vycy93
b3JrZXItcmVkaXJlY3QuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlcjo6V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5Rmlu
aXNoZWQpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmg6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmltcG9y
dFNjcmlwdHMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50
Lmg6IFJlbW92ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOiBS
ZW5hbWVkIGZyb20gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clNjcmlwdExvYWRlcjo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDogUmVuYW1lZCBmcm9tIHdv
cmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oLgorCiAyMDA5LTA2LTAyICBKdWxpZW4g
Q2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBhMjc0MmFjLi5hODIyMTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjE3MSw4ICsyMTcxLDggQEAKIAkJQTdEMDMxOEUwRTkzNTQwMzAwRTI0
QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0
YUN1c3RvbS5jcHAgKi87IH07CiAJCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRp
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdE
MjdGQzMwRTBBNTk5RjAwNzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgKi87IH07CiAJCUE3RDNDNTI0
MEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyog
UGFzdGVib2FyZEhlbHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3Jp
cHRzQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5o
ICovOyB9OwotCQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0
c0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5j
cHAgKi87IH07CisJCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZC
MzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLzsgfTsKKwkJQTdE
NkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0ODBGNjExMDQ1MDBC
NzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkz
QTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJl
bmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OwogCQlBODA5RjE0ODBCNzM3OTNCMDAyRTREN0Yg
LyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdH
cmFkaWVudFN0b3AuY3BwICovOyB9OwogCQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyLmggKi87IH07CkBAIC03MDQ2LDggKzcwNDYsOCBAQAogCQlBN0QwMzE4RDBFOTM1
NDAzMDBFMjRBQ0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZURhdGFDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0QyN0ZDMzBFMEE1OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVGlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0
ZWJvYXJkSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9h
cmRIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdENkIzNDcwRjYxMTA0
NTAwQjc5RkQxIC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oOyBwYXRoID0gd29y
a2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xp
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdENkIzNDcwRjYxMTA0NTAw
Qjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0
TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RDZCMzQ4MEY2MTEwNDUw
MEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0aCA9IHdvcmtlcnMvV29y
a2VyU2NyaXB0TG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYx
NDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3MSw4ICs5NzcxLDYgQEAKIAkJCQky
RTQzNDYzNzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICovLAogCQkJCTJFNDM0
NjM4MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLywKIAkJCQkyRTQzNDYz
OTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi8sCi0JCQkJQTdENkIz
NDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwICovLAot
CQkJCUE3RDZCMzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50
LmggKi8sCiAJCQkJMkU0MzQ2M0EwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmNw
cCAqLywKIAkJCQkyRTQzNDYzQjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaCAq
LywKIAkJCQkyRTQzNDYzQzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaWRsICov
LApAQCAtOTc4MSw2ICs5Nzc5LDggQEAKIAkJCQkyRTQzNDYzRjBGNTQ2QTgyMDBCMEYxQkEgLyog
V29ya2VyT2JqZWN0UHJveHkuaCAqLywKIAkJCQkyRTQzNDY0MDBGNTQ2QTgyMDBCMEYxQkEgLyog
V29ya2VyUnVuTG9vcC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDEwRjU0NkE4MjAwQjBGMUJBIC8qIFdv
cmtlclJ1bkxvb3AuaCAqLywKKwkJCQlBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyLmNwcCAqLywKKwkJCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29y
a2VyU2NyaXB0TG9hZGVyLmggKi8sCiAJCQkJMkU0MzQ2NDIwRjU0NkE4MjAwQjBGMUJBIC8qIFdv
cmtlclRocmVhZC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
clRocmVhZC5oICovLAogCQkJKTsKQEAgLTE2NjkwLDEzICsxNjY5MCwxMyBAQAogCQkJCTJFNDM0
NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0
NjQ5MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRTQzNDY0QjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2Ny
aXB0c0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NEQwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY1MDBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
MjcxQTBCMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFNDM0NjUxMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NTMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxv
b3AuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0Q2QjM0OTBGNjExMDQ1
MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQz
NDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwQjkwNTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50
c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODY5MSwxMiArMTg2OTEs
MTIgQEAKIAkJCQlCQzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NDUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlGRDEg
LyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQz
NDY0QzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkU0MzQ2NEYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck1lc3NhZ2luZ1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjcxQTE0MEVFRUM4MDQwMEY2MTIxMyAvKiBXb3JrZXJO
YXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NTIwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlclJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBNjQzRkQwRUMwOTdB
MDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRTQzNDY1NDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1RkY2QSAvKiBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0
OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDg1YmE2OTAuLjk0YmNkMTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3Bw
CkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJXb3JrZXIuaCIKIAotI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRl
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02NSwxOCArNjQsOSBAQCBXb3JrZXI6Oldv
cmtlcihjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RXhjZXB0aW9uQ29kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IE5l
c3RlZCB3b3JrZXJzIG5lZWQgbG9hZGluZyBzdXBwb3J0LiBDb25zaWRlciBhZG9wdGluZyBUaHJl
YWRhYmxlTG9hZGVyIGhlcmUuCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNEb2N1bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBtX2NhY2hlZFNjcmlwdCA9
IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVSTCwgIlVURi04
Iik7Ci0gICAgaWYgKCFtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBkaXNwYXRjaEVycm9yRXZl
bnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorICAgIG1fd29ya2VyU2NyaXB0TG9hZGVy
ID0gbmV3IFdvcmtlclNjcmlwdExvYWRlcigpOworICAgIG1fd29ya2VyU2NyaXB0TG9hZGVyLT5s
b2FkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9zY3JpcHRVUkwsIFJlcXVpcmVTYW1lUmVk
aXJlY3RPcmlnaW4sIHRoaXMpOwogICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRo
ZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0
IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwg
YXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KLSAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOwogfQogCiBXb3JrZXI6On5Xb3JrZXIoKQpAQCAtMTEyLDE3ICsxMDIsMTQgQEAgYm9vbCBX
b3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGV4dFBy
b3h5LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpOwogfQogCi12b2lkIFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqIHVudXNlZFJlc291cmNlKQordm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKIHsKLSAg
ICBBU1NFUlRfVU5VU0VEKHVudXNlZFJlc291cmNlLCB1bnVzZWRSZXNvdXJjZSA9PSBtX2NhY2hl
ZFNjcmlwdCk7Ci0KLSAgICBpZiAobV9jYWNoZWRTY3JpcHQtPmVycm9yT2NjdXJyZWQoKSkKKyAg
ICBpZiAobV93b3JrZXJTY3JpcHRMb2FkZXItPmZhaWxlZCgpKQogICAgICAgICBkaXNwYXRjaEVy
cm9yRXZlbnQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFydFdvcmtl
ckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50
KG1fc2NyaXB0VVJMKSwgbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpKTsKKyAgICAgICAgbV9jb250
ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdFVSTCwgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBtX3dvcmtlclNjcmlwdExvYWRlci0+
c2NyaXB0KCkpOwogCi0gICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAg
ICBtX2NhY2hlZFNjcmlwdCA9IDA7CisgICAgbV93b3JrZXJTY3JpcHRMb2FkZXIgPSAwOwogCiAg
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKaW5kZXggZDA1ZjlkNS4u
YWI3ZmMwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCisrKyBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaApAQCAtMzEsMjUgKzMxLDI0IEBACiAKICNpbmNsdWRlICJBdG9t
aWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci0gICAgY2xhc3MgQ2FjaGVk
U2NyaXB0OwogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgU3Ry
aW5nOwogICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eTsKIAogICAgIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3Jr
ZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50
LCBwdWJsaWMgRXZlbnRUYXJnZXQgeworICAgIGNsYXNzIFdvcmtlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgV29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgV29ya2VyKHVybCwgY29udGV4dCwgZWMpKTsgfQogICAgICAgICB+V29ya2Vy
KCk7CkBAIC04OSwxMyArODgsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6
CiAgICAgICAgIFdvcmtlcihjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKICAgICAg
ICAgS1VSTCBtX3NjcmlwdFVSTDsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
U2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICAgICAgT3duUHRyPFdvcmtlclNjcmlwdExvYWRl
cj4gbV93b3JrZXJTY3JpcHRMb2FkZXI7CiAKICAgICAgICAgV29ya2VyQ29udGV4dFByb3h5KiBt
X2NvbnRleHRQcm94eTsgLy8gVGhlIHByb3h5IG91dGxpdmVzIHRoZSB3b3JrZXIgdG8gcGVyZm9y
bSB0aHJlYWQgc2h1dGRvd24uCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAppbmRleCA5MDQ5
NTYwLi5lZWRlYjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5j
cHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCkBAIC0zOCwxNCArMzgs
MTMgQEAKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVu
dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJXb3JrZXJJbXBv
cnRTY3JpcHRzQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJXb3JrZXJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgorI2lu
Y2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgog
I2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVx
dWVzdEV4Y2VwdGlvbi5oIgpAQCAtMjc0LDIwICsyNzMsMjAgQEAgdm9pZCBXb3JrZXJDb250ZXh0
OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBjb25zdCBTdHJpbmcm
IGNhbGwKICAgICBWZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvbXBsZXRlZFVS
THMuZW5kKCk7CiAKICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
b21wbGV0ZWRVUkxzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCgqaXQpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdF
VCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwotICAg
ICAgICBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50IGNsaWVudChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksICppdCwgY2FsbGVyVVJMLCBjYWxsZXJMaW5lKTsKLSAgICAgICAgV29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSh0aGlzLCByZXF1ZXN0LCBjbGll
bnQsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIEFsbG93RGlmZmVyZW50UmVkaXJlY3RPcmlnaW4p
OwotICAgICAgICAKKyAgICAgICAgV29ya2VyU2NyaXB0TG9hZGVyIHdvcmtlclNjcmlwdExvYWRl
cjsKKyAgICAgICAgd29ya2VyU2NyaXB0TG9hZGVyLmxvYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCAqaXQsIEFsbG93RGlmZmVyZW50UmVkaXJlY3RPcmlnaW4sIDApOworCiAgICAgICAgIC8v
IElmIHRoZSBmZXRjaGluZyBhdHRlbXB0IGZhaWxlZCwgdGhyb3cgYSBORVRXT1JLX0VSUiBleGNl
cHRpb24gYW5kIGFib3J0IGFsbCB0aGVzZSBzdGVwcy4KLSAgICAgICAgaWYgKGNsaWVudC5mYWls
ZWQoKSkgeworICAgICAgICBpZiAod29ya2VyU2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CiAgICAg
ICAgICAgICBlYyA9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+c2NyaXB0SW1wb3J0ZWQod29ya2VyU2NyaXB0TG9hZGVyLmlkZW50aWZpZXIoKSwgd29y
a2VyU2NyaXB0TG9hZGVyLnNjcmlwdCgpKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5hZGRNZXNzYWdlKEluc3BlY3RvckNvbnRyb2xsZXJEZXN0aW5hdGlvbiwgSlNNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsICJXb3JrZXIgc2NyaXB0IGltcG9ydGVkOiBcIiIgKyAq
aXQgKyAiXCIuIiwgY2FsbGVyTGluZSwgY2FsbGVyVVJMKTsKKwogICAgICAgICBTY3JpcHRWYWx1
ZSBleGNlcHRpb247Ci0gICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2Rl
KGNsaWVudC5zY3JpcHQoKSwgKml0KSwgJmV4Y2VwdGlvbik7CisgICAgICAgIG1fc2NyaXB0LT5l
dmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKHdvcmtlclNjcmlwdExvYWRlci5zY3JpcHQoKSwgKml0
KSwgJmV4Y2VwdGlvbik7CiAgICAgICAgIGlmICghZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkgewog
ICAgICAgICAgICAgbV9zY3JpcHQtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlw
dHNDbGllbnQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgwNjFiLi4wMDAwMDAwCi0tLSBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJJbXBvcnRTY3JpcHRzQ2xp
ZW50LmgiCi0KLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdm9pZCBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgIT0gMiAmJiByZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpICE9IDApIHsKLSAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fcmVzcG9uc2VFbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05h
bWUoKTsKLX0KLQotdm9pZCBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQotewotICAgIGlmIChtX2ZhaWxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgaWYgKCFtX3Jlc3Bv
bnNlRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291
cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2phdmFzY3JpcHQiLCBtX3Jlc3BvbnNlRW5jb2Rpbmcp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsICJVVEYtOCIpOwotICAgIH0KLQotICAgIGlm
ICghbGVuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAgICAg
ICAgbGVuID0gc3RybGVuKGRhdGEpOwotICAgIAotICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+
ZGVjb2RlKGRhdGEsIGxlbik7Ci19Ci0KLXZvaWQgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudDo6
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKG1f
ZmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICBt
X3NjcmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7Ci0gICAgCi0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5zY3JpcHRJbXBvcnRlZChpZGVudGlmaWVyLCBtX3NjcmlwdCk7Ci0gICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdlKEluc3BlY3RvckNvbnRyb2xsZXJEZXN0
aW5hdGlvbiwgSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsICJXb3JrZXIgc2NyaXB0
IGltcG9ydGVkOiBcIiIgKyBtX3VybCArICJcIi4iLCBtX2NhbGxlckxpbmVOdW1iZXIsIG1fY2Fs
bGVyVVJMKTsKLX0KLQotdm9pZCBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBX
b3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCi17Ci0gICAg
bV9mYWlsZWQgPSB0cnVlOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikKLXsKLSAgICBtX2ZhaWxlZCA9IHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHND
bGllbnQuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMjcwNTQuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xp
ZW50X2gKLSNkZWZpbmUgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudF9oCi0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLQotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3Jp
cHRTdHJpbmcuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAi
VGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIAotICAgIGNsYXNzIFdvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci0gICAgcHVi
bGljOgotICAgICAgICBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNhbGxlclVSTCwgaW50IGNhbGxlckxpbmVOdW1iZXIpCi0gICAgICAgICAgICA6IG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICAg
ICAgLCBtX3VybCh1cmwpCi0gICAgICAgICAgICAsIG1fY2FsbGVyVVJMKGNhbGxlclVSTCkKLSAg
ICAgICAgICAgICwgbV9jYWxsZXJMaW5lTnVtYmVyKGNhbGxlckxpbmVOdW1iZXIpCi0gICAgICAg
ICAgICAsIG1fZmFpbGVkKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCBTdHJpbmcmIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0OyB9Ci0gICAgICAg
IGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGhSZWNlaXZlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWxSZWRpcmVjdENoZWNrKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotICAgICAgICBTdHJpbmcgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX2NhbGxlclVS
TDsKLSAgICAgICAgaW50IG1fY2FsbGVyTGluZU51bWJlcjsKLSAgICAgICAgU3RyaW5nIG1fcmVz
cG9uc2VFbmNvZGluZzsgICAgICAgIAotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rl
cj4gbV9kZWNvZGVyOwotICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgICAgIGJvb2wgbV9m
YWlsZWQ7Ci0gICAgfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0jZW5kaWYK
LQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jM2U0YWRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUg
IldvcmtlclNjcmlwdExvYWRlci5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVh
ZGFibGVMb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFdvcmtlclNjcmlw
dExvYWRlcjo6bG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgUmVkaXJlY3RPcmlnaW5DaGVjayByZWRpcmVjdE9yaWdp
bkNoZWNrLCBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCh1cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgcmVxdWVzdC5zZXRIVFRQT3JpZ2luKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworCisgICAgaWYgKGNsaWVudCkgeworICAgICAgICBt
X2NsaWVudCA9IGNsaWVudDsKKyAgICAgICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9IHJl
cXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSA/IFNuaWZmQ29udGVudCA6IERvTm90U25pZmZDb250
ZW50OworICAgICAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENh
bGxiYWNrcywgY29udGVudFNuaWZmLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCByZWRpcmVjdE9y
aWdpbkNoZWNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgc3lu
Y2hyb25vdXMgc2NyaXB0IGxvYWRpbmcgZm9yIGltcG9ydFNjcmlwdHMgaW4gV29ya2VyQ29udGV4
dC4KKyAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKKyAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCksIHJlcXVlc3QsICp0aGlzLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCByZWRpcmVjdE9yaWdp
bkNoZWNrKTsKKyAgICB9Cit9CisgICAgCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlm
IChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwICE9IDIgJiYgcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSAhPSAwKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2Rp
bmdOYW1lKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlRGF0YShj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQoreworICAgIGlmIChtX2ZhaWxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNl
RW5jb2RpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2phdmFzY3JpcHQiLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsICJVVEYtOCIpOworICAgIH0KKworICAgIGlmICgh
bGVuKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAg
bGVuID0gc3RybGVuKGRhdGEpOworICAgIAorICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+ZGVj
b2RlKGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9mYWlsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fc2NyaXB0ICs9
IG1fZGVjb2Rlci0+Zmx1c2goKTsKKworICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Cisg
ICAgbm90aWZ5RmluaXNoZWQoKTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbV9mYWlsZWQgPSB0cnVlOworICAgIG5v
dGlmeUZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVk
aXJlY3RDaGVjaygpCit7CisgICAgbV9mYWlsZWQgPSB0cnVlOworICAgIG5vdGlmeUZpbmlzaGVk
KCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbV9mYWlsZWQg
PSB0cnVlOworICAgIG5vdGlmeUZpbmlzaGVkKCk7Cit9CisgICAgCit2b2lkIFdvcmtlclNjcmlw
dExvYWRlcjo6bm90aWZ5RmluaXNoZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPm5vdGlmeUZpbmlzaGVkKCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRmYzM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisK
KyNpZm5kZWYgV29ya2VyU2NyaXB0TG9hZGVyX2gKKyNkZWZpbmUgV29ya2VyU2NyaXB0TG9hZGVy
X2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJs
ZUxvYWRlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OworCisgICAgY2xhc3MgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpIHsg
fQorICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfldvcmtlclNjcmlw
dExvYWRlckNsaWVudCgpIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBXb3JrZXJTY3JpcHRMb2Fk
ZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICBXb3JrZXJTY3JpcHRMb2FkZXIoKQorICAgICAgICAgICAgOiBtX2NsaWVudCgwKQorICAgICAg
ICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9pZGVudGlmaWVyKDApCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGxvYWRlckNsaWVudCBpcyBwcm92
aWRlZCwgbG9hZCB0aGUgc2NyaXB0IGFzeW5jaHJvbm91c2x5LiBPdGhlcndpc2UsIGxvYWQgaXQg
c3luY2hyb25vdXNseS4KKyAgICAgICAgdm9pZCBsb2FkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWRpcmVjdE9yaWdp
bkNoZWNrIHJlZGlyZWN0T3JpZ2luQ2hlY2ssIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogY2xp
ZW50KTsKKworICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NyaXB0OyB9CisgICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7
IH0KKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVudGlmaWVyOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoKTsKKworICAgICAgICBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqIG1fY2xpZW50Owor
ICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV90aHJlYWRhYmxlTG9hZGVyOworICAg
ICAgICBTdHJpbmcgbV9yZXNwb25zZUVuY29kaW5nOyAgICAgICAgCisgICAgICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgICAgIFN0cmluZyBtX3NjcmlwdDsK
KyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZp
ZXI7CisgICAgfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisjZW5kaWYKKwo=
</data>
<flag name="review"
          id="15743"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31122</attachid>
            <date>2009-06-09 18:27:56 -0700</date>
            <delta_ts>2009-06-15 17:37:37 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>26146_3</filename>
            <type>text/plain</type>
            <size>32413</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2Y2NkM2U4Li4wZDM4NWY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMDktMDYt
MDkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjE0NjogQ2hhbmdlIHRvIHVzZSBUaHJl
YWRhYmxlTG9hZGVyIHRvIGxvYWQgdGhlIHdvcmtlciBzY3JpcHQKKyAgICAgICAgaW4gb3JkZXIg
dG8gY2hlY2sgVVJMIG9yaWdpbiBmb3IgcmVkaXJlY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjE0NgorCisgICAgICAgIEFkZCBhIGxheW91
dCB0ZXN0IHRvIGNvdmVyIHRoZSBzY2VuYXJpbyB0aGF0IHRoZSB3b3JrZXIgc2NyaXB0IGlzCisg
ICAgICAgIGxvYWRlZCBmcm9tIGRpZmZlcmVudCByZWRpcmVjdCBvcmlnaW4uCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanM6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJl
ZGlyZWN0Lmh0bWw6IEFkZGVkLgorCisyMDA5LTA2LTA5ICBKaWFuIExpICA8amlhbmxpQGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KIAogICAgICAgICBC
dWcgMjYxOTY6IEZpeCB0aGUgcHJvYmxlbSB0aGF0IHdvcmtlcidzIGltcG9ydFNjcmlwdHMgZmFp
bHMgaWYgdGhlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVz
b3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYjEwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXJlZGlyZWN0LXRhcmdl
dC5qcwpAQCAtMCwwICsxIEBACitwb3N0TWVzc2FnZSgiRm9vIik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYmFiOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3Qgd29ya2VyIHNjcmlwdCBVUkwgb3Jp
Z2luIGNoZWNrIGZvciByZWRpcmVjdGlvbnMuCisKK1NVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4g
YXR0ZW1wdGluZyB0byBsb2FkIHNjcmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdp
bgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJl
ZGlyZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGly
ZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0YzViNAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVk
aXJlY3QuaHRtbApAQCAtMCwwICsxLDI4IEBACis8Ym9keT4KKzxwPlRlc3Qgd29ya2VyIHNjcmlw
dCBVUkwgb3JpZ2luIGNoZWNrIGZvciByZWRpcmVjdGlvbnMuPC9wPgorPGRpdiBpZD1yZXN1bHQ+
PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJy9yZXNvdXJjZXMvcmVkaXJl
Y3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2Vy
LXJlZGlyZWN0LXRhcmdldC5qcycpOword29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQpIHsK
KyAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBsb2FkIHNj
cmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2co
IkZBSUw6IGV4ZWN1dGVkIHNjcmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIp
OworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3YzEwMmZmLi5lMWM1MjNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDA5LTA2LTA5ICBKaWFuIExpICA8
amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBCdWcgMjYxNDY6IENoYW5nZSB0byB1c2UgVGhyZWFkYWJsZUxvYWRlciB0
byBsb2FkIHRoZSB3b3JrZXIgc2NyaXB0CisgICAgICAgIGluIG9yZGVyIHRvIGNoZWNrIFVSTCBv
cmlnaW4gZm9yIHJlZGlyZWN0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjYxNDYKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3dvcmtlcnMv
d29ya2VyLXJlZGlyZWN0Lmh0bWwKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXI6Oldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Om5vdGlmeUZp
bmlzaGVkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjppbXBv
cnRTY3JpcHRzKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVu
dC5oOiBSZW1vdmVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDog
UmVuYW1lZCBmcm9tIHdvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
OiBSZW5hbWVkIGZyb20gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmguCisKIDIw
MDktMDYtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjN2IyN2VlLi42MGFjZjM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE3Miw4ICsyMTcyLDggQEAKIAkJQTdEMDMxOEUw
RTkzNTQwMzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAv
KiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAgKi87IH07CiAJCUE3RDI3RkM0MEUwQTU5OUYwMDc5QUQy
QiAvKiBTVkdGRVRpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdEMjdGQzMwRTBBNTk5RjAwNzlBRDJCIC8qIFNWR0ZFVGlsZS5jcHAgKi87IH07
CiAJCUE3RDNDNTI0MEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QzQzUyMzBCNTc2QjRC
MDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3Jr
ZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2Ny
aXB0c0NsaWVudC5oICovOyB9OwotCQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2Vy
SW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2Ny
aXB0c0NsaWVudC5jcHAgKi87IH07CisJCUE3RDZCMzQ5MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3Jr
ZXJTY3JpcHRMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3RDZCMzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAq
LzsgfTsKKwkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0
ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLzsgfTsKIAkJQTgw
OUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAw
MkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OwogCQlBODA5RjE0ODBCNzM3
OTNCMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAv
KiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovOyB9OwogCQlBODA5RjFBQTBCNzM3RkI2MDAy
RTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CkBAIC03MDQ4LDggKzcwNDgsOCBAQAogCQlB
N0QwMzE4RDBFOTM1NDAzMDBFMjRBQ0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZURhdGFDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0QyN0ZDMzBFMEE1OTlGMDA3OUFEMkIgLyogU1ZH
RkVUaWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZFVGls
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJD
QTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhc3RlYm9hcmRIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdE
NkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5o
OyBwYXRoID0gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBv
cnRTY3JpcHRzQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJJbXBv
cnRTY3JpcHRzQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdENkIz
NDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RDZC
MzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0aCA9
IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3Au
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdG
IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3NCw4ICs5Nzc0
LDYgQEAKIAkJCQkyRTQzNDYzNzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dC5oICov
LAogCQkJCTJFNDM0NjM4MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmlkbCAqLywK
IAkJCQkyRTQzNDYzOTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFByb3h5LmggKi8s
Ci0JCQkJQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9ydFNjcmlwdHNDbGll
bnQuY3BwICovLAotCQkJCUE3RDZCMzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJbXBvcnRT
Y3JpcHRzQ2xpZW50LmggKi8sCiAJCQkJMkU0MzQ2M0EwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtl
ckxvY2F0aW9uLmNwcCAqLywKIAkJCQkyRTQzNDYzQjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
TG9jYXRpb24uaCAqLywKIAkJCQkyRTQzNDYzQzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9j
YXRpb24uaWRsICovLApAQCAtOTc4NCw2ICs5NzgyLDggQEAKIAkJCQkyRTQzNDYzRjBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyT2JqZWN0UHJveHkuaCAqLywKIAkJCQkyRTQzNDY0MDBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDEwRjU0NkE4MjAw
QjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCAqLywKKwkJCQlBN0Q2QjM0ODBGNjExMDQ1MDBCNzlG
RDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLywKKwkJCQlBN0Q2QjM0NzBGNjExMDQ1MDBC
NzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggKi8sCiAJCQkJMkU0MzQ2NDIwRjU0NkE4MjAw
QjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBG
MUJBIC8qIFdvcmtlclRocmVhZC5oICovLAogCQkJKTsKQEAgLTE2NjkyLDEzICsxNjY5MiwxMyBA
QAogCQkJCTJFNDM0NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFNDM0NjQ5MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTQzNDY0QjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyQ29udGV4dFBy
b3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29y
a2VySW1wb3J0U2NyaXB0c0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NEQwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQz
NDY1MDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxMjcxQTBCMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTJFNDM0NjUxMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJPYmpl
Y3RQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NTMwRjU0NkE4MjAwQjBGMUJBIC8q
IFdvcmtlclJ1bkxvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3
OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0Q2
QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwQjkwNTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJs
ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8q
IFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODY5
NCwxMiArMTg2OTQsMTIgQEAKIAkJCQlCQzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NDUwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYx
QkEgLyogV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0Q2QjM0QTBGNjEx
MDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyRTQzNDY0QzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NEYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMjcxQTE0MEVFRUM4MDQwMEY2MTIx
MyAvKiBXb3JrZXJOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU0MzQ2NTIwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFB
NjQzRkQwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExv
YWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY1NDBGNTQ2QTgyMDBCMEYxQkEgLyog
V29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1
RkY2QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDg1YmE2OTAuLjVkOGExNmMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJXb3JrZXIuaCIKIAot
I2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02NSwxOCArNjQsOSBA
QCBXb3JrZXI6Oldvcmtlcihjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IE5lc3RlZCB3b3JrZXJzIG5lZWQgbG9hZGluZyBzdXBwb3J0LiBDb25zaWRlciBh
ZG9wdGluZyBUaHJlYWRhYmxlTG9hZGVyIGhlcmUuCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBtX2Nh
Y2hlZFNjcmlwdCA9IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3Njcmlw
dFVSTCwgIlVURi04Iik7Ci0gICAgaWYgKCFtX2NhY2hlZFNjcmlwdCkgewotICAgICAgICBkaXNw
YXRjaEVycm9yRXZlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorICAgIG1fd29ya2Vy
U2NyaXB0TG9hZGVyID0gbmV3IFdvcmtlclNjcmlwdExvYWRlcigpOworICAgIG1fd29ya2VyU2Ny
aXB0TG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBt
X3NjcmlwdFVSTCwgUmVxdWlyZVNhbWVSZWRpcmVjdE9yaWdpbiwgdGhpcyk7CiAgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOyAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90IGV4aXN0
IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBvYmplY3Qg
aXMgbm90IGNvbGxlY3RlZCwgYXMgd2VsbCBhcyBpdHMgZXZlbnQgbGlzdGVuZXJzLgotICAgIG1f
Y2FjaGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiB9CiAKIFdvcmtlcjo6fldvcmtlcigpCkBA
IC0xMTIsMTcgKzEwMiwxNCBAQCBib29sIFdvcmtlcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKICAgICByZXR1cm4gbV9jb250ZXh0UHJveHktPmhhc1BlbmRpbmdBY3Rpdml0eSgpIHx8IEFj
dGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKLXZvaWQgV29ya2VyOjpu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogdW51c2VkUmVzb3VyY2UpCit2b2lkIFdvcmtl
cjo6bm90aWZ5RmluaXNoZWQoKQogewotICAgIEFTU0VSVF9VTlVTRUQodW51c2VkUmVzb3VyY2Us
IHVudXNlZFJlc291cmNlID09IG1fY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChtX2NhY2hlZFNj
cmlwdC0+ZXJyb3JPY2N1cnJlZCgpKQorICAgIGlmIChtX3dvcmtlclNjcmlwdExvYWRlci0+ZmFp
bGVkKCkpCiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAgIGVsc2UKLSAgICAgICAg
bV9jb250ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdFVSTCwgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRVUkwpLCBtX2NhY2hlZFNjcmlwdC0+
c2NyaXB0KCkpOworICAgICAgICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0KG1f
c2NyaXB0VVJMLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdFVS
TCksIG1fd29ya2VyU2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKLSAgICBtX2NhY2hlZFNjcmlw
dC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0ID0gMDsKKyAgICBtX3dv
cmtlclNjcmlwdExvYWRlciA9IDA7CiAKICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaAppbmRleCBkMDVmOWQ1Li5hYjdmYzBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0zMSwyNSAr
MzEsMjQgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIldv
cmtlclNjcmlwdExvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDYWNoZWRS
ZXNvdXJjZTsKLSAgICBjbGFzcyBDYWNoZWRTY3JpcHQ7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgV29ya2VyQ29udGV4dFBy
b3h5OwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNzIFdvcmtl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHBy
aXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgY2xh
c3MgV29ya2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyPiwgcHVibGljIEFjdGl2ZURPTU9i
amVjdCwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdl
dCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXI+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXIodXJsLCBjb250ZXh0
LCBlYykpOyB9CiAgICAgICAgIH5Xb3JrZXIoKTsKQEAgLTg5LDEzICs4OCwxMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgV29ya2VyKGNvbnN0IFN0cmluZyYs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KIAogICAgICAgICBLVVJMIG1fc2NyaXB0VVJMOwotICAgICAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OworICAgICAg
ICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3dvcmtlclNjcmlwdExvYWRlcjsKIAogICAg
ICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0
bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuY3BwCmluZGV4IDBiODc3OGEuLmU4YjRjZTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAKQEAgLTM4LDE0ICszOCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VD
b2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgotI2luY2x1ZGUgIldvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaCIKICNpbmNsdWRlICJX
b3JrZXJMb2NhdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgogI2luY2x1ZGUg
Ildvcmtlck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCiAj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkYWJsZUxvYWRl
ci5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCkBAIC0yNzQsMjAgKzI3
MywyMCBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHVybHMsIGNvbnN0IFN0cmluZyYgY2FsbAogICAgIFZlY3RvcjxLVVJMPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY29tcGxldGVkVVJMcy5lbmQoKTsKIAogICAgIGZvciAoVmVjdG9yPEtV
Ukw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvbXBsZXRlZFVSTHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KCppdCk7Ci0gICAgICAg
IHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE9y
aWdpbihzZWN1cml0eU9yaWdpbik7Ci0gICAgICAgIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQg
Y2xpZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKml0LCBjYWxsZXJVUkwsIGNhbGxlckxp
bmUpOwotICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHRoaXMsIHJlcXVlc3QsIGNsaWVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgQWxs
b3dEaWZmZXJlbnRSZWRpcmVjdE9yaWdpbik7Ci0gICAgICAgIAorICAgICAgICBXb3JrZXJTY3Jp
cHRMb2FkZXIgd29ya2VyU2NyaXB0TG9hZGVyOworICAgICAgICB3b3JrZXJTY3JpcHRMb2FkZXIu
bG9hZFN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaXQsIEFsbG93RGlm
ZmVyZW50UmVkaXJlY3RPcmlnaW4pOworCiAgICAgICAgIC8vIElmIHRoZSBmZXRjaGluZyBhdHRl
bXB0IGZhaWxlZCwgdGhyb3cgYSBORVRXT1JLX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IGFsbCB0
aGVzZSBzdGVwcy4KLSAgICAgICAgaWYgKGNsaWVudC5mYWlsZWQoKSkgeworICAgICAgICBpZiAo
d29ya2VyU2NyaXB0TG9hZGVyLmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBlYyA9IFhNTEh0dHBS
ZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2NyaXB0SW1wb3J0ZWQo
d29ya2VyU2NyaXB0TG9hZGVyLmlkZW50aWZpZXIoKSwgd29ya2VyU2NyaXB0TG9hZGVyLnNjcmlw
dCgpKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRNZXNzYWdlKEluc3Bl
Y3RvckNvbnRyb2xsZXJEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2
ZWwsICJXb3JrZXIgc2NyaXB0IGltcG9ydGVkOiBcIiIgKyAqaXQgKyAiXCIuIiwgY2FsbGVyTGlu
ZSwgY2FsbGVyVVJMKTsKKwogICAgICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgICAg
IG1fc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKGNsaWVudC5zY3JpcHQoKSwgKml0
KSwgJmV4Y2VwdGlvbik7CisgICAgICAgIG1fc2NyaXB0LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VD
b2RlKHdvcmtlclNjcmlwdExvYWRlci5zY3JpcHQoKSwgKml0KSwgJmV4Y2VwdGlvbik7CiAgICAg
ICAgIGlmICghZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkgewogICAgICAgICAgICAgbV9zY3JpcHQt
PnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwIGIvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3YjgwNjFiLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMp
Ci0KLSNpbmNsdWRlICJXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmgiCi0KLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBX
b3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgLyAxMDAgIT0gMiAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDApIHsKLSAgICAg
ICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVzcG9u
c2VFbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKLX0KLQotdm9pZCBXb3Jr
ZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuKQotewotICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX2RlY29kZXIpIHsKLSAgICAgICAgaWYgKCFtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0
ZXh0L2phdmFzY3JpcHQiLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvamF2
YXNjcmlwdCIsICJVVEYtOCIpOwotICAgIH0KLQotICAgIGlmICghbGVuKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAgICAgICAgbGVuID0gc3RybGVuKGRhdGEp
OwotICAgIAotICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbik7Ci19
Ci0KLXZvaWQgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKG1fZmFpbGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXIt
PmZsdXNoKCk7Ci0gICAgCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zY3JpcHRJbXBv
cnRlZChpZGVudGlmaWVyLCBtX3NjcmlwdCk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5hZGRNZXNzYWdlKEluc3BlY3RvckNvbnRyb2xsZXJEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlTGV2ZWwsICJXb3JrZXIgc2NyaXB0IGltcG9ydGVkOiBcIiIgKyBtX3Vy
bCArICJcIi4iLCBtX2NhbGxlckxpbmVOdW1iZXIsIG1fY2FsbGVyVVJMKTsKLX0KLQotdm9pZCBX
b3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQot
ewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xp
ZW50OjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCi17Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotfQot
Ci12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICBtX2ZhaWxlZCA9
IHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaCBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVjMjcwNTQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0g
Ki8KLQotI2lmbmRlZiBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50X2gKLSNkZWZpbmUgV29ya2Vy
SW1wb3J0U2NyaXB0c0NsaWVudF9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKLSNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVu
dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotICAgIAotICAgIGNsYXNzIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQgOiBwdWJs
aWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBXb3JrZXJJ
bXBvcnRTY3JpcHRzQ2xpZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNhbGxlclVSTCwgaW50
IGNhbGxlckxpbmVOdW1iZXIpCi0gICAgICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICAgICAgICAgLCBtX3VybCh1cmwpCi0gICAg
ICAgICAgICAsIG1fY2FsbGVyVVJMKGNhbGxlclVSTCkKLSAgICAgICAgICAgICwgbV9jYWxsZXJM
aW5lTnVtYmVyKGNhbGxlckxpbmVOdW1iZXIpCi0gICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNl
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0OyB9Ci0gICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9mYWlsZWQ7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZl
ZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24o
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgICAgICBTdHJp
bmcgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX2NhbGxlclVSTDsKLSAgICAgICAgaW50IG1fY2Fs
bGVyTGluZU51bWJlcjsKLSAgICAgICAgU3RyaW5nIG1fcmVzcG9uc2VFbmNvZGluZzsgICAgICAg
IAotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgICAg
ICBTdHJpbmcgbV9zY3JpcHQ7Ci0gICAgICAgIGJvb2wgbV9mYWlsZWQ7Ci0gICAgfTsKLQotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
U2NyaXB0TG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGYz
YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRl
ci5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5o
IgorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV29y
a2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVMb2FkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXJTY3JpcHRMb2FkZXI6OldvcmtlclNjcmlwdExvYWRl
cigpCisgICAgOiBtX2NsaWVudCgwKQorICAgICwgbV9mYWlsZWQoZmFsc2UpCisgICAgLCBtX2lk
ZW50aWZpZXIoMCkKK3sKK30KKwordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJv
bm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IFN0cmluZyYgdXJsLCBSZWRpcmVjdE9yaWdpbkNoZWNrIHJlZGlyZWN0T3JpZ2luQ2hlY2sp
Cit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICByZXF1ZXN0LnNldEhU
VFBNZXRob2QoIkdFVCIpOworICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKworICAgIC8vIFdlIG9u
bHkgc3VwcG9ydCBzeW5jaHJvbm91cyBzY3JpcHQgbG9hZGluZyBmb3IgaW1wb3J0U2NyaXB0cyBp
biBXb3JrZXJDb250ZXh0LgorICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSk7CisgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCksIHJlcXVlc3QsICp0aGlzLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCByZWRpcmVj
dE9yaWdpbkNoZWNrKTsKK30KKyAgICAKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5
bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY29uc3QgU3RyaW5nJiB1cmwsIFJlZGlyZWN0T3JpZ2luQ2hlY2sgcmVkaXJlY3RPcmlnaW5D
aGVjaywgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKGNs
aWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCh1cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgcmVxdWVz
dC5zZXRIVFRQT3JpZ2luKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCkpOworCisgICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9IHJlcXVlc3Qu
dXJsKCkuaXNMb2NhbEZpbGUoKSA/IFNuaWZmQ29udGVudCA6IERvTm90U25pZmZDb250ZW50Owor
ICAgIG1fdGhyZWFkYWJsZUxvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCB0aGlzLCByZXF1ZXN0LCBEb05vdFNlbmRMb2FkQ2FsbGJhY2tzLCBj
b250ZW50U25pZmYsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIHJlZGlyZWN0T3JpZ2luQ2hlY2sp
OworfQorICAgIAordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAocmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0g
MCkgeworICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpOworfQor
Cit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbikKK3sKKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgidGV4dC9qYXZhc2NyaXB0IiwgbV9yZXNwb25zZUVuY29kaW5nKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0
L2phdmFzY3JpcHQiLCAiVVRGLTgiKTsKKyAgICB9CisKKyAgICBpZiAoIWxlbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChsZW4gPT0gLTEpCisgICAgICAgIGxlbiA9IHN0cmxlbihk
YXRhKTsKKyAgICAKKyAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4p
OworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fZmFpbGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmZs
dXNoKCk7CisKKyAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIG5vdGlmeUZpbmlz
aGVkKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImKQoreworICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICBub3RpZnlGaW5pc2hlZCgp
OworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQor
eworICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICBub3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lk
IFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9u
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQoreworICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICBu
b3RpZnlGaW5pc2hlZCgpOworfQorICAgIAordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlm
eUZpbmlzaGVkKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlGaW5pc2hlZCgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBiL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mYjM2YTNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNj
cmlwdExvYWRlci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtl
clNjcmlwdExvYWRlcl9oCisjZGVmaW5lIFdvcmtlclNjcmlwdExvYWRlcl9oCisKKyNpZiBFTkFC
TEUoV09SS0VSUykKKworI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKKworICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKSB7IH0KKyAgICAgICAgCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQo
KSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgV29ya2VyU2NyaXB0TG9hZGVyIDogcHVibGljIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgV29ya2VyU2NyaXB0
TG9hZGVyKCk7CisKKyAgICAgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgUmVk
aXJlY3RPcmlnaW5DaGVjayByZWRpcmVjdE9yaWdpbkNoZWNrKTsKKyAgICAgICAgdm9pZCBsb2Fk
QXN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFJlZGlyZWN0T3JpZ2luQ2hlY2sgcmVkaXJlY3RPcmln
aW5DaGVjaywgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQpOworCisgICAgICAgIGNv
bnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAg
Ym9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQorICAgICAgICB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBub3RpZnlGaW5pc2hlZCgpOworCisgICAgICAg
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIFJlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyPiBtX3RocmVhZGFibGVMb2FkZXI7CisgICAgICAgIFN0cmluZyBtX3Jlc3Bv
bnNlRW5jb2Rpbmc7ICAgICAgICAKKyAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+
IG1fZGVjb2RlcjsKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBib29sIG1fZmFp
bGVkOworICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKKyAgICB9OworCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKyNlbmRpZgorCg==
</data>
<flag name="review"
          id="15859"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31321</attachid>
            <date>2009-06-15 17:37:37 -0700</date>
            <delta_ts>2009-06-15 18:01:09 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>26146_4</filename>
            <type>text/plain</type>
            <size>38296</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2Y2NkM2U4Li4wZDM4NWY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMDktMDYt
MDkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjE0NjogQ2hhbmdlIHRvIHVzZSBUaHJl
YWRhYmxlTG9hZGVyIHRvIGxvYWQgdGhlIHdvcmtlciBzY3JpcHQKKyAgICAgICAgaW4gb3JkZXIg
dG8gY2hlY2sgVVJMIG9yaWdpbiBmb3IgcmVkaXJlY3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjE0NgorCisgICAgICAgIEFkZCBhIGxheW91
dCB0ZXN0IHRvIGNvdmVyIHRoZSBzY2VuYXJpbyB0aGF0IHRoZSB3b3JrZXIgc2NyaXB0IGlzCisg
ICAgICAgIGxvYWRlZCBmcm9tIGRpZmZlcmVudCByZWRpcmVjdCBvcmlnaW4uCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanM6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJl
ZGlyZWN0Lmh0bWw6IEFkZGVkLgorCisyMDA5LTA2LTA5ICBKaWFuIExpICA8amlhbmxpQGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KIAogICAgICAgICBC
dWcgMjYxOTY6IEZpeCB0aGUgcHJvYmxlbSB0aGF0IHdvcmtlcidzIGltcG9ydFNjcmlwdHMgZmFp
bHMgaWYgdGhlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvcmVz
b3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWRpcmVjdC10YXJnZXQuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYjEwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXJlZGlyZWN0LXRhcmdl
dC5qcwpAQCAtMCwwICsxIEBACitwb3N0TWVzc2FnZSgiRm9vIik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVkaXJlY3QtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYmFiOTkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGlyZWN0
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3Qgd29ya2VyIHNjcmlwdCBVUkwgb3Jp
Z2luIGNoZWNrIGZvciByZWRpcmVjdGlvbnMuCisKK1NVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4g
YXR0ZW1wdGluZyB0byBsb2FkIHNjcmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdp
bgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJl
ZGlyZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvd29ya2VyLXJlZGly
ZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0YzViNAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy93b3JrZXItcmVk
aXJlY3QuaHRtbApAQCAtMCwwICsxLDI4IEBACis8Ym9keT4KKzxwPlRlc3Qgd29ya2VyIHNjcmlw
dCBVUkwgb3JpZ2luIGNoZWNrIGZvciByZWRpcmVjdGlvbnMuPC9wPgorPGRpdiBpZD1yZXN1bHQ+
PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOwor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJy9yZXNvdXJjZXMvcmVkaXJl
Y3QucGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAvd29ya2Vycy9yZXNvdXJjZXMvd29ya2Vy
LXJlZGlyZWN0LXRhcmdldC5qcycpOword29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldnQpIHsK
KyAgICBsb2coIlNVQ0NFU1M6IHRocmV3IGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBsb2FkIHNj
cmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICBsb2co
IkZBSUw6IGV4ZWN1dGVkIHNjcmlwdCByZWRpcmVjdGVkIGZyb20gZGlmZmVyZW50IG9yaWdpbiIp
OworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3YzEwMmZmLi42ZWRiMmNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDA5LTA2LTA5ICBKaWFuIExpICA8
amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBCdWcgMjYxNDY6IENoYW5nZSB0byB1c2UgVGhyZWFkYWJsZUxvYWRlciB0
byBsb2FkIHRoZSB3b3JrZXIgc2NyaXB0CisgICAgICAgIGluIG9yZGVyIHRvIGNoZWNrIFVSTCBv
cmlnaW4gZm9yIHJlZGlyZWN0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjYxNDYKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL3dvcmtlcnMv
d29ya2VyLXJlZGlyZWN0Lmh0bWwKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXI6Oldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6Om5vdGlmeUZpbmlzaGVk
KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjppbXBvcnRTY3Jp
cHRzKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDogUmVuYW1l
ZCBmcm9tIHdvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHAuCisgICAgICAgICAg
VGhpcyB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBzbyBvdGhlciBjb3VsZCB1c2UgaXQuCisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZhaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
OiBSZW5hbWVkIGZyb20gd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50LmguCisgICAg
ICAgICAgVGhpcyB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBzbyBvdGhlciBjb3VsZCB1c2UgaXQu
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDogQWRkZWQuCisK
IDIwMDktMDYtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMTUxYzAxYS4uZmQ3ZjM3MCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0yMjc5LDEwICsyMjc5LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5LmggXAogCVdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBcCisJV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAgXAorCVdlYkNvcmUvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuaCBcCisJV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oIFwKIAlXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBcCi0JV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKLQlXZWJDb3JlL3dvcmtlcnMvV29ya2VySW1wb3J0
U2NyaXB0c0NsaWVudC5jcHAgXAotCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJJbXBvcnRTY3JpcHRz
Q2xpZW50LmgKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKIGVuZGlmCiAKICMgLS0t
LQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
aW5kZXggZjk4ZjE4Ni4uYWViZjI2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMzk3LDcgKzEzOTcsOCBAQCBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfV09SS0VSUz0xKSB7CiAgICAgICAgIHdvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwIFwKICAgICAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcCBcCiAgICAg
ICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBcCi0gICAgICAgIHdvcmtlcnMvV29ya2VySW1w
b3J0U2NyaXB0c0NsaWVudC5jcHAKKyAgICAgICAgd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIu
Y3BwIFwKKyAgICAgICAgd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuY3BwCiB9CiAK
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM3YjI3ZWUuLmFjNDFmOTIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NzAsNiArNTcwLDcgQEAKIAkJ
MkU0MzQ2NTUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJB
IC8qIFdvcmtlclRocmVhZC5oICovOyB9OwogCQkyRTQzNDY1ODBGNTQ2QTk5MDBCMEYxQkEgLyog
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU0MzQ2NTYwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVy
LmNwcCAqLzsgfTsKIAkJMkU0MzQ2NTkwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29w
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQz
NDY1NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLzsgfTsKKwkJMkVB
NzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2
NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkzMTI4OEU3
MjBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTZFMEUzMDA1RDYwMDM2
MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9OwogCQkzMTI4OEU3MzBFMzAw
NUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CiAJCTMxMjg4RTc0MEUzMDA1RDYwMDM2MTlB
RSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjg4RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmNwcCAqLzsgfTsKQEAgLTIxNzIsOCArMjE3Myw4IEBACiAJCUE3RDAz
MThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0QwMzE4RDBFOTM1NDAzMDBFMjRB
Q0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwICovOyB9OwogCQlBN0QyN0ZDNDBFMEE1OTlGMDA3
OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RDI3RkMzMEUwQTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwICov
OyB9OwogCQlBN0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1MjMwQjU3
NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyog
V29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQuaCAqLzsgfTsKLQkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdv
cmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQuY3BwICovOyB9OworCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyog
V29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVy
LmggKi87IH07CisJCUE3RDZCMzRBMEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2Fk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdE
NkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi87IH07CiAJ
CUE4MDlGMTQ3MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMTQ1MEI3Mzc5
M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLzsgfTsKIAkJQTgwOUYxNDgw
QjczNzkzQjAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0NjBCNzM3OTNBMDAyRTRE
N0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLzsgfTsKIAkJQTgwOUYxQUEwQjczN0ZC
NjAwMkU0RDdGIC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxQTgwQjczN0ZCNjAwMkU0RDdGIC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwpAQCAtNTQ1NSw2ICs1NDU2LDcgQEAK
IAkJMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJUaHJlYWQuaDsgcGF0aCA9IHdvcmtlcnMvV29y
a2VyVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFNDM0NjU2MEY1NDZB
OTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEg
LyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyODhF
NkUwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTI4OEU2RjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTI4OEU3MDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcwNDgsOCArNzA1MCw4IEBACiAJ
CUE3RDAzMThEMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0ltYWdlRGF0YUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlRGF0YUN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDI3RkMzMEUwQTU5OUYwMDc5QUQyQiAvKiBT
VkdGRVRpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRkVU
aWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEM0M1MjMwQjU3NkI0QjAw
MkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
N0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50
Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlcklt
cG9ydFNjcmlwdHNDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5jcHA7IHBhdGggPSB3b3JrZXJzL1dvcmtlcklt
cG9ydFNjcmlwdHNDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0Q2
QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlci5oOyBwYXRoID0gd29ya2Vy
cy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdE
NkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBwYXRo
ID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODA5RjE0NTBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3Rv
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjE0NjBCNzM3OTNBMDAyRTRE
N0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4MDlGMUE4MEI3MzdGQjYwMDJFNEQ3RiAvKiBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Nzc0LDggKzk3
NzYsNiBAQAogCQkJCTJFNDM0NjM3MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0Lmgg
Ki8sCiAJCQkJMkU0MzQ2MzgwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckNvbnRleHQuaWRsICov
LAogCQkJCTJFNDM0NjM5MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0UHJveHkuaCAq
LywKLQkJCQlBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0Ns
aWVudC5jcHAgKi8sCi0JCQkJQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlckltcG9y
dFNjcmlwdHNDbGllbnQuaCAqLywKIAkJCQkyRTQzNDYzQTBGNTQ2QTgyMDBCMEYxQkEgLyogV29y
a2VyTG9jYXRpb24uY3BwICovLAogCQkJCTJFNDM0NjNCMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJMb2NhdGlvbi5oICovLAogCQkJCTJFNDM0NjNDMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJM
b2NhdGlvbi5pZGwgKi8sCkBAIC05Nzg0LDYgKzk3ODQsOSBAQAogCQkJCTJFNDM0NjNGMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJPYmplY3RQcm94eS5oICovLAogCQkJCTJFNDM0NjQwMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJSdW5Mb29wLmNwcCAqLywKIAkJCQkyRTQzNDY0MTBGNTQ2QTgy
MDBCMEYxQkEgLyogV29ya2VyUnVuTG9vcC5oICovLAorCQkJCUE3RDZCMzQ4MEY2MTEwNDUwMEI3
OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovLAorCQkJCUE3RDZCMzQ3MEY2MTEwNDUw
MEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLywKKwkJCQkyRUE3NjgwMzBGRTcxMjY0
MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8sCiAJCQkJMkU0MzQ2NDIw
RjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgKi8sCiAJCQkJMkU0MzQ2NDMwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICovLAogCQkJKTsKQEAgLTE2NjkyLDEzICsx
NjY5NSwxMyBAQAogCQkJCTJFNDM0NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJFNDM0NjQ5MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY0QjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
Q29udGV4dFByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlG
RDEgLyogV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0
MzQ2NEQwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRTQzNDY1MDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxMjcxQTBCMEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZp
Z2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0NjUxMEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXJPYmplY3RQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NTMwRjU0NkE4MjAw
QjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVD
MDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFk
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQjkwNTZGOTBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2Vy
VGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAw
NTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xNjc5Miw2ICsxNjc5NSw3IEBACiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8q
IFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE4RjgzMUI4MEZENDhDNzgw
MEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5Q0ND
NTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkyRUE3NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9h
ZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4Njk0LDEyICsxODY5OCwxMiBAQAogCQkJ
CUJDODI0M0U4MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRTQzNDY0NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJFNDM0NjQ4MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3RDZCMzRBMEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJJ
bXBvcnRTY3JpcHRzQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFNDM0NjRDMEY1NDZB
ODIwMEIwRjFCQSAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQz
NDY0RjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTEyNzFBMTQwRUVFQzgwNDAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY1MjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2Vy
UnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUE2NDNGRDBFQzA5N0EwMDA3Nzk2Njgg
LyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0Q2QjM0
QTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTJFNDM0NjU0MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEI5MDU2RjgwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFi
bGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMjMwOTlFNjQ5MjAwNTZFNTgx
IC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5jcHAKaW5kZXggODViYTY5MC4uMDQzNDk3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTMxLDcg
KzMxLDYgQEAKIAogI2luY2x1ZGUgIldvcmtlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTY1LDE4ICs2NCw5IEBAIFdvcmtlcjo6V29ya2VyKGNvbnN0
IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogTmVzdGVkIHdvcmtl
cnMgbmVlZCBsb2FkaW5nIHN1cHBvcnQuIENvbnNpZGVyIGFkb3B0aW5nIFRocmVhZGFibGVMb2Fk
ZXIgaGVyZS4KLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50
KCkpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLQotICAgIG1fY2FjaGVkU2NyaXB0ID0gZG9jdW1lbnQt
PmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VVJMLCAiVVRGLTgiKTsKLSAgICBp
ZiAoIW1fY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCisgICAgbV9zY3JpcHRMb2FkZXIgPSBuZXcgV29ya2VyU2Ny
aXB0TG9hZGVyKCk7CisgICAgbV9zY3JpcHRMb2FkZXItPmxvYWRBc3luY2hyb25vdXNseShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIG1fc2NyaXB0VVJMLCBSZXF1aXJlU2FtZVJlZGlyZWN0T3Jp
Z2luLCB0aGlzKTsKICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7ICAvLyBUaGUgd29ya2Vy
IGNvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVzdCBlbnN1cmUg
dGhhdCB0aGUgd29ya2VyIG9iamVjdCBpcyBub3QgY29sbGVjdGVkLCBhcyB3ZWxsIGFzIGl0cyBl
dmVudCBsaXN0ZW5lcnMuCi0gICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKIH0K
IAogV29ya2VyOjp+V29ya2VyKCkKQEAgLTExMiwxNyArMTAyLDE0IEBAIGJvb2wgV29ya2VyOjpo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRleHRQcm94eS0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHko
KTsKIH0KIAotdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiB1bnVz
ZWRSZXNvdXJjZSkKK3ZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpCiB7Ci0gICAgQVNTRVJU
X1VOVVNFRCh1bnVzZWRSZXNvdXJjZSwgdW51c2VkUmVzb3VyY2UgPT0gbV9jYWNoZWRTY3JpcHQp
OwotCi0gICAgaWYgKG1fY2FjaGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCisgICAgaWYgKG1f
c2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAg
ICAgZWxzZQotICAgICAgICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0KG1fc2Ny
aXB0VVJMLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdFVSTCks
IG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSk7CisgICAgICAgIG1fY29udGV4dFByb3h5LT5zdGFy
dFdvcmtlckNvbnRleHQobV9zY3JpcHRVUkwsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNl
ckFnZW50KG1fc2NyaXB0VVJMKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKIAotICAgIG1f
Y2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9jYWNoZWRTY3JpcHQgPSAw
OworICAgIG1fc2NyaXB0TG9hZGVyID0gMDsKIAogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oIGIvV2ViQ29yZS93
b3JrZXJzL1dvcmtlci5oCmluZGV4IGQwNWY5ZDUuLmY2OGNhMDYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKQEAgLTMx
LDI1ICszMSwyNCBAQAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENh
Y2hlZFJlc291cmNlOwotICAgIGNsYXNzIENhY2hlZFNjcmlwdDsKICAgICBjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBXb3JrZXJDb250
ZXh0UHJveHk7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAgY2xhc3Mg
V29ya2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyPiwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCwgcHJpdmF0ZSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAg
ICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXI+LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwcml2YXRlIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCwgcHVibGljIEV2ZW50
VGFyZ2V0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlcj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlcih1cmwsIGNv
bnRleHQsIGVjKSk7IH0KICAgICAgICAgfldvcmtlcigpOwpAQCAtODksMTMgKzg4LDEzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICBXb3JrZXIoY29uc3QgU3Ry
aW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVu
dFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCiAgICAgICAgIEtVUkwgbV9zY3JpcHRVUkw7Ci0gICAg
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7Cisg
ICAgICAgIE93blB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOwogCiAgICAg
ICAgIFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRoZSBwcm94eSBvdXRs
aXZlcyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKaW5kZXggMGI4Nzc4YS4uNTdiMjE4OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJD
b250ZXh0LmNwcApAQCAtMzgsMTQgKzM4LDEzIEBACiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNv
ZGUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jaW5jbHVkZSAiV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oIgogI2luY2x1ZGUgIldv
cmtlckxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAi
V29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKQEAgLTI3NCwyMCArMjcz
LDIwIEBAIHZvaWQgV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdXJscywgY29uc3QgU3RyaW5nJiBjYWxsCiAgICAgVmVjdG9yPEtVUkw+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBjb21wbGV0ZWRVUkxzLmVuZCgpOwogCiAgICAgZm9yIChWZWN0b3I8S1VS
TD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29tcGxldGVkVVJMcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoKml0KTsKLSAgICAgICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQT3Jp
Z2luKHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudCBj
bGllbnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaXQsIGNhbGxlclVSTCwgY2FsbGVyTGlu
ZSk7Ci0gICAgICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkodGhpcywgcmVxdWVzdCwgY2xpZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBbGxv
d0RpZmZlcmVudFJlZGlyZWN0T3JpZ2luKTsKLSAgICAgICAgCisgICAgICAgIFdvcmtlclNjcmlw
dExvYWRlciBzY3JpcHRMb2FkZXI7CisgICAgICAgIHNjcmlwdExvYWRlci5sb2FkU3luY2hyb25v
dXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppdCwgQWxsb3dEaWZmZXJlbnRSZWRpcmVj
dE9yaWdpbik7CisKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFpbGVkLCB0
aHJvdyBhIE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0ZXBzLgot
ICAgICAgICBpZiAoY2xpZW50LmZhaWxlZCgpKSB7CisgICAgICAgIGlmIChzY3JpcHRMb2FkZXIu
ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5F
VFdPUktfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zY3JpcHRJbXBvcnRlZChzY3JpcHRMb2FkZXIuaWRlbnRp
ZmllcigpLCBzY3JpcHRMb2FkZXIuc2NyaXB0KCkpOworICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmFkZE1lc3NhZ2UoSW5zcGVjdG9yQ29udHJvbGxlckRlc3RpbmF0aW9uLCBKU01l
c3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgIldvcmtlciBzY3JpcHQgaW1wb3J0ZWQ6IFwi
IiArICppdCArICJcIi4iLCBjYWxsZXJMaW5lLCBjYWxsZXJVUkwpOworCiAgICAgICAgIFNjcmlw
dFZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJj
ZUNvZGUoY2xpZW50LnNjcmlwdCgpLCAqaXQpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgbV9zY3Jp
cHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLnNjcmlwdCgpLCAqaXQp
LCAmZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKCFleGNlcHRpb24uaGFzTm9WYWx1ZSgpKSB7CiAg
ICAgICAgICAgICBtX3NjcmlwdC0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICAgICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0
c0NsaWVudC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiODA2MWIuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIldvcmtlckltcG9ydFNjcmlwdHNDbGll
bnQuaCIKLQotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyICYmIHJlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgIT0gMCkgewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCi17Ci0gICAgaWYgKG1fZmFpbGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBpZiAoIW1fcmVzcG9u
c2VFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsIG1fcmVzcG9uc2VFbmNvZGluZyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29k
ZXI6OmNyZWF0ZSgidGV4dC9qYXZhc2NyaXB0IiwgIlVURi04Iik7Ci0gICAgfQotCi0gICAgaWYg
KCFsZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobGVuID09IC0xKQotICAgICAg
ICBsZW4gPSBzdHJsZW4oZGF0YSk7Ci0gICAgCi0gICAgbV9zY3JpcHQgKz0gbV9kZWNvZGVyLT5k
ZWNvZGUoZGF0YSwgbGVuKTsKLX0KLQotdm9pZCBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50Ojpk
aWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKLXsKLSAgICBpZiAobV9m
YWlsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgIG1f
c2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICAKLSAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnNjcmlwdEltcG9ydGVkKGlkZW50aWZpZXIsIG1fc2NyaXB0KTsKLSAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2UoSW5zcGVjdG9yQ29udHJvbGxlckRlc3Rp
bmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgIldvcmtlciBzY3JpcHQg
aW1wb3J0ZWQ6IFwiIiArIG1fdXJsICsgIlwiLiIsIG1fY2FsbGVyTGluZU51bWJlciwgbV9jYWxs
ZXJVUkwpOwotfQotCi12b2lkIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZEZhaWwoY29u
c3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotfQotCi12b2lkIFdv
cmtlckltcG9ydFNjcmlwdHNDbGllbnQ6OmRpZEZhaWxSZWRpcmVjdENoZWNrKCkKLXsKLSAgICBt
X2ZhaWxlZCA9IHRydWU7Ci19Ci0KLXZvaWQgV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudDo6ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KQotewotICAgIG1fZmFpbGVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdP
UktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0Ns
aWVudC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckltcG9ydFNjcmlwdHNDbGllbnQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMyNzA1NC4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VySW1wb3J0U2NyaXB0c0NsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZuZGVmIFdvcmtlckltcG9ydFNjcmlwdHNDbGll
bnRfaAotI2RlZmluZSBXb3JrZXJJbXBvcnRTY3JpcHRzQ2xpZW50X2gKLQotI2lmIEVOQUJMRShX
T1JLRVJTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgCi0gICAgY2xhc3MgV29ya2VySW1wb3J0
U2NyaXB0c0NsaWVudCA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFdvcmtlckltcG9ydFNjcmlwdHNDbGllbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2FsbGVyVVJMLCBpbnQgY2FsbGVyTGluZU51bWJlcikKLSAgICAgICAgICAgIDogbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgICAgICAg
ICAsIG1fdXJsKHVybCkKLSAgICAgICAgICAgICwgbV9jYWxsZXJVUkwoY2FsbGVyVVJMKQotICAg
ICAgICAgICAgLCBtX2NhbGxlckxpbmVOdW1iZXIoY2FsbGVyTGluZU51bWJlcikKLSAgICAgICAg
ICAgICwgbV9mYWlsZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KLSAgICAgICAg
Ym9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Ci0gICAgICAgIFN0cmluZyBtX3VybDsKLSAgICAgICAgU3RyaW5nIG1fY2FsbGVyVVJM
OwotICAgICAgICBpbnQgbV9jYWxsZXJMaW5lTnVtYmVyOwotICAgICAgICBTdHJpbmcgbV9yZXNw
b25zZUVuY29kaW5nOyAgICAgICAgCi0gICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7Ci0gICAgICAgIFN0cmluZyBtX3NjcmlwdDsKLSAgICAgICAgYm9vbCBtX2Zh
aWxlZDsKLSAgICB9OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLSNlbmRpZgot
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNlOTk2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAi
V29ya2VyU2NyaXB0TG9hZGVyLmgiCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dvcmtlclNjcmlwdExvYWRl
cjo6V29ya2VyU2NyaXB0TG9hZGVyKCkKKyAgICA6IG1fY2xpZW50KDApCisgICAgLCBtX2ZhaWxl
ZChmYWxzZSkKKyAgICAsIG1faWRlbnRpZmllcigwKQoreworfQorCit2b2lkIFdvcmtlclNjcmlw
dExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIFJlZGlyZWN0T3JpZ2luQ2hlY2sg
cmVkaXJlY3RPcmlnaW5DaGVjaykKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwp
OworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisKKyAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCByZXF1ZXN0LCAqdGhpcywgQWxsb3dTdG9y
ZWRDcmVkZW50aWFscywgcmVkaXJlY3RPcmlnaW5DaGVjayk7Cit9CisgICAgCit2b2lkIFdvcmtl
clNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWRpcmVjdE9yaWdp
bkNoZWNrIHJlZGlyZWN0T3JpZ2luQ2hlY2ssIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogY2xp
ZW50KQoreworICAgIEFTU0VSVChjbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKKyAgICByZXF1ZXN0LnNldEhUVFBNZXRo
b2QoIkdFVCIpOworCisgICAgbV90aHJlYWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMsIHJlcXVlc3QsIERvTm90U2VuZExv
YWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBy
ZWRpcmVjdE9yaWdpbkNoZWNrKTsKK30KKyAgICAKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7Cisg
ICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgIT0gMiAmJiByZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2Rp
bmdOYW1lKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlRGF0YShj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQoreworICAgIGlmIChtX2ZhaWxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNl
RW5jb2RpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2phdmFzY3JpcHQiLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsICJVVEYtOCIpOworICAgIH0KKworICAgIGlmICgh
bGVuKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAg
bGVuID0gc3RybGVuKGRhdGEpOworICAgIAorICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+ZGVj
b2RlKGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9mYWlsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fc2NyaXB0ICs9
IG1fZGVjb2Rlci0+Zmx1c2goKTsKKworICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Cisg
ICAgbm90aWZ5RmluaXNoZWQoKTsKK30KKwordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbV9mYWlsZWQgPSB0cnVlOworICAgIG5v
dGlmeUZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVk
aXJlY3RDaGVjaygpCit7CisgICAgbV9mYWlsZWQgPSB0cnVlOworICAgIG5vdGlmeUZpbmlzaGVk
KCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgbV9mYWlsZWQg
PSB0cnVlOworICAgIG5vdGlmeUZpbmlzaGVkKCk7Cit9CisgICAgCit2b2lkIFdvcmtlclNjcmlw
dExvYWRlcjo6bm90aWZ5RmluaXNoZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPm5vdGlmeUZpbmlzaGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclNjcmlwdExvYWRlci5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDU0N2QKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2VyU2NyaXB0TG9hZGVyX2gKKyNkZWZp
bmUgV29ya2VyU2NyaXB0TG9hZGVyX2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1
ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgi
CisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworCisgICAgY2xhc3MgV29ya2VyU2NyaXB0TG9hZGVyIDog
cHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgV29y
a2VyU2NyaXB0TG9hZGVyKCk7CisKKyAgICAgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIFJlZGlyZWN0T3JpZ2luQ2hl
Y2spOworICAgICAgICB2b2lkIGxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiB1cmwsIFJlZGlyZWN0T3JpZ2luQ2hlY2ssIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudCopOworCisgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVy
biBtX2ZhaWxlZDsgfQorICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRp
Zmllcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBub3RpZnlG
aW5pc2hlZCgpOworCisgICAgICAgIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogbV9jbGllbnQ7
CisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX3RocmVhZGFibGVMb2FkZXI7Cisg
ICAgICAgIFN0cmluZyBtX3Jlc3BvbnNlRW5jb2Rpbmc7ICAgICAgICAKKyAgICAgICAgUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0
OworICAgICAgICBib29sIG1fZmFpbGVkOworICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRp
ZmllcjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlclNjcmlwdExvYWRlcl9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTM5MDNjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKwor
I2lmbmRlZiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnRfaAorI2RlZmluZSBXb3JrZXJTY3JpcHRM
b2FkZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKSB7IH0KKyAgICAgICAgCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQoKSB7
IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlclNjcmlwdExvYWRlckNsaWVudF9oCg==
</data>
<flag name="review"
          id="16004"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>