<?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>65997</bug_id>
          
          <creation_ts>2011-08-10 10:36:43 -0700</creation_ts>
          <short_desc>[Chromium] Decouple implementation of allowFileSystem, openFileSystem and allowDatabase from WebWorkerBase</short_desc>
          <delta_ts>2011-08-10 16:51:49 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>abarth</cc>
    
    <cc>dimich</cc>
    
    <cc>jianli</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>449227</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 10:36:43 -0700</bug_when>
    <thetext>After dedicated workers move in-process, they will no longer be using WebWorkerBase as a base implementation class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449232</commentid>
    <comment_count>1</comment_count>
      <attachid>103504</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 10:47:25 -0700</bug_when>
    <thetext>Created attachment 103504
Implementation

This patch moves implementation of allowFileSystem, openFileSystem and allowDatabase from WebWorkerBase to respectively LocalFileSystemChromium and DatabaseObserver, parametrizing them with relevant data from WebWorker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449234</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 10:48:53 -0700</bug_when>
    <thetext>(chromium trybots are happy)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449255</commentid>
    <comment_count>3</comment_count>
      <attachid>103504</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-08-10 11:21:15 -0700</bug_when>
    <thetext>Comment on attachment 103504
Implementation

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

&gt; Source/WebKit/chromium/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=65997.

Please add an empty line after the link.

&gt; Source/WebKit/chromium/ChangeLog:9
&gt; +        * src/DatabaseObserver.cpp:

Please add more detail regarding this particular file here. For example, you can add:
  Move allowDatabase from WebWorkerBase and update the caller.

&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:90
&gt; +                                                                createCallbackTask(&amp;didComplete, WebCore::AllowCrossThreadAccess(this), result), m_mode);

You can join this line and the line above it.

&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:107
&gt; +        if (!commonClient)

You can flip the if condition and swap the two actions.

&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:124
&gt; +bool allowDatabaseForWorker(WebCommonWorkerClient* commonClient, WebFrame* frame, const WebString&amp; name, const WebString&amp; displayName, unsigned long estimatedSize)

I think allowDatabaseOnWorker sounds better.

&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:130
&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();

You can replace &quot;workerContext-&gt;thread()&quot; with workerThread.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:145
&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();

ditto.

Also, can you use a helper function to get workerThread?

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:168
&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();

ditto.

&gt; Source/WebKit/chromium/src/WebWorkerBase.cpp:53
&gt; +#include &quot;WorkerLoaderProxy.h&quot;

It seems that you can also remove the including of WorkerFileSystemCallbacksBridge.h, WorkerScriptController.h and others.

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:95
&gt; +    WebView* webView() { return m_webView; }

Please add const modifier.

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:97
&gt; +    virtual WebCommonWorkerClient* commonClient() = 0;

Please add empty line after this.

&gt; Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h:42
&gt; +#include &quot;WorkerLoaderProxy.h&quot;

You can use forward declaration for WorkerLoaderProxy, instead of including it.

Do not forget to remove the forward declaration for WebWorkerBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449339</commentid>
    <comment_count>4</comment_count>
      <attachid>103504</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 13:09:55 -0700</bug_when>
    <thetext>Comment on attachment 103504
Implementation

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

Thanks for review!

&gt;&gt; Source/WebKit/chromium/ChangeLog:4
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=65997.
&gt; 
&gt; Please add an empty line after the link.

Done.

&gt;&gt; Source/WebKit/chromium/ChangeLog:9
&gt;&gt; +        * src/DatabaseObserver.cpp:
&gt; 
&gt; Please add more detail regarding this particular file here. For example, you can add:
&gt;   Move allowDatabase from WebWorkerBase and update the caller.

Done

&gt;&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:90
&gt;&gt; +                                                                createCallbackTask(&amp;didComplete, WebCore::AllowCrossThreadAccess(this), result), m_mode);
&gt; 
&gt; You can join this line and the line above it.

Changed formatting to make code clearer.

&gt;&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:107
&gt;&gt; +        if (!commonClient)
&gt; 
&gt; You can flip the if condition and swap the two actions.

Done although this was the orinal code.

&gt;&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:124
&gt;&gt; +bool allowDatabaseForWorker(WebCommonWorkerClient* commonClient, WebFrame* frame, const WebString&amp; name, const WebString&amp; displayName, unsigned long estimatedSize)
&gt; 
&gt; I think allowDatabaseOnWorker sounds better.

Why for? We are allowing database _for_ worker. Also consistent with other naming (openFileSystemForWorker)

&gt;&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:130
&gt;&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();
&gt; 
&gt; You can replace &quot;workerContext-&gt;thread()&quot; with workerThread.

Done.

&gt;&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:145
&gt;&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();
&gt; 
&gt; ditto.
&gt; 
&gt; Also, can you use a helper function to get workerThread?

I need both workerThread and workerContext out of this 3 lines of code, so I do not feel separate function is very useful.

&gt;&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:168
&gt;&gt; +    WebCore::WorkerLoaderProxy* workerLoaderProxy =  &amp;workerContext-&gt;thread()-&gt;workerLoaderProxy();
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerBase.cpp:53
&gt;&gt; +#include &quot;WorkerLoaderProxy.h&quot;
&gt; 
&gt; It seems that you can also remove the including of WorkerFileSystemCallbacksBridge.h, WorkerScriptController.h and others.

Done

&gt;&gt; Source/WebKit/chromium/src/WebWorkerBase.h:95
&gt;&gt; +    WebView* webView() { return m_webView; }
&gt; 
&gt; Please add const modifier.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerBase.h:97
&gt;&gt; +    virtual WebCommonWorkerClient* commonClient() = 0;
&gt; 
&gt; Please add empty line after this.

Done.

&gt;&gt; Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h:42
&gt;&gt; +#include &quot;WorkerLoaderProxy.h&quot;
&gt; 
&gt; You can use forward declaration for WorkerLoaderProxy, instead of including it.
&gt; 
&gt; Do not forget to remove the forward declaration for WebWorkerBase.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449340</commentid>
    <comment_count>5</comment_count>
      <attachid>103523</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 13:10:24 -0700</bug_when>
    <thetext>Created attachment 103523
CR feedback addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449351</commentid>
    <comment_count>6</comment_count>
      <attachid>103523</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-08-10 13:23:15 -0700</bug_when>
    <thetext>Comment on attachment 103523
CR feedback addressed

Almost there. Just some more minor comments.

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

&gt; Source/WebKit/chromium/ChangeLog:8
&gt; +        parametrizing them with relevant data from WebWorker.

typo: parameterizing

&gt; Source/WebKit/chromium/ChangeLog:10
&gt; +        * src/DatabaseObserver.cpp:Move allowDatabase from WebWorkerBase and update the caller.

Please add a whitespace after &apos;:&apos;.

&gt; Source/WebKit/chromium/ChangeLog:20
&gt; +        * src/LocalFileSystemChromium.cpp:Move allowFileSystem and openFileSystem from WebWorkerBase and update the caller.

ditto.

&gt; Source/WebKit/chromium/ChangeLog:30
&gt; +        * src/WorkerFileSystemCallbacksBridge.h:

Please also add more comment here, like:
  Change WorkerFileSystemCallbacksBridge constructor to take WorkerLoaderProxy argument.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:122
&gt; +        if (!commonClient)

Since you&apos;re already in this code, why not just making it better?

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:184
&gt; +

Please remove an extra blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449363</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 13:36:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 103523 [details])
&gt; Almost there. Just some more minor comments.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103523&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:8
&gt; &gt; +        parametrizing them with relevant data from WebWorker.
&gt; 
&gt; typo: parameterizing

Done. 
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:10
&gt; &gt; +        * src/DatabaseObserver.cpp:Move allowDatabase from WebWorkerBase and update the caller.
&gt; 
&gt; Please add a whitespace after &apos;:&apos;.

Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:20
&gt; &gt; +        * src/LocalFileSystemChromium.cpp:Move allowFileSystem and openFileSystem from WebWorkerBase and update the caller.
&gt; 
&gt; ditto.

Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:30
&gt; &gt; +        * src/WorkerFileSystemCallbacksBridge.h:
&gt; 
&gt; Please also add more comment here, like:
&gt;   Change WorkerFileSystemCallbacksBridge constructor to take WorkerLoaderProxy argument.

Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:122
&gt; &gt; +        if (!commonClient)
&gt; 
&gt; Since you&apos;re already in this code, why not just making it better?
Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:184
&gt; &gt; +
&gt; 
&gt; Please remove an extra blank line.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449366</commentid>
    <comment_count>8</comment_count>
      <attachid>103528</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 13:37:24 -0700</bug_when>
    <thetext>Created attachment 103528
Extra feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449368</commentid>
    <comment_count>9</comment_count>
      <attachid>103528</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-08-10 13:39:41 -0700</bug_when>
    <thetext>Comment on attachment 103528
Extra feedback

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

&gt; Source/WebKit/chromium/src/DatabaseObserver.cpp:147
&gt; +

Extra empty line.

&gt; Source/WebKit/chromium/src/LocalFileSystemChromium.cpp:75
&gt; +

Extra empty line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449374</commentid>
    <comment_count>10</comment_count>
      <attachid>103530</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 13:42:28 -0700</bug_when>
    <thetext>Created attachment 103530
Empty lines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449436</commentid>
    <comment_count>11</comment_count>
      <attachid>103530</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-10 15:31:00 -0700</bug_when>
    <thetext>Comment on attachment 103530
Empty lines

Rejecting attachment 103530 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 1

Last 500 characters of output:
1031bf49c725076cb9a13180c3c1151164e7e6d7
r92799 = 42efb1ad980c022006972b156e9dcde70e43ac9e
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/9336822</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449447</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-10 15:45:20 -0700</bug_when>
    <thetext>ERROR: /mnt/git/webkit-commit-queue/Source/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449448</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-10 15:46:00 -0700</bug_when>
    <thetext>You need to leave the &quot;Reviewed by NOBODY (OOPS!)&quot; line int he ChangeLog so that the bot knows where to insert the reviewer information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449454</commentid>
    <comment_count>14</comment_count>
      <attachid>103547</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-10 15:53:39 -0700</bug_when>
    <thetext>Created attachment 103547
Fixed changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449490</commentid>
    <comment_count>15</comment_count>
      <attachid>103547</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-10 16:51:43 -0700</bug_when>
    <thetext>Comment on attachment 103547
Fixed changelog

Clearing flags on attachment: 103547

Committed r92802: &lt;http://trac.webkit.org/changeset/92802&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449491</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-10 16:51:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103504</attachid>
            <date>2011-08-10 10:47:25 -0700</date>
            <delta_ts>2011-08-10 13:10:24 -0700</delta_ts>
            <desc>Implementation</desc>
            <filename>65997.patch</filename>
            <type>text/plain</type>
            <size>29427</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTI3MjgzOS4uMjc0ZDlhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMS0wOC0xMCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAgICAgW0Nocm9taXVtXSBE
ZWNvdXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvd0ZpbGVTeXN0ZW0sIG9wZW5GaWxlU3lzdGVt
IGFuZCBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk3LgorICAgICAgICBUaGlzIHBhdGNo
IG1vdmVzIGltcGxlbWVudGF0aW9uIG9mIGFsbG93RmlsZVN5c3RlbSwgb3BlbkZpbGVTeXN0ZW0g
YW5kIGFsbG93RGF0YWJhc2UgZnJvbQorICAgICAgICBXZWJXb3JrZXJCYXNlIHRvIHJlc3BlY3Rp
dmVseSBMb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bSBhbmQgRGF0YWJhc2VPYnNlcnZlciwgCisgICAg
ICAgIHBhcmFtZXRyaXppbmcgdGhlbSB3aXRoIHJlbGV2YW50IGRhdGEgZnJvbSBXZWJXb3JrZXIu
CisKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktp
dDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OnJlc3VsdCk6CisgICAgICAgIChXZWJL
aXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpzaWduYWxDb21wbGV0ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFz
ZU1haW5UaHJlYWRCcmlkZ2UpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZTo6YWxsb3dEYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZTo6ZGlkQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0Ojph
bGxvd0RhdGFiYXNlRm9yV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2
ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlbkZpbGVTeXN0ZW1IZWxwZXIpOgor
ICAgICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViV29ya2Vy
QmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjp3ZWJWaWV3KToKKyAgICAg
ICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3ApOgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6bWF5UG9zdFRhc2tUb1dvcmtlcik6Cisg
ICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKyAgICAgICAg
KFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKToKKwogMjAx
MS0wOC0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIFJvbGxlZCBERVBTIDk1ODEzOjk2MDA5IHRvIHBpY2sgZGF0YSB1cmwgdGlt
aW5nIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAKaW5kZXggYWVkOTdkMC4uNzVkODdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBACiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUg
IkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVD
bGllbnQuaCIKQEAgLTQ1LDEwICs0OCwxMDcgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgog
I2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKK25hbWVzcGFjZSB7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworc3RhdGljIGNv
bnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNlTW9kZSI7CisKKy8v
IFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUgcmVzdWx0IG9mIHRoZSBXZWJXb3JrZXJC
YXNlOjphbGxvd0RhdGFiYXNlCisvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0Lgor
Y2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdl
YkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpT
dHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFt
ZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9h
ZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW52b2tl
ZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3dvcmtlckxvYWRlclBy
b3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCByZXN1bHQpCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICht
X3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAgbV93b3JrZXJMb2FkZXJQcm94eS0+cG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
ZGlkQ29tcGxldGUsIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHJlc3Vs
dCksIG1fbW9kZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwg
Y29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICAg
ICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1f
bW9kZShtb2RlKQorICAgIHsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0RhdGFiYXNl
VGFzaywgV2ViQ29yZTo6QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGllbnQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoZnJhbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhuYW1lKSwg
U3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAg
aWYgKCFjb21tb25DbGllbnQpCisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChm
YWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVk
KGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVzdWx0KQorICAgIHsKKyAgICAg
ICAgYnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG1fcmVzdWx0
OworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1f
d29ya2VyTG9hZGVyUHJveHk7CisgICAgV1RGOjpTdHJpbmcgbV9tb2RlOworfTsKKworYm9vbCBh
bGxvd0RhdGFiYXNlRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQoreworICAgIFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXZWJDb3JlOjpXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAgIFdlYkNvcmU6Oldv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7
CisgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3b3JrZXJDb250ZXh0
LT50aHJlYWQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2Vy
VGhyZWFkLT5ydW5Mb29wKCk7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5ID0gICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJv
eHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hy
b25vdXMgY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IGFsbG93RGF0YWJhc2VNb2RlOworICAgIG1v
ZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisg
ICAgUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UgPSBBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBj
b21tb25DbGllbnQsIGZyYW1lLCBTdHJpbmcobmFtZSksIFN0cmluZyhkaXNwbGF5TmFtZSksIGVz
dGltYXRlZFNpemUpOworCisgICAgLy8gRWl0aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3IgdGhl
IHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2Vy
Q29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCkgeworICAgICAgICBicmlk
Z2UtPmNhbmNlbCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IGJyaWRnZS0+cmVzdWx0KCk7Cit9CisKKworI2VuZGlmCisKK30KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQpAQCAtNjYsNyArMTY2LDcgQEAgYm9vbCBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxp
c2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXQKICAgICAgICAg
V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdv
cmtlckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQ
cm94eSgpOwogICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxX
ZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICByZXR1cm4gd2ViV29y
a2VyLT5hbGxvd0RhdGFiYXNlKDAsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsK
KyAgICAgICAgcmV0dXJuIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25D
bGllbnQoKSwgd2ViV29ya2VyLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDk2NmNiZGMuLmQ4ZGJmNTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGaWxl
RXJyb3IuaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuaCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIgogI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAt
NjksNiArNzEsMTE4IEBAIGVudW0gQ3JlYXRpb25GbGFnIHsKICAgICBDcmVhdGVJZk5vdFByZXNl
bnQKIH07CiAKKyNpZiBFTkFCTEUoV09SS0VSUykKKworCitzdGF0aWMgY29uc3QgY2hhciBhbGxv
d0ZpbGVTeXN0ZW1Nb2RlW10gPSAiYWxsb3dGaWxlU3lzdGVtTW9kZSI7CitzdGF0aWMgY29uc3Qg
Y2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOworCisvLyBU
aGlzIGNsYXNzIGlzIHVzZWQgdG8gcm91dGUgdGhlIHJlc3VsdCBvZiB0aGUgV2ViV29ya2VyQmFz
ZTo6YWxsb3dGaWxlU3lzdGVtCisvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0Lgor
Y2xhc3MgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gY3Jl
YXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3Qg
V1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhy
ZWFkQnJpZGdlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQpKTsKKyAgICB9
CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4
dC4KKyAgICB2b2lkIGNhbmNlbCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgICAgIG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOworICAgIH0KKworICAg
IGJvb2wgcmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICB9CisK
KyAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICB2
b2lkIHNpZ25hbENvbXBsZXRlZChib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJveHkpCisg
ICAgICAgICAgICBtX3dvcmtlckxvYWRlclByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoCisgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVzdWx0KSwgbV9tb2RlKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBt
b2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICAgICAgOiBtX3dv
cmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZShtb2Rl
KQorICAgIHsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0ZpbGVTeXN0ZW1UYXNrLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVudCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3RlbVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBh
c3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsK
KyAgICAgICAgaWYgKCFjb21tb25DbGllbnQpCisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENv
bXBsZXRlZChmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFs
Q29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dGaWxlU3lzdGVtKCkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJp
ZGdlLCBib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJyaWRnZS0+bV9yZXN1bHQgPSByZXN1
bHQ7CisgICAgfQorCisgICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBNdXRleCBtX211dGV4OworICAg
IFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiBtX3dvcmtlckxvYWRlclByb3h5OworICAgIFdU
Rjo6U3RyaW5nIG1fbW9kZTsKK307CisKK2Jvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQoreworICAgIFdvcmtlclNjcmlwdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVy
Rm9yQ29udGV4dCgpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9s
bGVyLT53b3JrZXJDb250ZXh0KCk7CisgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJU
aHJlYWQgPSB3b3JrZXJDb250ZXh0LT50aHJlYWQoKTsKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5M
b29wID0gd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVy
UHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBtb2RlIGp1c3QgZm9y
IHRoaXMgc3luY2hyb25vdXMgY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IGFsbG93RmlsZVN5c3Rl
bU1vZGU7CisgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlx
dWVJZCgpKSk7CisKKyAgICBSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4g
YnJpZGdlID0gQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdvcmtlckxv
YWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQpOworCisgICAgLy8gRWl0aGVyIHRoZSBicmlk
Z2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAgICBpZiAocnVuTG9v
cC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVybWluYXRl
ZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7Cit9CisKK3ZvaWQgb3BlbkZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCit7CisgICAgV29y
a2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJUaHJl
YWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOworICAgIFdvcmtlclJ1
bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAgICBXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAgJndvcmtlckNvbnRleHQtPnRo
cmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOworCisgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1v
ZGUgZm9yIHRoaXMgb3BlbkZpbGVTeXN0ZW0gY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IG9wZW5G
aWxlU3lzdGVtTW9kZTsKKyAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNy
ZWF0ZVVuaXF1ZUlkKCkpKTsKKworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUo
d29ya2VyTG9hZGVyUHJveHksIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7CisgICAgYnJpZGdl
LT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50LCB0eXBlLCBzaXpl
LCBjcmVhdGUsIG1vZGUpOworCisgICAgaWYgKHN5bmNocm9ub3VzKSB7CisgICAgICAgIGlmIChy
dW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJt
aW5hdGVkKQorICAgICAgICAgICAgYnJpZGdlLT5zdG9wKCk7CisgICAgfQorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCisKKwogfSAvLyBuYW1lc3BhY2UKIAogc3RhdGljIHZvaWQgb3Bl
bkZpbGVTeXN0ZW1Ob3RBbGxvd2VkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtOTMsMTAgKzIwNywxMCBA
QCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbUhlbHBlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAgICAgICBX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhy
ZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldv
cmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0g
ICAgICAgIGlmICghd2ViV29ya2VyLT5hbGxvd0ZpbGVTeXN0ZW0oKSkKKyAgICAgICAgaWYgKCFh
bGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSkpCiAgICAg
ICAgICAgICBhbGxvd2VkID0gZmFsc2U7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdlYldv
cmtlci0+b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6
VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9u
b3VzKSwgc3luY2hyb25vdXMpOworICAgICAgICAgICAgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIo
d2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlw
ZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3Vz
KSwgc3luY2hyb25vdXMpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKaW5k
ZXggZDYxODY3Mi4uMjAwM2RhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViV29ya2VyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VyQmFzZS5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKIAogI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKICNpbmNsdWRlICJXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgiCisjaW5j
bHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KQEAgLTYwLDEzNCArNjEsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIEVOQUJM
RShXT1JLRVJTKQogCi1zdGF0aWMgY29uc3QgY2hhciBhbGxvd0RhdGFiYXNlTW9kZVtdID0gImFs
bG93RGF0YWJhc2VNb2RlIjsKLXN0YXRpYyBjb25zdCBjaGFyIGFsbG93RmlsZVN5c3RlbU1vZGVb
XSA9ICJhbGxvd0ZpbGVTeXN0ZW1Nb2RlIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wZW5GaWxlU3lz
dGVtTW9kZVtdID0gIm9wZW5GaWxlU3lzdGVtTW9kZSI7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRo
aXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUgcmVzdWx0IG9mIHRoZSBXZWJXb3JrZXJCYXNl
OjphbGxvd0RhdGFiYXNlCi0vLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0LgotY2xh
c3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYldv
cmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRh
YmFzZU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyLCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBu
YW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotICAgIH0KLQotICAgIC8vIFRoZXNl
IG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdvcmtlciBjb250ZXh0LgotICAgIHZvaWQgY2Fu
Y2VsKCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAg
ICAgbV93b3JrZXIgPSAwOwotICAgIH0KLQotICAgIGJvb2wgcmVzdWx0KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Jlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZv
a2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lkIHNpZ25hbENvbXBsZXRlZChib29sIHJl
c3VsdCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAg
ICAgaWYgKG1fd29ya2VyKQotICAgICAgICAgICAgbV93b3JrZXItPnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyQ29udGV4dCgKLSAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENv
bXBsZXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCByZXN1bHQpLCBtX21vZGUpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJX
b3JrZXJCYXNlKiB3b3JrZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCi0gICAgICAgIDogbV93b3JrZXIod29ya2VyKQotICAgICAgICAsIG1fbW9k
ZShtb2RlKQotICAgIHsKLSAgICAgICAgd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Ci0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmFsbG93RGF0YWJhc2VUYXNrLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVudCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhmcmFtZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nKG5hbWUpLCBTdHJpbmcoZGlzcGxheU5hbWUpLCBlc3RpbWF0
ZWRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcykpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFz
ayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlk
Z2UpCi0gICAgewotICAgICAgICBpZiAoIWNvbW1vbkNsaWVudCkKLSAgICAgICAgICAgIGJyaWRn
ZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJp
ZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0RhdGFiYXNlKGZyYW1lLCBu
YW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCBy
ZXN1bHQpCi0gICAgewotICAgICAgICBicmlkZ2UtPm1fcmVzdWx0ID0gcmVzdWx0OwotICAgIH0K
LQotICAgIGJvb2wgbV9yZXN1bHQ7Ci0gICAgTXV0ZXggbV9tdXRleDsKLSAgICBXZWJXb3JrZXJC
YXNlKiBtX3dvcmtlcjsKLSAgICBXVEY6OlN0cmluZyBtX21vZGU7Ci19OwotCi0vLyBUaGlzIGNs
YXNzIGlzIHVzZWQgdG8gcm91dGUgdGhlIHJlc3VsdCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxs
b3dGaWxlU3lzdGVtCi0vLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0LgotY2xhc3Mg
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdl
YldvcmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlKHdvcmtlciwgbW9kZSwgY29tbW9u
Q2xpZW50KSk7Ci0gICAgfQotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW52b2tlZCBvbiB0
aGUgd29ya2VyIGNvbnRleHQuCi0gICAgdm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBtX3dvcmtlciA9IDA7Ci0gICAgfQot
Ci0gICAgYm9vbCByZXN1bHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0OwotICAg
IH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkLgot
ICAgIHZvaWQgc2lnbmFsQ29tcGxldGVkKGJvb2wgcmVzdWx0KQotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBpZiAobV93b3JrZXIpCi0gICAgICAg
ICAgICBtX3dvcmtlci0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAotICAgICAgICAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksIHJlc3VsdCksIG1fbW9kZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFs
bG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2ViV29ya2VyQmFzZSogd29ya2VyLCBjb25z
dCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQp
Ci0gICAgICAgIDogbV93b3JrZXIod29ya2VyKQotICAgICAgICAsIG1fbW9kZShtb2RlKQotICAg
IHsKLSAgICAgICAgd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0gICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJmFsbG93RmlsZVN5c3RlbVRhc2ssIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoY29tbW9uQ2xpZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
YWxsb3dGaWxlU3lzdGVtVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgUGFzc1JlZlB0cjxBbGxv
d0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UpCi0gICAgewotICAgICAgICBpZiAo
IWNvbW1vbkNsaWVudCkKLSAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNl
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29t
bW9uQ2xpZW50LT5hbGxvd0ZpbGVTeXN0ZW0oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
ZGlkQ29tcGxldGUoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVz
dWx0KQotICAgIHsKLSAgICAgICAgYnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9Ci0K
LSAgICBib29sIG1fcmVzdWx0OwotICAgIE11dGV4IG1fbXV0ZXg7Ci0gICAgV2ViV29ya2VyQmFz
ZSogbV93b3JrZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9tb2RlOwotfTsKLQotfQotCiAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gZm9yY2UgdG8gaW5pdGlh
bGl6ZSBzb21lIHN0YXRpYwogLy8gdmFsdWVzIHVzZWQgaW4gV2ViS2l0IGJlZm9yZSBhbnkgd29y
a2VyIHRocmVhZCBpcyBzdGFydGVkLiBUaGlzIGlzIGJlY2F1c2UgaW4KIC8vIG91ciB3b3JrZXIg
cHJvY2Vzc3MsIHdlIGRvIG5vdCBydW4gYW55IFdlYktpdCBjb2RlIGluIG1haW4gdGhyZWFkIGFu
ZCB0aHVzCkBAIC0yODUsNzAgKzE1OCw2IEBAIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBXZWJX
b3JrZXJCYXNlOjpjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdlCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViV29ya2VyQmFzZTo6YWxsb3dEYXRhYmFzZShXZWJGcmFt
ZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotewotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwotICAgIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29u
dGV4dCgpOwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53
b3JrZXJDb250ZXh0KCk7Ci0KLSAgICAvLyBDcmVhdGUgYSB1bmlxdWUgbW9kZSBqdXN0IGZvciB0
aGlzIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgU3RyaW5nIG1vZGUgPSBhbGxvd0RhdGFiYXNlTW9k
ZTsKLSAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlk
KCkpKTsKLQotICAgIFJlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdl
ID0gQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSh0aGlzLCBtb2RlLCBjb21t
b25DbGllbnQoKSwgbV93ZWJWaWV3LT5tYWluRnJhbWUoKSwgU3RyaW5nKG5hbWUpLCBTdHJpbmco
ZGlzcGxheU5hbWUpLCBlc3RpbWF0ZWRTaXplKTsKLQotICAgIC8vIEVpdGhlciB0aGUgYnJpZGdl
IHJldHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQuCi0gICAgaWYgKHJ1bkxvb3Au
cnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQp
IHsKLSAgICAgICAgYnJpZGdlLT5jYW5jZWwoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOwotfQotCi0jaWYgRU5BQkxFKEZJTEVf
U1lTVEVNKQotCi1ib29sIFdlYldvcmtlckJhc2U6OmFsbG93RmlsZVN5c3RlbSgpCi17Ci0gICAg
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7Ci0gICAg
V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKLQotICAgIC8vIENyZWF0ZSBhIHVu
aXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4KLSAgICBTdHJpbmcgbW9k
ZSA9IGFsbG93RmlsZVN5c3RlbU1vZGU7Ci0gICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIo
cnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0KLSAgICBSZWZQdHI8QWxsb3dGaWxlU3lzdGVt
TWFpblRocmVhZEJyaWRnZT4gYnJpZGdlID0gQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRn
ZTo6Y3JlYXRlKHRoaXMsIG1vZGUsIGNvbW1vbkNsaWVudCgpKTsKLQotICAgIC8vIEVpdGhlciB0
aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQuCi0gICAgaWYg
KHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRl
cm1pbmF0ZWQpIHsKLSAgICAgICAgYnJpZGdlLT5jYW5jZWwoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOwotfQotCi12b2lkIFdl
YldvcmtlckJhc2U6Om9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCi17Ci0gICAgV29ya2VyUnVuTG9vcCYgcnVu
TG9vcCA9IG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7Ci0gICAgV29ya2VyU2NyaXB0Q29udHJv
bGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JD
b250ZXh0KCk7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXIt
PndvcmtlckNvbnRleHQoKTsKLQotICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBtb2RlIGZvciB0aGlz
IG9wZW5GaWxlU3lzdGVtIGNhbGwuCi0gICAgU3RyaW5nIG1vZGUgPSBvcGVuRmlsZVN5c3RlbU1v
ZGU7Ci0gICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJ
ZCgpKSk7Ci0KLSAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJp
ZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKHRoaXMsIHdvcmtl
ckNvbnRleHQsIGNhbGxiYWNrcyk7Ci0gICAgYnJpZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQoY29tbW9uQ2xpZW50KCksIHR5cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7Ci0KLSAg
ICBpZiAoc3luY2hyb25vdXMpIHsKLSAgICAgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtl
ckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCi0gICAgICAgICAgICBi
cmlkZ2UtPnN0b3AoKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQogLy8gV29ya2VyT2JqZWN0UHJveHkg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCmluZGV4IDllZmNlMTUuLjBjY2ViMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKQEAgLTg5LDIxICs4OSwxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUq
LCBXZWJEYXRhU291cmNlKik7CiAgICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCog
Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdENsaWVudCopOwogCi0gICAgLy8gQ29udHJvbHMgd2hldGhlciBhY2Nlc3MgdG8gV2ViIERh
dGFiYXNlcyBpcyBhbGxvd2VkIGZvciB0aGlzIHdvcmtlci4KLSAgICBib29sIGFsbG93RGF0YWJh
c2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7Ci0KLSNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCi0gICAgLy8gQ29udHJvbHMgd2hldGhlciBhY2Nlc3MgdG8gRmlsZSBTeXN0ZW0g
aXMgYWxsb3dlZCBmb3IgdGhpcyB3b3JrZXIuCi0gICAgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKTsK
LSAgICB2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxv
bmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wg
c3luY2hyb25vdXMpOwotI2VuZGlmCi0KICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBv
biB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwog
CisgICAgV2ViVmlldyogd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQorCisgICAgdmly
dHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgPSAwOwotICAgIHZpcnR1
YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAKICAgICB2b2lk
IHNldFdvcmtlclRocmVhZChQYXNzUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gdGhyZWFk
KSB7IG1fd29ya2VyVGhyZWFkID0gdGhyZWFkOyB9CiAgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFk
KiB3b3JrZXJUaHJlYWQoKSB7IHJldHVybiBtX3dvcmtlclRocmVhZC5nZXQoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlLmNwcAppbmRleCBmYzA3NGFkLi4xN2M3NzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIldlYlVSTC5oIgog
I2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTE0Nyw3ICsxNDgsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6OnN0b3AoKQogewogICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgbV93b3Jr
ZXIgPSAwOworICAgIG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOwogCiAgICAgaWYgKG1fY2FsbGJh
Y2tzT25Xb3JrZXJUaHJlYWQpIHsKICAgICAgICAgbV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+
ZGlkRmFpbChXZWJGaWxlRXJyb3JBYm9ydCk7CkBAIC0zMzcsOSArMzM4LDkgQEAgdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFk
KGNvbnN0IFdlYlZlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIGVudHJpZXMsIGhhc01vcmUpLCBtb2RlKTsKIH0KIAotV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShX
ZWJXb3JrZXJCYXNlKiB3b3JrZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKK1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uo
V2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzKiBjYWxsYmFja3MpCiAgICAgOiBXb3JrZXJDb250ZXh0OjpPYnNlcnZlcihzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCi0gICAgLCBtX3dvcmtl
cih3b3JrZXIpCisgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQog
ICAgICwgbV93b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX2Nh
bGxiYWNrc09uV29ya2VyVGhyZWFkKGNhbGxiYWNrcykKIHsKQEAgLTM5OSw5ICs0MDAsOSBAQCB2
b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJ1blRhc2tPbldvcmtlclRocmVh
ZChXZWJDb3JlOjpTY3JpcHRFeGVjdQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7Ci0gICAgQVNTRVJUKG1fd29ya2VyKTsK
KyAgICBBU1NFUlQobV93b3JrZXJMb2FkZXJQcm94eSk7CiAgICAgQVNTRVJUKG1fd29ya2VyQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZydW5UYXNrT25NYWluVGhyZWFkLCBSZWZQdHI8
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4odGhpcykucmVsZWFzZSgpLCB0YXNrKSk7
CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxi
YWNrVGFzaygmcnVuVGFza09uTWFpblRocmVhZCwgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U+KHRoaXMpLnJlbGVhc2UoKSwgdGFzaykpOwogfQogCiB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om1heVBvc3RUYXNrVG9Xb3JrZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBA
IC00MTMsOCArNDE0LDggQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpt
YXlQb3N0VGFza1RvV29ya2VyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3UKICAgICAvLyBpcyB2ZXJ5
IGltcG9ydGFudCwgdG8gZW5zdXJlIHRoYXQgdGhlIG1fbXV0ZXggaXMgc3RpbGwgdmFsaWQgd2hl
biBpdCBnZXRzIHVubG9ja2VkLikKICAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4gYnJpZGdlID0gYWRvcHRSZWYodGhpcyk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOwotICAgIGlmIChtX3dvcmtlcikKLSAgICAgICAgbV93b3JrZXItPnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldvcmtl
clRocmVhZCwgYnJpZGdlLCB0YXNrKSwgbW9kZSk7CisgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJv
eHkpCisgICAgICAgIG1fd29ya2VyTG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldvcmtlclRocmVhZCwgYnJpZGdl
LCB0YXNrKSwgbW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UuaAppbmRleCA0ZWM0NTAzLi4yNDNmNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5oCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJX
b3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC03OCw5
ICs3OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlKFdlYldvcmtlckJh
c2UqIHdvcmtlciwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2VyQ29udGV4
dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3Jr
ZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNr
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZSh3b3JrZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcykpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uod29y
a2VyTG9hZGVyUHJveHksIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcykpOwogICAgIH0KIAogICAg
IC8vIE1ldGhvZHMgdGhhdCBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIHBvc3QgYW4gaW5pdGlhbCBy
ZXF1ZXN0IHRhc2sgdG8gdGhlIG1haW4gdGhyZWFkLiBUaGV5IG11c3QgYmUgY2FsbGVkIG9uIHRo
ZSB3b3JrZXIgdGhyZWFkLgpAQCAtMTA0LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1F
bnRyeT4mLCBib29sIGhhc01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKIHByaXZhdGU6Ci0g
ICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJXb3JrZXJCYXNlKiwgV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKKyAg
ICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclBy
b3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3MqKTsKIAogICAgIC8vIE1ldGhvZHMgdGhhdCBhcmUgdG8gYmUgY2FsbGVkIG9uIHRoZSBt
YWluIHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50Kiwg
V2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEzNSw3
ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF5UG9zdFRhc2tUb1dvcmtlcihQYXNzT3du
UHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcm
IG1vZGUpOwogCiAgICAgTXV0ZXggbV9tdXRleDsKLSAgICBXZWJXb3JrZXJCYXNlKiBtX3dvcmtl
cjsKKyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsK
ICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAK
ICAgICAvLyBUaGlzIGlzIHNlbGYtZGVzdHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBvbiB0aGUg
d29ya2VyIHRocmVhZC4K
</data>
<flag name="review"
          id="99133"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103523</attachid>
            <date>2011-08-10 13:10:24 -0700</date>
            <delta_ts>2011-08-10 13:37:24 -0700</delta_ts>
            <desc>CR feedback addressed</desc>
            <filename>65997.patch</filename>
            <type>text/plain</type>
            <size>29845</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTI3MjgzOS4uNjVmMDgxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMS0wOC0xMCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAgICAgW0Nocm9taXVtXSBE
ZWNvdXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvd0ZpbGVTeXN0ZW0sIG9wZW5GaWxlU3lzdGVt
IGFuZCBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk3LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgYWxsb3dGaWxlU3lzdGVtLCBvcGVuRmlsZVN5c3Rl
bSBhbmQgYWxsb3dEYXRhYmFzZSBmcm9tCisgICAgICAgIFdlYldvcmtlckJhc2UgdG8gcmVzcGVj
dGl2ZWx5IExvY2FsRmlsZVN5c3RlbUNocm9taXVtIGFuZCBEYXRhYmFzZU9ic2VydmVyLCAKKyAg
ICAgICAgcGFyYW1ldHJpemluZyB0aGVtIHdpdGggcmVsZXZhbnQgZGF0YSBmcm9tIFdlYldvcmtl
ci4KKworICAgICAgICAqIHNyYy9EYXRhYmFzZU9ic2VydmVyLmNwcDpNb3ZlIGFsbG93RGF0YWJh
c2UgZnJvbSBXZWJXb3JrZXJCYXNlIGFuZCB1cGRhdGUgdGhlIGNhbGxlci4KKyAgICAgICAgKFdl
YktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpjYW5jZWwpOgorICAgICAgICAo
V2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6cmVzdWx0KToKKyAgICAgICAg
KFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OnNpZ25hbENvbXBsZXRlZCk6
CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6CisgICAgICAgIChXZWJLaXQ6OkFs
bG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpkaWRDb21wbGV0ZSk6CisgICAgICAgIChXZWJL
aXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VP
YnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHA6TW92ZSBhbGxvd0ZpbGVTeXN0ZW0gYW5kIG9wZW5GaWxlU3lzdGVt
IGZyb20gV2ViV29ya2VyQmFzZSBhbmQgdXBkYXRlIHRoZSBjYWxsZXIuCisgICAgICAgIChXZWJD
b3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2Uu
Y3BwOiBNb3ZlIGFsbG93RmlsZVN5c3RlbSwgb3BlbkZpbGVTeXN0ZW0gYW5kIGFsbG93RGF0YWJh
c2UgdG8gTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0gYW5kIERhdGFiYXNlT2JzZXJ2ZXIgcmVzcC4K
KyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3Jr
ZXJCYXNlOjp3ZWJWaWV3KToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OnN0b3ApOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
bWF5UG9zdFRhc2tUb1dvcmtlcik6CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6Y3JlYXRlKToKKwogMjAxMS0wOC0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGxlZCBERVBTIDk1ODEzOjk2
MDA5IHRvIHBpY2sgZGF0YSB1cmwgdGltaW5nIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKaW5kZXggYWVkOTdkMC4uM2E2ZWJlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKQEAg
LTM0LDggKzM0LDExIEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWJzdHJh
Y3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU9ic2VydmVy
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKQEAgLTQ1LDEwICs0OCwxMDggQEAKICNp
bmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNp
bmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFk
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK25hbWVzcGFjZSB7CisKKyNpZiBFTkFC
TEUoV09SS0VSUykKKworc3RhdGljIGNvbnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJh
bGxvd0RhdGFiYXNlTW9kZSI7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUg
cmVzdWx0IG9mIHRoZSBXZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlCisvLyBjYWxsIGJhY2sg
dG8gdGhlIHdvcmtlciBjb250ZXh0LgorY2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFp
blRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJM
b2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJh
bWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgfQorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9p
ZCBjYW5jZWwoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBtX3dvcmtlckxvYWRlclByb3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3Vs
dCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhp
cyBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxD
b21wbGV0ZWQoYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgICAgIGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAg
bV93b3JrZXJMb2FkZXJQcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAg
ICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIFdlYkNvcmU6OkFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHJlc3VsdCksIAorICAgICAgICAgICAgICAgIG1f
bW9kZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJp
ZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3Qg
V1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICAgICAgOiBt
X3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZSht
b2RlKQorICAgIHsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0RhdGFiYXNlVGFzaywg
V2ViQ29yZTo6QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGllbnQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZnJh
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhuYW1lKSwgU3RyaW5n
KGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJDb3JlOjpBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bW1vbkNsaWVudCkKKyAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNs
aWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNp
emUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQo
ZmFsc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBicmlk
Z2UtPm1fcmVzdWx0ID0gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgbV9yZXN1bHQ7CisgICAg
TXV0ZXggbV9tdXRleDsKKyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJM
b2FkZXJQcm94eTsKKyAgICBXVEY6OlN0cmluZyBtX21vZGU7Cit9OworCitib29sIGFsbG93RGF0
YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCit7CisgICAgV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CisgICAgV2ViQ29yZTo6V29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBX
ZWJDb3JlOjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVh
ZCgpOworICAgIFdlYkNvcmU6OldvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQt
PnJ1bkxvb3AoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVy
UHJveHkgPSAgJndvcmtlclRocmVhZC0+d29ya2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENy
ZWF0ZSBhIHVuaXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4KKyAgICBT
dHJpbmcgbW9kZSA9IGFsbG93RGF0YWJhc2VNb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UgPSBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJy
aWRnZTo6Y3JlYXRlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1l
LCBTdHJpbmcobmFtZSksIFN0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRlZFNpemUpOworCisg
ICAgLy8gRWl0aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWlu
YXRlZC4KKyAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0g
TWVzc2FnZVF1ZXVlVGVybWluYXRlZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7
Cit9CisKKworI2VuZGlmCisKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIERhdGFi
YXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQpAQCAtNjYsNyArMTY3
LDcgQEAgYm9vbCBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXQKICAgICAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0g
JndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAgICAgICBX
ZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29y
a2VyTG9hZGVyUHJveHkpOwotICAgICAgICByZXR1cm4gd2ViV29ya2VyLT5hbGxvd0RhdGFiYXNl
KDAsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICAgICAgcmV0dXJuIGFs
bG93RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2ViV29ya2Vy
LT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCmluZGV4IDk2NmNiZGMuLjU0NGEwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlU3lzdGVt
Q2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJD
b21tb25Xb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKICNpbmNsdWRl
ICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
aCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUg
IldlYldvcmtlckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAi
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVh
ZC5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNjksNiArNzEsMTE4IEBAIGVu
dW0gQ3JlYXRpb25GbGFnIHsKICAgICBDcmVhdGVJZk5vdFByZXNlbnQKIH07CiAKKyNpZiBFTkFC
TEUoV09SS0VSUykKKworCitzdGF0aWMgY29uc3QgY2hhciBhbGxvd0ZpbGVTeXN0ZW1Nb2RlW10g
PSAiYWxsb3dGaWxlU3lzdGVtTW9kZSI7CitzdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3Rl
bU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gcm91dGUgdGhlIHJlc3VsdCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxsb3dGaWxlU3lzdGVt
CisvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0LgorY2xhc3MgQWxsb3dGaWxlU3lz
dGVtTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0Zp
bGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUs
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlKHdvcmtlckxv
YWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQpKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICB2b2lkIGNhbmNl
bCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
IG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOworICAgIH0KKworICAgIGJvb2wgcmVzdWx0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1ldGhv
ZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIHNpZ25hbENvbXBsZXRl
ZChib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4
KTsKKyAgICAgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgICAgICBtX3dvcmtl
ckxvYWRlclByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSwgcmVzdWx0KSwgbV9tb2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdv
cmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAgICAgICAg
V2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0ZpbGVTeXN0ZW1UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKGNvbW1vbkNsaWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFsbG93
RmlsZVN5c3RlbVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxl
U3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFjb21t
b25DbGllbnQpCisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNs
aWVudC0+YWxsb3dGaWxlU3lzdGVtKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRpZENv
bXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIGJyaWRnZS0+bV9yZXN1bHQgPSByZXN1bHQ7CisgICAgfQorCisgICAg
Ym9vbCBtX3Jlc3VsdDsKKyAgICBNdXRleCBtX211dGV4OworICAgIFdlYkNvcmU6Oldvcmtlckxv
YWRlclByb3h5KiBtX3dvcmtlckxvYWRlclByb3h5OworICAgIFdURjo6U3RyaW5nIG1fbW9kZTsK
K307CisKK2Jvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50KQoreworICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAg
IFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0
KCk7CisgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3b3JrZXJDb250
ZXh0LT50aHJlYWQoKTsKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCk7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5ID0gICZ3b3JrZXJUaHJlYWQtPndvcmtlckxvYWRlclByb3h5KCk7CisKKyAgICAvLyBD
cmVhdGUgYSB1bmlxdWUgbW9kZSBqdXN0IGZvciB0aGlzIHN5bmNocm9ub3VzIGNhbGwuCisgICAg
U3RyaW5nIG1vZGUgPSBhbGxvd0ZpbGVTeXN0ZW1Nb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmlu
Zzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93RmlsZVN5c3RlbU1haW5U
aHJlYWRCcmlkZ2U6OmNyZWF0ZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50
KTsKKworICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRz
IHRlcm1pbmF0ZWQuCisgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1v
ZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKKyAgICAgICAgYnJpZGdlLT5jYW5jZWwo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBicmlkZ2UtPnJl
c3VsdCgpOworfQorCit2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBi
b29sIHN5bmNocm9ub3VzKQoreworICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAg
IFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0
KCk7CisgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3b3JrZXJDb250
ZXh0LT50aHJlYWQoKTsKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCk7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5ID0gICZ3b3JrZXJUaHJlYWQtPndvcmtlckxvYWRlclByb3h5KCk7CisKKyAgICAvLyBD
cmVhdGUgYSB1bmlxdWUgbW9kZSBmb3IgdGhpcyBvcGVuRmlsZVN5c3RlbSBjYWxsLgorICAgIFN0
cmluZyBtb2RlID0gb3BlbkZpbGVTeXN0ZW1Nb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6OmNyZWF0ZSh3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyQ29udGV4dCwgY2FsbGJh
Y2tzKTsKKyAgICBicmlkZ2UtPnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25D
bGllbnQsIHR5cGUsIHNpemUsIGNyZWF0ZSwgbW9kZSk7CisKKyAgICBpZiAoc3luY2hyb25vdXMp
IHsKKyAgICAgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09
IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCisgICAgICAgICAgICBicmlkZ2UtPnN0b3AoKTsKKyAg
ICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworCiB9IC8vIG5hbWVzcGFjZQog
CiBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU5vdEFsbG93ZWQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBA
IC05MywxMCArMjA3LDEwIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAgICAgICAgIFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29u
dGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3
b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAgICAgICAgV2Vi
V29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtl
ckxvYWRlclByb3h5KTsKLSAgICAgICAgaWYgKCF3ZWJXb3JrZXItPmFsbG93RmlsZVN5c3RlbSgp
KQorICAgICAgICBpZiAoIWFsbG93RmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1v
bkNsaWVudCgpKSkKICAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2Fz
dDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90
UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwg
Y29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmls
ZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxX
ZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJl
c2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29u
dGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CiAjZWxzZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmNwcAppbmRleCBkNjE4NjcyLi41NzY3NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcApAQCAtNDksOCArNDksNyBAQAogI2luY2x1
ZGUgIldlYldvcmtlckNsaWVudC5oIgogCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNp
bmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBA
IC02MCwxMzQgKzU5LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VS
UykKIAotc3RhdGljIGNvbnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFi
YXNlTW9kZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBhbGxvd0ZpbGVTeXN0ZW1Nb2RlW10gPSAiYWxs
b3dGaWxlU3lzdGVtTW9kZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVb
XSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwotCi1uYW1lc3BhY2UgewotCi0vLyBUaGlzIGNsYXNz
IGlzIHVzZWQgdG8gcm91dGUgdGhlIHJlc3VsdCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxsb3dE
YXRhYmFzZQotLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KLWNsYXNzIEFsbG93
RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFs
bG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJCYXNl
KiB3b3JrZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWlu
VGhyZWFkQnJpZGdlKHdvcmtlciwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KLSAgICB2b2lkIGNhbmNlbCgpCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIG1fd29y
a2VyID0gMDsKLSAgICB9Ci0KLSAgICBib29sIHJlc3VsdCgpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9yZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBvbiB0
aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCByZXN1bHQpCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIGlmICht
X3dvcmtlcikKLSAgICAgICAgICAgIG1fd29ya2VyLT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoCi0gICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVzdWx0KSwgbV9tb2RlKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViV29ya2VyQmFz
ZSogd29ya2VyLCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQotICAgICAgICA6IG1fd29ya2VyKHdvcmtlcikKLSAgICAgICAgLCBtX21vZGUobW9kZSkK
LSAgICB7Ci0gICAgICAgIHdvcmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAotICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0RhdGFiYXNlVGFzaywgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyhjb21tb25DbGllbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZnJhbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRo
aXMpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQotICAg
IHsKLSAgICAgICAgaWYgKCFjb21tb25DbGllbnQpCi0gICAgICAgICAgICBicmlkZ2UtPnNpZ25h
bENvbXBsZXRlZChmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyaWRnZS0+c2ln
bmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkaWRD
b21wbGV0ZShXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVzdWx0KQot
ICAgIHsKLSAgICAgICAgYnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBi
b29sIG1fcmVzdWx0OwotICAgIE11dGV4IG1fbXV0ZXg7Ci0gICAgV2ViV29ya2VyQmFzZSogbV93
b3JrZXI7Ci0gICAgV1RGOjpTdHJpbmcgbV9tb2RlOwotfTsKLQotLy8gVGhpcyBjbGFzcyBpcyB1
c2VkIHRvIHJvdXRlIHRoZSByZXN1bHQgb2YgdGhlIFdlYldvcmtlckJhc2U6OmFsbG93RmlsZVN5
c3RlbQotLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KLWNsYXNzIEFsbG93Rmls
ZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJC
YXNlKiB3b3JrZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZSh3b3JrZXIsIG1vZGUsIGNvbW1vbkNsaWVudCkp
OwotICAgIH0KLQotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdvcmtl
ciBjb250ZXh0LgotICAgIHZvaWQgY2FuY2VsKCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgbV93b3JrZXIgPSAwOwotICAgIH0KLQotICAgIGJv
b2wgcmVzdWx0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdDsKLSAgICB9Ci0KLSAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lk
IHNpZ25hbENvbXBsZXRlZChib29sIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgaWYgKG1fd29ya2VyKQotICAgICAgICAgICAgbV93
b3JrZXItPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRo
aXMpLCByZXN1bHQpLCBtX21vZGUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBbGxvd0ZpbGVT
eXN0ZW1NYWluVGhyZWFkQnJpZGdlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RGOjpT
dHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQotICAgICAg
ICA6IG1fd29ya2VyKHdvcmtlcikKLSAgICAgICAgLCBtX21vZGUobW9kZSkKLSAgICB7Ci0gICAg
ICAgIHdvcmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAotICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZhbGxvd0ZpbGVTeXN0ZW1UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KGNvbW1vbkNsaWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFsbG93Rmls
ZVN5c3RlbVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lz
dGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFjb21tb25D
bGllbnQpCi0gICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVu
dC0+YWxsb3dGaWxlU3lzdGVtKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpZENvbXBs
ZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKLSAg
ICB7Ci0gICAgICAgIGJyaWRnZS0+bV9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfQotCi0gICAgYm9v
bCBtX3Jlc3VsdDsKLSAgICBNdXRleCBtX211dGV4OwotICAgIFdlYldvcmtlckJhc2UqIG1fd29y
a2VyOwotICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKLX07Ci0KLX0KLQogLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29t
ZSBzdGF0aWMKIC8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJl
YWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCiAvLyBvdXIgd29ya2VyIHByb2Nlc3Nz
LCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cwpA
QCAtMjg1LDcwICsxNTYsNiBAQCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogV2ViV29ya2VyQmFz
ZTo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZQogICAgIHJldHVybiAw
OwogfQogCi1ib29sIFdlYldvcmtlckJhc2U6OmFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSkKLXsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gbV93
b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKLSAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250
cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsK
LSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29u
dGV4dCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1vZGUganVzdCBmb3IgdGhpcyBzeW5j
aHJvbm91cyBjYWxsLgotICAgIFN0cmluZyBtb2RlID0gYWxsb3dEYXRhYmFzZU1vZGU7Ci0gICAg
bW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0K
LSAgICBSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93
RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUodGhpcywgbW9kZSwgY29tbW9uQ2xpZW50
KCksIG1fd2ViVmlldy0+bWFpbkZyYW1lKCksIFN0cmluZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlO
YW1lKSwgZXN0aW1hdGVkU2l6ZSk7Ci0KLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1cm5z
LCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29wLnJ1bkluTW9k
ZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7Ci0gICAg
ICAgIGJyaWRnZS0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKLX0KLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
LQotYm9vbCBXZWJXb3JrZXJCYXNlOjphbGxvd0ZpbGVTeXN0ZW0oKQotewotICAgIFdvcmtlclJ1
bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwotICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250
cm9sbGVyRm9yQ29udGV4dCgpOwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBj
b250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7Ci0KLSAgICAvLyBDcmVhdGUgYSB1bmlxdWUgbW9k
ZSBqdXN0IGZvciB0aGlzIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgU3RyaW5nIG1vZGUgPSBhbGxv
d0ZpbGVTeXN0ZW1Nb2RlOwotICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3Au
Y3JlYXRlVW5pcXVlSWQoKSkpOwotCi0gICAgUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJl
YWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0
ZSh0aGlzLCBtb2RlLCBjb21tb25DbGllbnQoKSk7Ci0KLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRn
ZSByZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29w
LnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVk
KSB7Ci0gICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJC
YXNlOjpvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxv
bmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBib29sIHN5bmNocm9ub3VzKQotewotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBt
X3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwotICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgp
OwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJD
b250ZXh0KCk7Ci0KLSAgICAvLyBDcmVhdGUgYSB1bmlxdWUgbW9kZSBmb3IgdGhpcyBvcGVuRmls
ZVN5c3RlbSBjYWxsLgotICAgIFN0cmluZyBtb2RlID0gb3BlbkZpbGVTeXN0ZW1Nb2RlOwotICAg
IG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOwot
Ci0gICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZSh0aGlzLCB3b3JrZXJDb250ZXh0
LCBjYWxsYmFja3MpOwotICAgIGJyaWRnZS0+cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFk
KGNvbW1vbkNsaWVudCgpLCB0eXBlLCBzaXplLCBjcmVhdGUsIG1vZGUpOwotCi0gICAgaWYgKHN5
bmNocm9ub3VzKSB7Ci0gICAgICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0
LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKQotICAgICAgICAgICAgYnJpZGdlLT5z
dG9wKCk7Ci0gICAgfQotfQotI2VuZGlmCi0KIC8vIFdvcmtlck9iamVjdFByb3h5IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZv
aWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckJhc2UuaAppbmRleCA5ZWZjZTE1Li5iMGU1MWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCkBAIC04OSwyMSArODksMTUgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0
YVNvdXJjZSopOwogICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFw
cGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGll
bnQqKTsKIAotICAgIC8vIENvbnRyb2xzIHdoZXRoZXIgYWNjZXNzIHRvIFdlYiBEYXRhYmFzZXMg
aXMgYWxsb3dlZCBmb3IgdGhpcyB3b3JrZXIuCi0gICAgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZy
YW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQotICAgIC8vIENvbnRyb2xzIHdoZXRoZXIgYWNjZXNzIHRvIEZpbGUgU3lzdGVtIGlzIGFsbG93
ZWQgZm9yIHRoaXMgd29ya2VyLgotICAgIGJvb2wgYWxsb3dGaWxlU3lzdGVtKCk7Ci0gICAgdm9p
ZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcg
c2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBib29sIHN5bmNocm9u
b3VzKTsKLSNlbmRpZgotCiAgICAgLy8gRXhlY3V0ZXMgdGhlIGdpdmVuIHRhc2sgb24gdGhlIG1h
aW4gdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNz
T3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKIAorICAgIFdl
YlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKworICAgIHZpcnR1
YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CisKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgPSAwOwotICAgIHZpcnR1
YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAKICAgICB2b2lk
IHNldFdvcmtlclRocmVhZChQYXNzUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gdGhyZWFk
KSB7IG1fd29ya2VyVGhyZWFkID0gdGhyZWFkOyB9CiAgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFk
KiB3b3JrZXJUaHJlYWQoKSB7IHJldHVybiBtX3dvcmtlclRocmVhZC5nZXQoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlLmNwcAppbmRleCBmYzA3NGFkLi4xN2M3NzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIldlYlVSTC5oIgog
I2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTE0Nyw3ICsxNDgsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6OnN0b3AoKQogewogICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgbV93b3Jr
ZXIgPSAwOworICAgIG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOwogCiAgICAgaWYgKG1fY2FsbGJh
Y2tzT25Xb3JrZXJUaHJlYWQpIHsKICAgICAgICAgbV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+
ZGlkRmFpbChXZWJGaWxlRXJyb3JBYm9ydCk7CkBAIC0zMzcsOSArMzM4LDkgQEAgdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFk
KGNvbnN0IFdlYlZlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIGVudHJpZXMsIGhhc01vcmUpLCBtb2RlKTsKIH0KIAotV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShX
ZWJXb3JrZXJCYXNlKiB3b3JrZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKK1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uo
V2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzKiBjYWxsYmFja3MpCiAgICAgOiBXb3JrZXJDb250ZXh0OjpPYnNlcnZlcihzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCi0gICAgLCBtX3dvcmtl
cih3b3JrZXIpCisgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQog
ICAgICwgbV93b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX2Nh
bGxiYWNrc09uV29ya2VyVGhyZWFkKGNhbGxiYWNrcykKIHsKQEAgLTM5OSw5ICs0MDAsOSBAQCB2
b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJ1blRhc2tPbldvcmtlclRocmVh
ZChXZWJDb3JlOjpTY3JpcHRFeGVjdQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7Ci0gICAgQVNTRVJUKG1fd29ya2VyKTsK
KyAgICBBU1NFUlQobV93b3JrZXJMb2FkZXJQcm94eSk7CiAgICAgQVNTRVJUKG1fd29ya2VyQ29u
dGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZydW5UYXNrT25NYWluVGhyZWFkLCBSZWZQdHI8
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4odGhpcykucmVsZWFzZSgpLCB0YXNrKSk7
CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxi
YWNrVGFzaygmcnVuVGFza09uTWFpblRocmVhZCwgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U+KHRoaXMpLnJlbGVhc2UoKSwgdGFzaykpOwogfQogCiB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om1heVBvc3RUYXNrVG9Xb3JrZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBA
IC00MTMsOCArNDE0LDggQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpt
YXlQb3N0VGFza1RvV29ya2VyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3UKICAgICAvLyBpcyB2ZXJ5
IGltcG9ydGFudCwgdG8gZW5zdXJlIHRoYXQgdGhlIG1fbXV0ZXggaXMgc3RpbGwgdmFsaWQgd2hl
biBpdCBnZXRzIHVubG9ja2VkLikKICAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4gYnJpZGdlID0gYWRvcHRSZWYodGhpcyk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOwotICAgIGlmIChtX3dvcmtlcikKLSAgICAgICAgbV93b3JrZXItPnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldvcmtl
clRocmVhZCwgYnJpZGdlLCB0YXNrKSwgbW9kZSk7CisgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJv
eHkpCisgICAgICAgIG1fd29ya2VyTG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldvcmtlclRocmVhZCwgYnJpZGdl
LCB0YXNrKSwgbW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UuaAppbmRleCA0ZWM0NTAzLi5iYjQ4NDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5oCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBXb3Jr
ZXJMb2FkZXJQcm94eTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEFzeW5jRmls
ZVN5c3RlbTsKQEAgLTUwLDcgKzU0LDYgQEAgY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxs
YmFja3M7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKIGNsYXNzIFdl
YkNvbW1vbldvcmtlckNsaWVudDsKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7Ci1jbGFz
cyBXZWJXb3JrZXJCYXNlOwogc3RydWN0IFdlYkZpbGVJbmZvOwogc3RydWN0IFdlYkZpbGVTeXN0
ZW1FbnRyeTsKIApAQCAtNzgsOSArODEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3AoKTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+
IGNyZWF0ZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBj
cmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uod29ya2VyLCB3b3JrZXJDb250ZXh0LCBj
YWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKHdvcmtlckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFj
a3MpKTsKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFu
ZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBt
dXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KQEAgLTEwNCw3ICsxMDcsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0IFdlYlZl
Y3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiwgYm9vbCBoYXNNb3JlLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwogCiBwcml2YXRlOgotICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2Vi
V29ya2VyQmFzZSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzKik7CisgICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBNZXRob2RzIHRoYXQgYXJlIHRv
IGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVT
eXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNv
bW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBi
b29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CkBAIC0xMzUsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1heVBvc3RU
YXNrVG9Xb3JrZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAgIE11dGV4IG1fbXV0ZXg7Ci0gICAgV2Vi
V29ya2VyQmFzZSogbV93b3JrZXI7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1f
d29ya2VyTG9hZGVyUHJveHk7CiAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
bV93b3JrZXJDb250ZXh0OwogCiAgICAgLy8gVGhpcyBpcyBzZWxmLWRlc3RydWN0ZWQgYW5kIG11
c3QgYmUgZmlyZWQgb24gdGhlIHdvcmtlciB0aHJlYWQuCg==
</data>
<flag name="review"
          id="99162"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103528</attachid>
            <date>2011-08-10 13:37:24 -0700</date>
            <delta_ts>2011-08-10 13:42:28 -0700</delta_ts>
            <desc>Extra feedback</desc>
            <filename>65997.patch</filename>
            <type>text/plain</type>
            <size>29941</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTI3MjgzOS4uMTExYjBjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMS0wOC0xMCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAgICAgW0Nocm9taXVtXSBE
ZWNvdXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvd0ZpbGVTeXN0ZW0sIG9wZW5GaWxlU3lzdGVt
IGFuZCBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk3LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgYWxsb3dGaWxlU3lzdGVtLCBvcGVuRmlsZVN5c3Rl
bSBhbmQgYWxsb3dEYXRhYmFzZSBmcm9tCisgICAgICAgIFdlYldvcmtlckJhc2UgdG8gcmVzcGVj
dGl2ZWx5IExvY2FsRmlsZVN5c3RlbUNocm9taXVtIGFuZCBEYXRhYmFzZU9ic2VydmVyLCAKKyAg
ICAgICAgcGFyYW1ldGVyaXppbmcgdGhlbSB3aXRoIHJlbGV2YW50IGRhdGEgZnJvbSBXZWJXb3Jr
ZXIuCisKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6IE1vdmUgYWxsb3dEYXRh
YmFzZSBmcm9tIFdlYldvcmtlckJhc2UgYW5kIHVwZGF0ZSB0aGUgY2FsbGVyLgorICAgICAgICAo
V2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmNhbmNlbCk6CisgICAgICAg
IChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpyZXN1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6c2lnbmFsQ29tcGxldGVk
KToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OkFsbG93
RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFz
ZU1haW5UaHJlYWRCcmlkZ2U6OmFsbG93RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6
QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6YWxsb3dEYXRhYmFzZUZvcldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0xvY2FsRmls
ZVN5c3RlbUNocm9taXVtLmNwcDogTW92ZSBhbGxvd0ZpbGVTeXN0ZW0gYW5kIG9wZW5GaWxlU3lz
dGVtIGZyb20gV2ViV29ya2VyQmFzZSBhbmQgdXBkYXRlIHRoZSBjYWxsZXIuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6CisgICAgICAgICogc3JjL1dlYldvcmtlckJh
c2UuY3BwOiBNb3ZlIGFsbG93RmlsZVN5c3RlbSwgb3BlbkZpbGVTeXN0ZW0gYW5kIGFsbG93RGF0
YWJhc2UgdG8gTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0gYW5kIERhdGFiYXNlT2JzZXJ2ZXIgcmVz
cC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJCYXNlOjp3ZWJWaWV3KToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5jcHA6IEdlbmVyYWxpemVkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UgdG8gd29yayBvbiBXb3JrZXJMb2FkZXJQcm94eSwgbm90IG9uIFdlYldvcmtlckJhc2UuCisg
ICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3ApOgor
ICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAg
KFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6bWF5UG9zdFRhc2tUb1dv
cmtlcik6CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRl
KToKKwogMjAxMS0wOC0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGxlZCBERVBTIDk1ODEzOjk2MDA5IHRvIHBpY2sgZGF0
YSB1cmwgdGltaW5nIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RhdGFiYXNlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJh
c2VPYnNlcnZlci5jcHAKaW5kZXggYWVkOTdkMC4uM2E2ZWJlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBA
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNr
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
V2ViRnJhbWVDbGllbnQuaCIKQEAgLTQ1LDEwICs0OCwxMDggQEAKICNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJT
Y3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKK25hbWVzcGFjZSB7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
c3RhdGljIGNvbnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNlTW9k
ZSI7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUgcmVzdWx0IG9mIHRoZSBX
ZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlCisvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBj
b250ZXh0LgorY2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4g
Y3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29u
c3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uo
d29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9pZCBjYW5jZWwoKQorICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3dvcmtl
ckxvYWRlclByb3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52
b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCBy
ZXN1bHQpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAg
ICAgIGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAgbV93b3JrZXJMb2FkZXJQ
cm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksIHJlc3VsdCksIAorICAgICAgICAgICAgICAgIG1fbW9kZSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6Oldv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1v
ZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICAgICAgOiBtX3dvcmtlckxvYWRlclBy
b3h5KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAg
ICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICAg
ICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0RhdGFiYXNlVGFzaywgV2ViQ29yZTo6QWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGllbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZnJhbWUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwg
ZXN0aW1hdGVkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
YWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKKyAg
ICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRh
YmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoZmFsc2UpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+
IGJyaWRnZSwgYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBicmlkZ2UtPm1fcmVzdWx0ID0g
cmVzdWx0OworICAgIH0KKworICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgTXV0ZXggbV9tdXRleDsK
KyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsKKyAg
ICBXVEY6OlN0cmluZyBtX21vZGU7Cit9OworCitib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIo
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUpCit7CisgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJv
bGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRy
b2xsZXJGb3JDb250ZXh0KCk7CisgICAgV2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJU
aHJlYWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOworICAgIFdlYkNv
cmU6OldvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAgJndvcmtl
clRocmVhZC0+d29ya2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBt
b2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IGFs
bG93RGF0YWJhc2VNb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3Au
Y3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlPiBicmlkZ2UgPSBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdv
cmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBTdHJpbmcobmFtZSks
IFN0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRlZFNpemUpOworCisgICAgLy8gRWl0aGVyIHRo
ZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAgICBpZiAo
cnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVy
bWluYXRlZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7Cit9CisKKworI2VuZGlm
CisKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNh
bkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQpAQCAtNjYsNyArMTY3LDcgQEAgYm9vbCBEYXRh
YmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXQKICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0
YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICAg
ICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQt
PnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAgICAgICBXZWJXb3JrZXJCYXNlKiB3
ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkp
OwotICAgICAgICByZXR1cm4gd2ViV29ya2VyLT5hbGxvd0RhdGFiYXNlKDAsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICAgICAgcmV0dXJuIGFsbG93RGF0YWJhc2VGb3JX
b3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2ViV29ya2VyLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiAjZWxzZQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDk2NmNi
ZGMuLmNhMTNjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2Fs
RmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9M
b2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCIKQEAgLTQ5LDYgKzUw
LDcgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckltcGwu
aCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNjksNiArNzEsMTE3IEBAIGVudW0gQ3JlYXRpb25GbGFn
IHsKICAgICBDcmVhdGVJZk5vdFByZXNlbnQKIH07CiAKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
CitzdGF0aWMgY29uc3QgY2hhciBhbGxvd0ZpbGVTeXN0ZW1Nb2RlW10gPSAiYWxsb3dGaWxlU3lz
dGVtTW9kZSI7CitzdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVu
RmlsZVN5c3RlbU1vZGUiOworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcm91dGUgdGhlIHJl
c3VsdCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxsb3dGaWxlU3lzdGVtCisvLyBjYWxsIGJhY2sg
dG8gdGhlIHdvcmtlciBjb250ZXh0LgorY2xhc3MgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJy
aWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhy
ZWFkQnJpZGdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lz
dGVtTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3
b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRlclByb3h5LCBtb2Rl
LCBjb21tb25DbGllbnQpKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnZv
a2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICB2b2lkIGNhbmNlbCgpCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1fd29ya2VyTG9hZGVy
UHJveHkgPSAwOworICAgIH0KKworICAgIGJvb2wgcmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3Jlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIG9u
IHRoZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIHNpZ25hbENvbXBsZXRlZChib29sIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYg
KG1fd29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgICAgICBtX3dvcmtlckxvYWRlclByb3h5LT5w
b3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVz
dWx0KSwgbV9tb2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQWxsb3dGaWxlU3lzdGVtTWFp
blRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJv
eHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCkKKyAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5
KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAgICAgICAgV2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZhbGxvd0ZpbGVTeXN0ZW1UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVu
dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyh0aGlzKSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3RlbVRhc2so
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVh
ZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKKyAgICAg
ICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dGaWxlU3lz
dGVtKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRl
ZChmYWxzZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGlkQ29tcGxldGUoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0
ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVzdWx0KQorICAgIHsKKyAgICAgICAg
YnJpZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG1fcmVzdWx0Owor
ICAgIE11dGV4IG1fbXV0ZXg7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29y
a2VyTG9hZGVyUHJveHk7CisgICAgV1RGOjpTdHJpbmcgbV9tb2RlOworfTsKKworYm9vbCBhbGxv
d0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQp
Cit7CisgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CisgICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOwor
ICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAgJndvcmtl
clRocmVhZC0+d29ya2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBt
b2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IGFs
bG93RmlsZVN5c3RlbU1vZGU7CisgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9v
cC5jcmVhdGVVbmlxdWVJZCgpKSk7CisKKyAgICBSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRo
cmVhZEJyaWRnZT4gYnJpZGdlID0gQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZTo6Y3Jl
YXRlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQpOworCisgICAgLy8gRWl0
aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAg
ICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1
ZXVlVGVybWluYXRlZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7Cit9CisKK3Zv
aWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25D
bGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMp
Cit7CisgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CisgICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOwor
ICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAgJndvcmtl
clRocmVhZC0+d29ya2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBt
b2RlIGZvciB0aGlzIG9wZW5GaWxlU3lzdGVtIGNhbGwuCisgICAgU3RyaW5nIG1vZGUgPSBvcGVu
RmlsZVN5c3RlbU1vZGU7CisgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5j
cmVhdGVVbmlxdWVJZCgpKSk7CisKKyAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4gYnJpZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRl
KHdvcmtlckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpOworICAgIGJyaWRn
ZS0+cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKGNvbW1vbkNsaWVudCwgdHlwZSwgc2l6
ZSwgY3JlYXRlLCBtb2RlKTsKKworICAgIGlmIChzeW5jaHJvbm91cykgeworICAgICAgICBpZiAo
cnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVy
bWluYXRlZCkKKyAgICAgICAgICAgIGJyaWRnZS0+c3RvcCgpOworICAgIH0KK30KKworI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQorCiB9IC8vIG5hbWVzcGFjZQogCiBzdGF0aWMgdm9pZCBvcGVu
RmlsZVN5c3RlbU5vdEFsbG93ZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC05MywxMCArMjA2LDEwIEBA
IHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29y
a2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAg
ICAgICAgaWYgKCF3ZWJXb3JrZXItPmFsbG93RmlsZVN5c3RlbSgpKQorICAgICAgICBpZiAoIWFs
bG93RmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpKSkKICAgICAg
ICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgd2ViV29y
a2VyLT5vcGVuRmlsZVN5c3RlbUZvcldvcmtlcihzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpU
eXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25v
dXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcAppbmRl
eCBkNjE4NjcyLi41NzY3NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmNwcApAQCAtNDksOCArNDksNyBAQAogI2luY2x1ZGUgIldlYldvcmtlckNsaWVu
dC5oIgogCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCIKLSNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC02MCwxMzQgKzU5LDYgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotc3RhdGljIGNvbnN0
IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNlTW9kZSI7Ci1zdGF0aWMg
Y29uc3QgY2hhciBhbGxvd0ZpbGVTeXN0ZW1Nb2RlW10gPSAiYWxsb3dGaWxlU3lzdGVtTW9kZSI7
Ci1zdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3Rl
bU1vZGUiOwotCi1uYW1lc3BhY2UgewotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcm91dGUg
dGhlIHJlc3VsdCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxsb3dEYXRhYmFzZQotLy8gY2FsbCBi
YWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KLWNsYXNzIEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFz
ZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKHdvcmtl
ciwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnZva2VkIG9uIHRo
ZSB3b3JrZXIgY29udGV4dC4KLSAgICB2b2lkIGNhbmNlbCgpCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIG1fd29ya2VyID0gMDsKLSAgICB9Ci0K
LSAgICBib29sIHJlc3VsdCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCByZXN1bHQpCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgICAgIGlmIChtX3dvcmtlcikKLSAgICAgICAg
ICAgIG1fd29ya2VyLT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCi0gICAgICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSwgcmVzdWx0KSwgbV9tb2RlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQWxs
b3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViV29ya2VyQmFzZSogd29ya2VyLCBjb25zdCBX
VEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgICAgICA6IG1f
d29ya2VyKHdvcmtlcikKLSAgICAgICAgLCBtX21vZGUobW9kZSkKLSAgICB7Ci0gICAgICAgIHdv
cmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZhbGxvd0RhdGFiYXNlVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25D
bGllbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoZnJhbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhuYW1l
KSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFj
b21tb25DbGllbnQpCi0gICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1v
bkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVzdWx0KQotICAgIHsKLSAgICAgICAgYnJp
ZGdlLT5tX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIG1fcmVzdWx0OwotICAg
IE11dGV4IG1fbXV0ZXg7Ci0gICAgV2ViV29ya2VyQmFzZSogbV93b3JrZXI7Ci0gICAgV1RGOjpT
dHJpbmcgbV9tb2RlOwotfTsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJvdXRlIHRoZSBy
ZXN1bHQgb2YgdGhlIFdlYldvcmtlckJhc2U6OmFsbG93RmlsZVN5c3RlbQotLy8gY2FsbCBiYWNr
IHRvIHRoZSB3b3JrZXIgY29udGV4dC4KLWNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRC
cmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRo
cmVhZEJyaWRnZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5
c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIGNvbnN0
IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dGaWxlU3lzdGVtTWFpblRo
cmVhZEJyaWRnZSh3b3JrZXIsIG1vZGUsIGNvbW1vbkNsaWVudCkpOwotICAgIH0KLQotICAgIC8v
IFRoZXNlIG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdvcmtlciBjb250ZXh0LgotICAgIHZv
aWQgY2FuY2VsKCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
LSAgICAgICAgbV93b3JrZXIgPSAwOwotICAgIH0KLQotICAgIGJvb2wgcmVzdWx0KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBp
cyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lkIHNpZ25hbENvbXBsZXRlZChi
b29sIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
LSAgICAgICAgaWYgKG1fd29ya2VyKQotICAgICAgICAgICAgbV93b3JrZXItPnBvc3RUYXNrRm9y
TW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCByZXN1bHQpLCBtX21v
ZGUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJp
ZGdlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQotICAgICAgICA6IG1fd29ya2VyKHdvcmtl
cikKLSAgICAgICAgLCBtX21vZGUobW9kZSkKLSAgICB7Ci0gICAgICAgIHdvcmtlci0+ZGlzcGF0
Y2hUYXNrVG9NYWluVGhyZWFkKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxv
d0ZpbGVTeXN0ZW1UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVudCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlz
KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3RlbVRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRn
ZT4gYnJpZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFjb21tb25DbGllbnQpCi0gICAgICAgICAg
ICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dGaWxlU3lzdGVt
KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFp
blRocmVhZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGJyaWRn
ZS0+bV9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfQotCi0gICAgYm9vbCBtX3Jlc3VsdDsKLSAgICBN
dXRleCBtX211dGV4OwotICAgIFdlYldvcmtlckJhc2UqIG1fd29ya2VyOwotICAgIFdURjo6U3Ry
aW5nIG1fbW9kZTsKLX07Ci0KLX0KLQogLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhl
IG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0aWMKIC8vIHZhbHVl
cyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhp
cyBpcyBiZWNhdXNlIGluCiAvLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFu
eSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cwpAQCAtMjg1LDcwICsxNTYsNiBA
QCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogV2ViV29ya2VyQmFzZTo6Y3JlYXRlQXBwbGljYXRp
b25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZQogICAgIHJldHVybiAwOwogfQogCi1ib29sIFdlYldv
cmtlckJhc2U6OmFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKLXsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gbV93b3JrZXJUaHJlYWQtPnJ1bkxv
b3AoKTsKLSAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKLSAgICBXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwotCi0gICAgLy8g
Q3JlYXRlIGEgdW5pcXVlIG1vZGUganVzdCBmb3IgdGhpcyBzeW5jaHJvbm91cyBjYWxsLgotICAg
IFN0cmluZyBtb2RlID0gYWxsb3dEYXRhYmFzZU1vZGU7Ci0gICAgbW9kZS5hcHBlbmQoU3RyaW5n
OjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0KLSAgICBSZWZQdHI8QWxsb3dE
YXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlOjpjcmVhdGUodGhpcywgbW9kZSwgY29tbW9uQ2xpZW50KCksIG1fd2ViVmlldy0+bWFp
bkZyYW1lKCksIFN0cmluZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6
ZSk7Ci0KLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0
cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBt
b2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7Ci0gICAgICAgIGJyaWRnZS0+Y2FuY2Vs
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnJpZGdlLT5y
ZXN1bHQoKTsKLX0KLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotYm9vbCBXZWJXb3JrZXJC
YXNlOjphbGxvd0ZpbGVTeXN0ZW0oKQotewotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBt
X3dvcmtlclRocmVhZC0+cnVuTG9vcCgpOwotICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgp
OwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJD
b250ZXh0KCk7Ci0KLSAgICAvLyBDcmVhdGUgYSB1bmlxdWUgbW9kZSBqdXN0IGZvciB0aGlzIHN5
bmNocm9ub3VzIGNhbGwuCi0gICAgU3RyaW5nIG1vZGUgPSBhbGxvd0ZpbGVTeXN0ZW1Nb2RlOwot
ICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkp
OwotCi0gICAgUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9
IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U6OmNyZWF0ZSh0aGlzLCBtb2RlLCBjb21t
b25DbGllbnQoKSk7Ci0KLSAgICAvLyBFaXRoZXIgdGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUg
cXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgotICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJD
b250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7Ci0gICAgICAgIGJyaWRn
ZS0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YnJpZGdlLT5yZXN1bHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpvcGVuRmlsZVN5c3Rl
bUZvcldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9u
b3VzKQotewotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVu
TG9vcCgpOwotICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOwotICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7Ci0KLSAgICAv
LyBDcmVhdGUgYSB1bmlxdWUgbW9kZSBmb3IgdGhpcyBvcGVuRmlsZVN5c3RlbSBjYWxsLgotICAg
IFN0cmluZyBtb2RlID0gb3BlbkZpbGVTeXN0ZW1Nb2RlOwotICAgIG1vZGUuYXBwZW5kKFN0cmlu
Zzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOwotCi0gICAgUmVmUHRyPFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OmNyZWF0ZSh0aGlzLCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpOwotICAg
IGJyaWRnZS0+cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKGNvbW1vbkNsaWVudCgpLCB0
eXBlLCBzaXplLCBjcmVhdGUsIG1vZGUpOwotCi0gICAgaWYgKHN5bmNocm9ub3VzKSB7Ci0gICAg
ICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdl
UXVldWVUZXJtaW5hdGVkKQotICAgICAgICAgICAgYnJpZGdlLT5zdG9wKCk7Ci0gICAgfQotfQot
I2VuZGlmCi0KIC8vIFdvcmtlck9iamVjdFByb3h5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgV2ViV29ya2VyQmFzZTo6
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gbWVzc2FnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldv
cmtlckJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApp
bmRleCA5ZWZjZTE1Li5iMGU1MWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJXb3JrZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VyQmFzZS5oCkBAIC04OSwyMSArODksMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJjZSopOwogICAgIHZp
cnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0
KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKTsKIAotICAgIC8vIENv
bnRyb2xzIHdoZXRoZXIgYWNjZXNzIHRvIFdlYiBEYXRhYmFzZXMgaXMgYWxsb3dlZCBmb3IgdGhp
cyB3b3JrZXIuCi0gICAgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOwotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIC8vIENvbnRyb2xz
IHdoZXRoZXIgYWNjZXNzIHRvIEZpbGUgU3lzdGVtIGlzIGFsbG93ZWQgZm9yIHRoaXMgd29ya2Vy
LgotICAgIGJvb2wgYWxsb3dGaWxlU3lzdGVtKCk7Ci0gICAgdm9pZCBvcGVuRmlsZVN5c3RlbUZv
cldvcmtlcihXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqLCBib29sIHN5bmNocm9ub3VzKTsKLSNlbmRpZgotCiAg
ICAgLy8gRXhlY3V0ZXMgdGhlIGdpdmVuIHRhc2sgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0
YXRpYyB2b2lkIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKIAorICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBj
b25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKworICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFdl
YldvcmtlckNsaWVudCogY2xpZW50KCkgPSAwOwotICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAKICAgICB2b2lkIHNldFdvcmtlclRocmVhZChQ
YXNzUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fd29ya2VyVGhyZWFk
ID0gdGhyZWFkOyB9CiAgICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQoKSB7
IHJldHVybiBtX3dvcmtlclRocmVhZC5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNw
cAppbmRleCBmYzA3NGFkLi4xN2M3NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcApA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYldvcmtl
ckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTE0Nyw3
ICsxNDgsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQog
ewogICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgbV93b3JrZXIgPSAwOworICAgIG1fd29y
a2VyTG9hZGVyUHJveHkgPSAwOwogCiAgICAgaWYgKG1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQp
IHsKICAgICAgICAgbV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlkRmFpbChXZWJGaWxlRXJy
b3JBYm9ydCk7CkBAIC0zMzcsOSArMzM4LDkgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0IFdlYlZlY3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGVu
dHJpZXMsIGhhc01vcmUpLCBtb2RlKTsKIH0KIAotV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJXb3JrZXJCYXNlKiB3b3Jr
ZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKK1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9h
ZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCiAg
ICAgOiBXb3JrZXJDb250ZXh0OjpPYnNlcnZlcihzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCi0gICAgLCBtX3dvcmtlcih3b3JrZXIpCisgICAgLCBt
X3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJDb250
ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX2NhbGxiYWNrc09uV29ya2VyVGhy
ZWFkKGNhbGxiYWNrcykKIHsKQEAgLTM5OSw5ICs0MDAsOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OnJ1blRhc2tPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRF
eGVjdQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2spCiB7Ci0gICAgQVNTRVJUKG1fd29ya2VyKTsKKyAgICBBU1NFUlQobV93b3Jr
ZXJMb2FkZXJQcm94eSk7CiAgICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwotICAgIG1fd29ya2VyLT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZydW5UYXNrT25NYWluVGhyZWFkLCBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZT4odGhpcykucmVsZWFzZSgpLCB0YXNrKSk7CisgICAgV2ViV29ya2VyQmFz
ZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcnVuVGFza09u
TWFpblRocmVhZCwgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+KHRoaXMp
LnJlbGVhc2UoKSwgdGFzaykpOwogfQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6Om1heVBvc3RUYXNrVG9Xb3JrZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC00MTMsOCArNDE0LDggQEAg
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjptYXlQb3N0VGFza1RvV29ya2Vy
KFBhc3NPd25QdHI8U2NyaXB0RXhlY3UKICAgICAvLyBpcyB2ZXJ5IGltcG9ydGFudCwgdG8gZW5z
dXJlIHRoYXQgdGhlIG1fbXV0ZXggaXMgc3RpbGwgdmFsaWQgd2hlbiBpdCBnZXRzIHVubG9ja2Vk
LikKICAgICBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0g
YWRvcHRSZWYodGhpcyk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgIGlm
IChtX3dvcmtlcikKLSAgICAgICAgbV93b3JrZXItPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29u
dGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRhc2tPbldvcmtlclRocmVhZCwgYnJpZGdlLCB0
YXNrKSwgbW9kZSk7CisgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgIG1fd29y
a2VyTG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxs
YmFja1Rhc2soJnJ1blRhc2tPbldvcmtlclRocmVhZCwgYnJpZGdlLCB0YXNrKSwgbW9kZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAppbmRleCA0
ZWM0NTAzLi5iYjQ4NDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCkBAIC00Myw2ICs0Mywx
MCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBXb3JrZXJMb2FkZXJQcm94eTsKK30K
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEFzeW5jRmlsZVN5c3RlbTsKQEAgLTUwLDcg
KzU0LDYgQEAgY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M7CiBjbGFzcyBUaHJl
YWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKIGNsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVu
dDsKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7Ci1jbGFzcyBXZWJXb3JrZXJCYXNlOwog
c3RydWN0IFdlYkZpbGVJbmZvOwogc3RydWN0IFdlYkZpbGVTeXN0ZW1FbnRyeTsKIApAQCAtNzgs
OSArODEsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJXb3JrZXJC
YXNlKiB3b3JrZXIsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRl
eHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29y
a2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFj
a3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2Uod29ya2VyLCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdv
cmtlckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpKTsKICAgICB9CiAKICAg
ICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwg
cmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0
aGUgd29ya2VyIHRocmVhZC4KQEAgLTEwNCw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVt
RW50cnk+JiwgYm9vbCBoYXNNb3JlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiBwcml2YXRlOgot
ICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSosIFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7Cisg
ICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzKik7CiAKICAgICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUg
bWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCos
IFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CkBAIC0xMzUs
NyArMTM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1heVBvc3RUYXNrVG9Xb3JrZXIoUGFzc093
blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKIAogICAgIE11dGV4IG1fbXV0ZXg7Ci0gICAgV2ViV29ya2VyQmFzZSogbV93b3Jr
ZXI7CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7
CiAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV93b3JrZXJDb250ZXh0Owog
CiAgICAgLy8gVGhpcyBpcyBzZWxmLWRlc3RydWN0ZWQgYW5kIG11c3QgYmUgZmlyZWQgb24gdGhl
IHdvcmtlciB0aHJlYWQuCg==
</data>
<flag name="review"
          id="99169"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103530</attachid>
            <date>2011-08-10 13:42:28 -0700</date>
            <delta_ts>2011-08-10 15:53:39 -0700</delta_ts>
            <desc>Empty lines</desc>
            <filename>65997.patch</filename>
            <type>text/plain</type>
            <size>29937</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTI3MjgzOS4uMTExYjBjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMS0wOC0xMCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAgICAgW0Nocm9taXVtXSBE
ZWNvdXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvd0ZpbGVTeXN0ZW0sIG9wZW5GaWxlU3lzdGVt
IGFuZCBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk3LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgYWxsb3dGaWxlU3lzdGVtLCBvcGVuRmlsZVN5c3Rl
bSBhbmQgYWxsb3dEYXRhYmFzZSBmcm9tCisgICAgICAgIFdlYldvcmtlckJhc2UgdG8gcmVzcGVj
dGl2ZWx5IExvY2FsRmlsZVN5c3RlbUNocm9taXVtIGFuZCBEYXRhYmFzZU9ic2VydmVyLCAKKyAg
ICAgICAgcGFyYW1ldGVyaXppbmcgdGhlbSB3aXRoIHJlbGV2YW50IGRhdGEgZnJvbSBXZWJXb3Jr
ZXIuCisKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6IE1vdmUgYWxsb3dEYXRh
YmFzZSBmcm9tIFdlYldvcmtlckJhc2UgYW5kIHVwZGF0ZSB0aGUgY2FsbGVyLgorICAgICAgICAo
V2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmNhbmNlbCk6CisgICAgICAg
IChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpyZXN1bHQpOgorICAgICAg
ICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6c2lnbmFsQ29tcGxldGVk
KToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OkFsbG93
RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFz
ZU1haW5UaHJlYWRCcmlkZ2U6OmFsbG93RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6
QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OmRpZENvbXBsZXRlKToKKyAgICAgICAgKFdl
YktpdDo6YWxsb3dEYXRhYmFzZUZvcldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0xvY2FsRmls
ZVN5c3RlbUNocm9taXVtLmNwcDogTW92ZSBhbGxvd0ZpbGVTeXN0ZW0gYW5kIG9wZW5GaWxlU3lz
dGVtIGZyb20gV2ViV29ya2VyQmFzZSBhbmQgdXBkYXRlIHRoZSBjYWxsZXIuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6CisgICAgICAgICogc3JjL1dlYldvcmtlckJh
c2UuY3BwOiBNb3ZlIGFsbG93RmlsZVN5c3RlbSwgb3BlbkZpbGVTeXN0ZW0gYW5kIGFsbG93RGF0
YWJhc2UgdG8gTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0gYW5kIERhdGFiYXNlT2JzZXJ2ZXIgcmVz
cC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJCYXNlOjp3ZWJWaWV3KToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5jcHA6IEdlbmVyYWxpemVkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UgdG8gd29yayBvbiBXb3JrZXJMb2FkZXJQcm94eSwgbm90IG9uIFdlYldvcmtlckJhc2UuCisg
ICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3ApOgor
ICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAg
KFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6bWF5UG9zdFRhc2tUb1dv
cmtlcik6CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRl
KToKKwogMjAxMS0wOC0xMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGxlZCBERVBTIDk1ODEzOjk2MDA5IHRvIHBpY2sgZGF0
YSB1cmwgdGltaW5nIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RhdGFiYXNlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJh
c2VPYnNlcnZlci5jcHAKaW5kZXggYWVkOTdkMC4uNTFjNDhkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKQEAgLTM0LDggKzM0LDExIEBA
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNr
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
V2ViRnJhbWVDbGllbnQuaCIKQEAgLTQ1LDEwICs0OCwxMDcgQEAKICNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJT
Y3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKK25hbWVzcGFjZSB7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKwor
c3RhdGljIGNvbnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNlTW9k
ZSI7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUgcmVzdWx0IG9mIHRoZSBX
ZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlCisvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBj
b250ZXh0LgorY2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4g
Y3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29u
c3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uo
d29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9pZCBjYW5jZWwoKQorICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3dvcmtl
ckxvYWRlclByb3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52
b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCBy
ZXN1bHQpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAg
ICAgIGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAgbV93b3JrZXJMb2FkZXJQ
cm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksIHJlc3VsdCksIAorICAgICAgICAgICAgICAgIG1fbW9kZSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6Oldv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1v
ZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICAgICAgOiBtX3dvcmtlckxvYWRlclBy
b3h5KHdvcmtlckxvYWRlclByb3h5KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAg
ICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICAg
ICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZhbGxvd0RhdGFiYXNlVGFzaywgV2ViQ29yZTo6QWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGllbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZnJhbWUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwg
ZXN0aW1hdGVkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
YWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKKyAg
ICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRh
YmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoZmFsc2UpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+
IGJyaWRnZSwgYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBicmlkZ2UtPm1fcmVzdWx0ID0g
cmVzdWx0OworICAgIH0KKworICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgTXV0ZXggbV9tdXRleDsK
KyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsKKyAg
ICBXVEY6OlN0cmluZyBtX21vZGU7Cit9OworCitib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIo
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUpCit7CisgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJv
bGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRy
b2xsZXJGb3JDb250ZXh0KCk7CisgICAgV2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJU
aHJlYWQqIHdvcmtlclRocmVhZCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpOworICAgIFdlYkNv
cmU6OldvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKKyAg
ICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAgJndvcmtl
clRocmVhZC0+d29ya2VyTG9hZGVyUHJveHkoKTsKKworICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBt
b2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IGFs
bG93RGF0YWJhc2VNb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3Au
Y3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlPiBicmlkZ2UgPSBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHdv
cmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBTdHJpbmcobmFtZSks
IFN0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRlZFNpemUpOworCisgICAgLy8gRWl0aGVyIHRo
ZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KKyAgICBpZiAo
cnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVy
bWluYXRlZCkgeworICAgICAgICBicmlkZ2UtPmNhbmNlbCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7Cit9CisKKyNlbmRpZgor
Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBEYXRhYmFzZU9ic2VydmVyOjpjYW5F
c3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKQEAgLTY2LDcgKzE2Niw3IEBAIGJvb2wgRGF0YWJh
c2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAg
IFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50
aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAgICAgICAgV2ViV29ya2VyQmFzZSogd2Vi
V29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsK
LSAgICAgICAgcmV0dXJuIHdlYldvcmtlci0+YWxsb3dEYXRhYmFzZSgwLCBuYW1lLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29y
a2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+d2ViVmlldygpLT5tYWlu
RnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwogI2Vsc2UKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA5NjZjYmRj
Li5iMzNjZTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9j
YWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRmls
ZVN5c3RlbUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5o
IgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCkBAIC00OSw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKICNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgi
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTY5LDYgKzcxLDExNiBAQCBlbnVtIENyZWF0aW9uRmxhZyB7
CiAgICAgQ3JlYXRlSWZOb3RQcmVzZW50CiB9OwogCisjaWYgRU5BQkxFKFdPUktFUlMpCisKK3N0
YXRpYyBjb25zdCBjaGFyIGFsbG93RmlsZVN5c3RlbU1vZGVbXSA9ICJhbGxvd0ZpbGVTeXN0ZW1N
b2RlIjsKK3N0YXRpYyBjb25zdCBjaGFyIG9wZW5GaWxlU3lzdGVtTW9kZVtdID0gIm9wZW5GaWxl
U3lzdGVtTW9kZSI7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUgcmVzdWx0
IG9mIHRoZSBXZWJXb3JrZXJCYXNlOjphbGxvd0ZpbGVTeXN0ZW0KKy8vIGNhbGwgYmFjayB0byB0
aGUgd29ya2VyIGNvbnRleHQuCitjbGFzcyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRC
cmlkZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1N
YWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFs
bG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNv
bW1vbkNsaWVudCkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludm9rZWQg
b24gdGhlIHdvcmtlciBjb250ZXh0LgorICAgIHZvaWQgY2FuY2VsKCkKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV93b3JrZXJMb2FkZXJQcm94
eSA9IDA7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgb24gdGhl
IG1haW4gdGhyZWFkLgorICAgIHZvaWQgc2lnbmFsQ29tcGxldGVkKGJvb2wgcmVzdWx0KQorICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAobV93
b3JrZXJMb2FkZXJQcm94eSkKKyAgICAgICAgICAgIG1fd29ya2VyTG9hZGVyUHJveHktPnBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCByZXN1bHQp
LCBtX21vZGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhy
ZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwg
Y29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50KQorICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCisg
ICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgeworICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNw
YXRjaFRhc2tUb01haW5UaHJlYWQoCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmFs
bG93RmlsZVN5c3RlbVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29tbW9uQ2xpZW50KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRo
aXMpKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYWxsb3dGaWxlU3lzdGVtVGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJp
ZGdlPiBicmlkZ2UpCisgICAgeworICAgICAgICBpZiAoY29tbW9uQ2xpZW50KQorICAgICAgICAg
ICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0ZpbGVTeXN0ZW0o
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGZh
bHNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCByZXN1bHQpCisgICAgeworICAgICAgICBicmlk
Z2UtPm1fcmVzdWx0ID0gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgbV9yZXN1bHQ7CisgICAg
TXV0ZXggbV9tdXRleDsKKyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJM
b2FkZXJQcm94eTsKKyAgICBXVEY6OlN0cmluZyBtX21vZGU7Cit9OworCitib29sIGFsbG93Rmls
ZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKK3sK
KyAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOworICAgIFdlYkNvcmU6Oldv
cmtlclRocmVhZCogd29ya2VyVGhyZWFkID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCk7CisgICAg
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlclRocmVhZC0+cnVuTG9vcCgpOworICAgIFdl
YkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICAmd29ya2VyVGhy
ZWFkLT53b3JrZXJMb2FkZXJQcm94eSgpOworCisgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1vZGUg
anVzdCBmb3IgdGhpcyBzeW5jaHJvbm91cyBjYWxsLgorICAgIFN0cmluZyBtb2RlID0gYWxsb3dG
aWxlU3lzdGVtTW9kZTsKKyAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNy
ZWF0ZVVuaXF1ZUlkKCkpKTsKKworICAgIFJlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFk
QnJpZGdlPiBicmlkZ2UgPSBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUo
d29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCk7CisKKyAgICAvLyBFaXRoZXIg
dGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgorICAgIGlm
IChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVU
ZXJtaW5hdGVkKSB7CisgICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKK30KKwordm9pZCBv
cGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVu
dCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKK3sK
KyAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOworICAgIFdlYkNvcmU6Oldv
cmtlclRocmVhZCogd29ya2VyVGhyZWFkID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCk7CisgICAg
V29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlclRocmVhZC0+cnVuTG9vcCgpOworICAgIFdl
YkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICAmd29ya2VyVGhy
ZWFkLT53b3JrZXJMb2FkZXJQcm94eSgpOworCisgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1vZGUg
Zm9yIHRoaXMgb3BlbkZpbGVTeXN0ZW0gY2FsbC4KKyAgICBTdHJpbmcgbW9kZSA9IG9wZW5GaWxl
U3lzdGVtTW9kZTsKKyAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0
ZVVuaXF1ZUlkKCkpKTsKKworICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUod29y
a2VyTG9hZGVyUHJveHksIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7CisgICAgYnJpZGdlLT5w
b3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50LCB0eXBlLCBzaXplLCBj
cmVhdGUsIG1vZGUpOworCisgICAgaWYgKHN5bmNocm9ub3VzKSB7CisgICAgICAgIGlmIChydW5M
b29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdlUXVldWVUZXJtaW5h
dGVkKQorICAgICAgICAgICAgYnJpZGdlLT5zdG9wKCk7CisgICAgfQorfQorCisjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCisKIH0gLy8gbmFtZXNwYWNlCiAKIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtTm90QWxsb3dlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTkzLDEwICsyMDUsMTAgQEAgc3Rh
dGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQXN5bmNGaWxlU3lzdGUKICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2Vy
TG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgp
LT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIg
PSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAg
ICBpZiAoIXdlYldvcmtlci0+YWxsb3dGaWxlU3lzdGVtKCkpCisgICAgICAgIGlmICghYWxsb3dG
aWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAg
ICAgYWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB3ZWJXb3JrZXIt
Pm9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyks
IHN5bmNocm9ub3VzKTsKKyAgICAgICAgICAgIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKHdlYldv
cmtlci0+Y29tbW9uQ2xpZW50KCksIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5
cGUpLCBzaXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5
bmNocm9ub3VzKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCmluZGV4IGQ2
MTg2NzIuLjU3Njc2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuY3BwCkBAIC00OSw4ICs0OSw3IEBACiAjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50Lmgi
CiAKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5oIgotI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5o
IgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTYwLDEzNCArNTksNiBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCi1zdGF0aWMgY29uc3QgY2hh
ciBhbGxvd0RhdGFiYXNlTW9kZVtdID0gImFsbG93RGF0YWJhc2VNb2RlIjsKLXN0YXRpYyBjb25z
dCBjaGFyIGFsbG93RmlsZVN5c3RlbU1vZGVbXSA9ICJhbGxvd0ZpbGVTeXN0ZW1Nb2RlIjsKLXN0
YXRpYyBjb25zdCBjaGFyIG9wZW5GaWxlU3lzdGVtTW9kZVtdID0gIm9wZW5GaWxlU3lzdGVtTW9k
ZSI7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0aGUg
cmVzdWx0IG9mIHRoZSBXZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlCi0vLyBjYWxsIGJhY2sg
dG8gdGhlIHdvcmtlciBjb250ZXh0LgotY2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFp
blRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RGOjpT
dHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFt
ZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyLCBt
b2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSkpOwotICAgIH0KLQotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludm9rZWQgb24gdGhlIHdv
cmtlciBjb250ZXh0LgotICAgIHZvaWQgY2FuY2VsKCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgbV93b3JrZXIgPSAwOwotICAgIH0KLQotICAg
IGJvb2wgcmVzdWx0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdDsKLSAgICB9Ci0K
LSAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2
b2lkIHNpZ25hbENvbXBsZXRlZChib29sIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKLSAgICAgICAgaWYgKG1fd29ya2VyKQotICAgICAgICAgICAg
bV93b3JrZXItPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENvbXBsZXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KHRoaXMpLCByZXN1bHQpLCBtX21vZGUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIGNvbnN0IFdURjo6
U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgICAgIDogbV93b3Jr
ZXIod29ya2VyKQotICAgICAgICAsIG1fbW9kZShtb2RlKQotICAgIHsKLSAgICAgICAgd29ya2Vy
LT5kaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJmFsbG93RGF0YWJhc2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVu
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyhmcmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG5hbWUpLCBT
dHJpbmcoZGlzcGxheU5hbWUpLCBlc3RpbWF0ZWRTaXplLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UpCi0gICAgewotICAgICAgICBpZiAoIWNvbW1v
bkNsaWVudCkKLSAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xp
ZW50LT5hbGxvd0RhdGFiYXNlKGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5U
aHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCByZXN1bHQpCi0gICAgewotICAgICAgICBicmlkZ2Ut
Pm1fcmVzdWx0ID0gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgbV9yZXN1bHQ7Ci0gICAgTXV0
ZXggbV9tdXRleDsKLSAgICBXZWJXb3JrZXJCYXNlKiBtX3dvcmtlcjsKLSAgICBXVEY6OlN0cmlu
ZyBtX21vZGU7Ci19OwotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcm91dGUgdGhlIHJlc3Vs
dCBvZiB0aGUgV2ViV29ya2VyQmFzZTo6YWxsb3dGaWxlU3lzdGVtCi0vLyBjYWxsIGJhY2sgdG8g
dGhlIHdvcmtlciBjb250ZXh0LgotY2xhc3MgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRn
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFk
QnJpZGdlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVt
TWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgY29uc3QgV1RG
OjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFk
QnJpZGdlKHdvcmtlciwgbW9kZSwgY29tbW9uQ2xpZW50KSk7Ci0gICAgfQotCi0gICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCi0gICAgdm9pZCBj
YW5jZWwoKQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAg
ICAgICBtX3dvcmtlciA9IDA7Ci0gICAgfQotCi0gICAgYm9vbCByZXN1bHQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcmVzdWx0OwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGlu
dm9rZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgc2lnbmFsQ29tcGxldGVkKGJvb2wg
cmVzdWx0KQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAg
ICAgICBpZiAobV93b3JrZXIpCi0gICAgICAgICAgICBtX3dvcmtlci0+cG9zdFRhc2tGb3JNb2Rl
VG9Xb3JrZXJDb250ZXh0KAotICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlk
Q29tcGxldGUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHJlc3VsdCksIG1fbW9kZSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uo
V2ViV29ya2VyQmFzZSogd29ya2VyLCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCi0gICAgICAgIDogbV93b3JrZXIod29ya2VyKQot
ICAgICAgICAsIG1fbW9kZShtb2RlKQotICAgIHsKLSAgICAgICAgd29ya2VyLT5kaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmFsbG93Rmls
ZVN5c3RlbVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29tbW9uQ2xpZW50KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYWxsb3dGaWxlU3lzdGVtVGFzayhXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNv
bW1vbkNsaWVudCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBi
cmlkZ2UpCi0gICAgewotICAgICAgICBpZiAoIWNvbW1vbkNsaWVudCkKLSAgICAgICAgICAgIGJy
aWRnZS0+c2lnbmFsQ29tcGxldGVkKGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0ZpbGVTeXN0ZW0oKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlkQ29tcGxldGUoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhy
ZWFkQnJpZGdlPiBicmlkZ2UsIGJvb2wgcmVzdWx0KQotICAgIHsKLSAgICAgICAgYnJpZGdlLT5t
X3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIG1fcmVzdWx0OwotICAgIE11dGV4
IG1fbXV0ZXg7Ci0gICAgV2ViV29ya2VyQmFzZSogbV93b3JrZXI7Ci0gICAgV1RGOjpTdHJpbmcg
bV9tb2RlOwotfTsKLQotfQotCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUgbWFp
biB0aHJlYWQgdG8gZm9yY2UgdG8gaW5pdGlhbGl6ZSBzb21lIHN0YXRpYwogLy8gdmFsdWVzIHVz
ZWQgaW4gV2ViS2l0IGJlZm9yZSBhbnkgd29ya2VyIHRocmVhZCBpcyBzdGFydGVkLiBUaGlzIGlz
IGJlY2F1c2UgaW4KIC8vIG91ciB3b3JrZXIgcHJvY2Vzc3MsIHdlIGRvIG5vdCBydW4gYW55IFdl
YktpdCBjb2RlIGluIG1haW4gdGhyZWFkIGFuZCB0aHVzCkBAIC0yODUsNzAgKzE1Niw2IEBAIFdl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBXZWJXb3JrZXJCYXNlOjpjcmVhdGVBcHBsaWNhdGlvbkNh
Y2hlSG9zdChXZWJGcmFtZSosIFdlCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgV2ViV29ya2Vy
QmFzZTo6YWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29u
c3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQot
ewotICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgp
OwotICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOwotICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7Ci0KLSAgICAvLyBDcmVh
dGUgYSB1bmlxdWUgbW9kZSBqdXN0IGZvciB0aGlzIHN5bmNocm9ub3VzIGNhbGwuCi0gICAgU3Ry
aW5nIG1vZGUgPSBhbGxvd0RhdGFiYXNlTW9kZTsKLSAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51
bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKLQotICAgIFJlZlB0cjxBbGxvd0RhdGFi
YXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlID0gQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2U6OmNyZWF0ZSh0aGlzLCBtb2RlLCBjb21tb25DbGllbnQoKSwgbV93ZWJWaWV3LT5tYWluRnJh
bWUoKSwgU3RyaW5nKG5hbWUpLCBTdHJpbmcoZGlzcGxheU5hbWUpLCBlc3RpbWF0ZWRTaXplKTsK
LQotICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRl
cm1pbmF0ZWQuCi0gICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUp
ID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKLSAgICAgICAgYnJpZGdlLT5jYW5jZWwoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBicmlkZ2UtPnJlc3Vs
dCgpOwotfQotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi1ib29sIFdlYldvcmtlckJhc2U6
OmFsbG93RmlsZVN5c3RlbSgpCi17Ci0gICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29y
a2VyVGhyZWFkLT5ydW5Mb29wKCk7Ci0gICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJv
bGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0g
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRl
eHQoKTsKLQotICAgIC8vIENyZWF0ZSBhIHVuaXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hy
b25vdXMgY2FsbC4KLSAgICBTdHJpbmcgbW9kZSA9IGFsbG93RmlsZVN5c3RlbU1vZGU7Ci0gICAg
bW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0K
LSAgICBSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlID0gQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKHRoaXMsIG1vZGUsIGNvbW1vbkNs
aWVudCgpKTsKLQotICAgIC8vIEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1
ZSBnZXRzIHRlcm1pbmF0ZWQuCi0gICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRl
eHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpIHsKLSAgICAgICAgYnJpZGdlLT5j
YW5jZWwoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBicmlk
Z2UtPnJlc3VsdCgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6Om9wZW5GaWxlU3lzdGVtRm9y
V29ya2VyKFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMp
Ci17Ci0gICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2VyVGhyZWFkLT5ydW5Mb29w
KCk7Ci0gICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0gICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKLQotICAgIC8vIENy
ZWF0ZSBhIHVuaXF1ZSBtb2RlIGZvciB0aGlzIG9wZW5GaWxlU3lzdGVtIGNhbGwuCi0gICAgU3Ry
aW5nIG1vZGUgPSBvcGVuRmlsZVN5c3RlbU1vZGU7Ci0gICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpu
dW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Ci0KLSAgICBSZWZQdHI8V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlID0gV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6Y3JlYXRlKHRoaXMsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcyk7Ci0gICAgYnJp
ZGdlLT5wb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoY29tbW9uQ2xpZW50KCksIHR5cGUs
IHNpemUsIGNyZWF0ZSwgbW9kZSk7Ci0KLSAgICBpZiAoc3luY2hyb25vdXMpIHsKLSAgICAgICAg
aWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1
ZVRlcm1pbmF0ZWQpCi0gICAgICAgICAgICBicmlkZ2UtPnN0b3AoKTsKLSAgICB9Ci19Ci0jZW5k
aWYKLQogLy8gV29ya2VyT2JqZWN0UHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBt
ZXNzYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2Vy
QmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCmluZGV4
IDllZmNlMTUuLmIwZTUxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3Jr
ZXJCYXNlLmgKQEAgLTg5LDIxICs4OSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKik7CiAgICAgdmlydHVh
bCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2Vi
RnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopOwogCi0gICAgLy8gQ29udHJv
bHMgd2hldGhlciBhY2Nlc3MgdG8gV2ViIERhdGFiYXNlcyBpcyBhbGxvd2VkIGZvciB0aGlzIHdv
cmtlci4KLSAgICBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSk7Ci0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgLy8gQ29udHJvbHMgd2hl
dGhlciBhY2Nlc3MgdG8gRmlsZSBTeXN0ZW0gaXMgYWxsb3dlZCBmb3IgdGhpcyB3b3JrZXIuCi0g
ICAgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKTsKLSAgICB2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29y
a2VyKFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyosIGJvb2wgc3luY2hyb25vdXMpOwotI2VuZGlmCi0KICAgICAv
LyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGlj
IHZvaWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwogCisgICAgV2ViVmlldyogd2ViVmlldygpIGNvbnN0
IHsgcmV0dXJuIG1fd2ViVmlldzsgfQorCisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCgpID0gMDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgV2ViV29y
a2VyQ2xpZW50KiBjbGllbnQoKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCgpID0gMDsKIAogICAgIHZvaWQgc2V0V29ya2VyVGhyZWFkKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV93b3JrZXJUaHJlYWQgPSB0
aHJlYWQ7IH0KICAgICBXZWJDb3JlOjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCgpIHsgcmV0
dXJuIG1fd29ya2VyVGhyZWFkLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCmlu
ZGV4IGZjMDc0YWQuLjE3Yzc3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCkBAIC00
Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFz
ZS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQ
cm94eS5oIgogI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTQ3LDcgKzE0
OCw3IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6c3RvcCgpCiB7CiAg
ICAgQVNTRVJUKG1fd29ya2VyQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICBtX3dvcmtlciA9IDA7CisgICAgbV93b3JrZXJM
b2FkZXJQcm94eSA9IDA7CiAKICAgICBpZiAobV9jYWxsYmFja3NPbldvcmtlclRocmVhZCkgewog
ICAgICAgICBtX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRGYWlsKFdlYkZpbGVFcnJvckFi
b3J0KTsKQEAgLTMzNyw5ICszMzgsOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgZW50cmll
cywgaGFzTW9yZSksIG1vZGUpOwogfQogCi1Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYldvcmtlckJhc2UqIHdvcmtlciwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKICAgICA6
IFdvcmtlckNvbnRleHQ6Ok9ic2VydmVyKHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KSkKLSAgICAsIG1fd29ya2VyKHdvcmtlcikKKyAgICAsIG1fd29y
a2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQo
Y2FsbGJhY2tzKQogewpAQCAtMzk5LDkgKzQwMCw5IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6cnVuVGFza09uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gdGFzaykKIHsKLSAgICBBU1NFUlQobV93b3JrZXIpOworICAgIEFTU0VSVChtX3dvcmtlckxv
YWRlclByb3h5KTsKICAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7Ci0gICAgbV93b3JrZXItPmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFj
a1Rhc2soJnJ1blRhc2tPbk1haW5UaHJlYWQsIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlPih0aGlzKS5yZWxlYXNlKCksIHRhc2spKTsKKyAgICBXZWJXb3JrZXJCYXNlOjpk
aXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZydW5UYXNrT25NYWlu
VGhyZWFkLCBSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4odGhpcykucmVs
ZWFzZSgpLCB0YXNrKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6bWF5UG9zdFRhc2tUb1dvcmtlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKQEAgLTQxMyw4ICs0MTQsOCBAQCB2b2lk
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om1heVBvc3RUYXNrVG9Xb3JrZXIoUGFz
c093blB0cjxTY3JpcHRFeGVjdQogICAgIC8vIGlzIHZlcnkgaW1wb3J0YW50LCB0byBlbnN1cmUg
dGhhdCB0aGUgbV9tdXRleCBpcyBzdGlsbCB2YWxpZCB3aGVuIGl0IGdldHMgdW5sb2NrZWQuKQog
ICAgIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBhZG9w
dFJlZih0aGlzKTsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgaWYgKG1f
d29ya2VyKQotICAgICAgICBtX3dvcmtlci0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KGNyZWF0ZUNhbGxiYWNrVGFzaygmcnVuVGFza09uV29ya2VyVGhyZWFkLCBicmlkZ2UsIHRhc2sp
LCBtb2RlKTsKKyAgICBpZiAobV93b3JrZXJMb2FkZXJQcm94eSkKKyAgICAgICAgbV93b3JrZXJM
b2FkZXJQcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNr
VGFzaygmcnVuVGFza09uV29ya2VyVGhyZWFkLCBicmlkZ2UsIHRhc2spLCBtb2RlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCmluZGV4IDRlYzQ1
MDMuLmJiNDg0NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKQEAgLTQzLDYgKzQzLDEwIEBA
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFdvcmtlckxvYWRlclByb3h5OworfQorCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwpAQCAtNTAsNyArNTQs
NiBAQCBjbGFzcyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczsKIGNsYXNzIFRocmVhZGFi
bGVDYWxsYmFja3NCcmlkZ2VXcmFwcGVyOwogY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50Owog
Y2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNrczsKLWNsYXNzIFdlYldvcmtlckJhc2U7CiBzdHJ1
Y3QgV2ViRmlsZUluZm87CiBzdHJ1Y3QgV2ViRmlsZVN5c3RlbUVudHJ5OwogCkBAIC03OCw5ICs4
MSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlKFdlYldvcmtlckJhc2Uq
IHdvcmtlciwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2VyQ29udGV4dCwg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJM
b2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSh3b3JrZXIsIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcykpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uod29ya2Vy
TG9hZGVyUHJveHksIHdvcmtlckNvbnRleHQsIGNhbGxiYWNrcykpOwogICAgIH0KIAogICAgIC8v
IE1ldGhvZHMgdGhhdCBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIHBvc3QgYW4gaW5pdGlhbCByZXF1
ZXN0IHRhc2sgdG8gdGhlIG1haW4gdGhyZWFkLiBUaGV5IG11c3QgYmUgY2FsbGVkIG9uIHRoZSB3
b3JrZXIgdGhyZWFkLgpAQCAtMTA0LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJl
YWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRy
eT4mLCBib29sIGhhc01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKIHByaXZhdGU6Ci0gICAg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJXb3JrZXJCYXNlKiwgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKKyAgICBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5
KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqKTsKIAogICAgIC8vIE1ldGhvZHMgdGhhdCBhcmUgdG8gYmUgY2FsbGVkIG9uIHRoZSBtYWlu
IHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2Vi
RmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEzNSw3ICsx
MzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF5UG9zdFRhc2tUb1dvcmtlcihQYXNzT3duUHRy
PFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwogCiAgICAgTXV0ZXggbV9tdXRleDsKLSAgICBXZWJXb3JrZXJCYXNlKiBtX3dvcmtlcjsK
KyAgICBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsKICAg
ICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3dvcmtlckNvbnRleHQ7CiAKICAg
ICAvLyBUaGlzIGlzIHNlbGYtZGVzdHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBvbiB0aGUgd29y
a2VyIHRocmVhZC4K
</data>
<flag name="review"
          id="99172"
          type_id="1"
          status="+"
          setter="jianli"
    />
    <flag name="commit-queue"
          id="99173"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103547</attachid>
            <date>2011-08-10 15:53:39 -0700</date>
            <delta_ts>2011-08-10 16:51:43 -0700</delta_ts>
            <desc>Fixed changelog</desc>
            <filename>65997.patch</filename>
            <type>text/plain</type>
            <size>30002</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjZkYzE1ZC4uZDE3M2M5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMS0wOC0xMCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAgICAgW0Nocm9taXVtXSBE
ZWNvdXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvd0ZpbGVTeXN0ZW0sIG9wZW5GaWxlU3lzdGVt
IGFuZCBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk3LgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgaW1wbGVtZW50YXRpb24gb2YgYWxsb3dGaWxlU3lzdGVtLCBvcGVuRmlsZVN5c3Rl
bSBhbmQgYWxsb3dEYXRhYmFzZSBmcm9tCisgICAgICAgIFdlYldvcmtlckJhc2UgdG8gcmVzcGVj
dGl2ZWx5IExvY2FsRmlsZVN5c3RlbUNocm9taXVtIGFuZCBEYXRhYmFzZU9ic2VydmVyLCAKKyAg
ICAgICAgcGFyYW1ldGVyaXppbmcgdGhlbSB3aXRoIHJlbGV2YW50IGRhdGEgZnJvbSBXZWJXb3Jr
ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmlhbiBMaS4KKworICAgICAgICAqIHNyYy9EYXRh
YmFzZU9ic2VydmVyLmNwcDogTW92ZSBhbGxvd0RhdGFiYXNlIGZyb20gV2ViV29ya2VyQmFzZSBh
bmQgdXBkYXRlIHRoZSBjYWxsZXIuCisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWlu
VGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFp
blRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2U6OnJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlOjpzaWduYWxDb21wbGV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Up
OgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6YWxsb3dE
YXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJy
aWRnZTo6ZGlkQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjphbGxvd0RhdGFiYXNlRm9yV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERh
dGFiYXNlKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBNb3Zl
IGFsbG93RmlsZVN5c3RlbSBhbmQgb3BlbkZpbGVTeXN0ZW0gZnJvbSBXZWJXb3JrZXJCYXNlIGFu
ZCB1cGRhdGUgdGhlIGNhbGxlci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZW5GaWxlU3lzdGVtSGVs
cGVyKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5jcHA6IE1vdmUgYWxsb3dGaWxlU3lz
dGVtLCBvcGVuRmlsZVN5c3RlbSBhbmQgYWxsb3dEYXRhYmFzZSB0byBMb2NhbEZpbGVTeXN0ZW1D
aHJvbWl1bSBhbmQgRGF0YWJhc2VPYnNlcnZlciByZXNwLgorICAgICAgICAqIHNyYy9XZWJXb3Jr
ZXJCYXNlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckJhc2U6OndlYlZpZXcpOgorICAg
ICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDogR2VuZXJhbGl6
ZWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSB0byB3b3JrIG9uIFdvcmtlckxvYWRl
clByb3h5LCBub3Qgb24gV2ViV29ya2VyQmFzZS4KKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6c3RvcCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaXNw
YXRjaFRhc2tUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjptYXlQb3N0VGFza1RvV29ya2VyKToKKyAgICAgICAgKiBzcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUpOgorCiAyMDExLTA4LTEwICBWc2V2b2xv
ZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IFJlbW92ZSBOZXR3b3JrLmluaXRpYWxDb250ZW50U2V0IGZyb20gcHJvdG9jb2wsIHN0b3JlIHdv
cmtlcnMgY29udGVudCBvbiBiYWNrZW5kLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EYXRhYmFzZU9ic2VydmVyLmNwcAppbmRleCBhZWQ5N2QwLi41MWM0OGQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcApAQCAtMzQsOCAr
MzQsMTEgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFi
YXNlLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRDb3BpZXIuaCIKKyNpbmNsdWRlICJDcm9zc1Ro
cmVhZFRhc2suaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlT2JzZXJ2ZXIuaCIKICNp
bmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgpAQCAtNDUsMTAgKzQ4LDEwNyBAQAogI2luY2x1ZGUg
IldlYlZpZXdJbXBsLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgogI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUg
IldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAorbmFtZXNwYWNlIHsKKworI2lmIEVOQUJMRShXT1JL
RVJTKQorCitzdGF0aWMgY29uc3QgY2hhciBhbGxvd0RhdGFiYXNlTW9kZVtdID0gImFsbG93RGF0
YWJhc2VNb2RlIjsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJvdXRlIHRoZSByZXN1bHQg
b2YgdGhlIFdlYldvcmtlckJhc2U6OmFsbG93RGF0YWJhc2UKKy8vIGNhbGwgYmFjayB0byB0aGUg
d29ya2VyIGNvbnRleHQuCitjbGFzcyBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclBy
b3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0
IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0RhdGFiYXNlTWFpblRocmVh
ZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFtZSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICB2b2lkIGNhbmNl
bCgpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
IG1fd29ya2VyTG9hZGVyUHJveHkgPSAwOworICAgIH0KKworICAgIGJvb2wgcmVzdWx0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1ldGhv
ZCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIHNpZ25hbENvbXBsZXRl
ZChib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4
KTsKKyAgICAgICAgaWYgKG1fd29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgICAgICBtX3dvcmtl
ckxvYWRlclByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDb21wbGV0ZSwgV2ViQ29yZTo6QWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVzdWx0KSwgCisgICAgICAgICAgICAgICAgbV9tb2RlKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0
cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1l
KiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgICAgICA6IG1fd29ya2Vy
TG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCisg
ICAgeworICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCisg
ICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmFsbG93RGF0YWJhc2VUYXNrLCBXZWJDb3Jl
OjpBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1vbkNsaWVudCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6QWxsb3dDcm9zc1RocmVhZEFjY2VzcyhmcmFtZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG5hbWUpLCBTdHJpbmcoZGlzcGxh
eU5hbWUpLCBlc3RpbWF0ZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0YWJh
c2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UpCisgICAgeworICAgICAgICBpZiAoY29tbW9uQ2xp
ZW50KQorICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5h
bGxvd0RhdGFiYXNlKGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChmYWxzZSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGlkQ29tcGxldGUoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVh
ZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGJyaWRnZS0+bV9y
ZXN1bHQgPSByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBNdXRleCBt
X211dGV4OworICAgIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiBtX3dvcmtlckxvYWRlclBy
b3h5OworICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKK307CisKK2Jvb2wgYWxsb3dEYXRhYmFzZUZv
cldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK3sKKyAgICBXZWJDb3JlOjpXb3JrZXJTY3Jp
cHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKKyAgICBXZWJDb3JlOjpXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOworICAgIFdlYkNvcmU6
OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFkID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCk7Cisg
ICAgV2ViQ29yZTo6V29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtlclRocmVhZC0+cnVuTG9v
cCgpOworICAgIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9
ICAmd29ya2VyVGhyZWFkLT53b3JrZXJMb2FkZXJQcm94eSgpOworCisgICAgLy8gQ3JlYXRlIGEg
dW5pcXVlIG1vZGUganVzdCBmb3IgdGhpcyBzeW5jaHJvbm91cyBjYWxsLgorICAgIFN0cmluZyBt
b2RlID0gYWxsb3dEYXRhYmFzZU1vZGU7CisgICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIo
cnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7CisKKyAgICBSZWZQdHI8QWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpj
cmVhdGUod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIFN0cmlu
ZyhuYW1lKSwgU3RyaW5nKGRpc3BsYXlOYW1lKSwgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICAvLyBF
aXRoZXIgdGhlIGJyaWRnZSByZXR1cm5zLCBvciB0aGUgcXVldWUgZ2V0cyB0ZXJtaW5hdGVkLgor
ICAgIGlmIChydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0LCBtb2RlKSA9PSBNZXNzYWdl
UXVldWVUZXJtaW5hdGVkKSB7CisgICAgICAgIGJyaWRnZS0+Y2FuY2VsKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKK30KKwor
I2VuZGlmCisKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIERhdGFiYXNlT2JzZXJ2
ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQpAQCAtNjYsNyArMTY2LDcgQEAgYm9v
bCBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXQKICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
ICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJndvcmtlckNv
bnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwogICAgICAgICBXZWJXb3JrZXJC
YXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVy
UHJveHkpOwotICAgICAgICByZXR1cm4gd2ViV29ya2VyLT5hbGxvd0RhdGFiYXNlKDAsIG5hbWUs
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKyAgICAgICAgcmV0dXJuIGFsbG93RGF0YWJh
c2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2ViV29ya2VyLT53ZWJWaWV3
KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiAjZWxz
ZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4
IDk2NmNiZGMuLmIzM2NlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tz
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3Jr
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKICNpbmNsdWRlICJXZWJGaWxl
U3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCIKQEAgLTQ5
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtl
ckltcGwuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNjksNiArNzEsMTE2IEBAIGVudW0gQ3JlYXRp
b25GbGFnIHsKICAgICBDcmVhdGVJZk5vdFByZXNlbnQKIH07CiAKKyNpZiBFTkFCTEUoV09SS0VS
UykKKworc3RhdGljIGNvbnN0IGNoYXIgYWxsb3dGaWxlU3lzdGVtTW9kZVtdID0gImFsbG93Rmls
ZVN5c3RlbU1vZGUiOworc3RhdGljIGNvbnN0IGNoYXIgb3BlbkZpbGVTeXN0ZW1Nb2RlW10gPSAi
b3BlbkZpbGVTeXN0ZW1Nb2RlIjsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJvdXRlIHRo
ZSByZXN1bHQgb2YgdGhlIFdlYldvcmtlckJhc2U6OmFsbG93RmlsZVN5c3RlbQorLy8gY2FsbCBi
YWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KK2NsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJl
YWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFp
blRocmVhZEJyaWRnZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93Rmls
ZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94
eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwg
bW9kZSwgY29tbW9uQ2xpZW50KSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
aW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3dvcmtlckxv
YWRlclByb3h5ID0gMDsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9yZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgdm9pZCBzaWduYWxDb21wbGV0ZWQoYm9vbCByZXN1
bHQpCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAg
IGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICAgICAgbV93b3JrZXJMb2FkZXJQcm94
eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyks
IHJlc3VsdCksIG1fbW9kZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEFsbG93RmlsZVN5c3Rl
bU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQpCisgICAgICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQ
cm94eSkKKyAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICB7CisgICAgICAgIFdlYldvcmtlckJh
c2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNr
VGFzaygmYWxsb3dGaWxlU3lzdGVtVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25D
bGllbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcykpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1U
YXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5U
aHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICB7CisgICAgICAgIGlmIChjb21tb25DbGllbnQpCisg
ICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93Rmls
ZVN5c3RlbSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21w
bGV0ZWQoZmFsc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRpZENvbXBsZXRlKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8QWxsb3dGaWxl
U3lzdGVtTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIGJyaWRnZS0+bV9yZXN1bHQgPSByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBtX3Jlc3Vs
dDsKKyAgICBNdXRleCBtX211dGV4OworICAgIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiBt
X3dvcmtlckxvYWRlclByb3h5OworICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKK307CisKK2Jvb2wg
YWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50KQoreworICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CisgICAgV2Vi
Q29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3b3JrZXJDb250ZXh0LT50aHJlYWQo
KTsKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7
CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gICZ3
b3JrZXJUaHJlYWQtPndvcmtlckxvYWRlclByb3h5KCk7CisKKyAgICAvLyBDcmVhdGUgYSB1bmlx
dWUgbW9kZSBqdXN0IGZvciB0aGlzIHN5bmNocm9ub3VzIGNhbGwuCisgICAgU3RyaW5nIG1vZGUg
PSBhbGxvd0ZpbGVTeXN0ZW1Nb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1
bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSA9IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U6
OmNyZWF0ZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50KTsKKworICAgIC8v
IEVpdGhlciB0aGUgYnJpZGdlIHJldHVybnMsIG9yIHRoZSBxdWV1ZSBnZXRzIHRlcm1pbmF0ZWQu
CisgICAgaWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3Nh
Z2VRdWV1ZVRlcm1pbmF0ZWQpIHsKKyAgICAgICAgYnJpZGdlLT5jYW5jZWwoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOworfQor
Cit2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29t
bW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9u
b3VzKQoreworICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgpOworICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CisgICAgV2Vi
Q29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQgPSB3b3JrZXJDb250ZXh0LT50aHJlYWQo
KTsKKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyVGhyZWFkLT5ydW5Mb29wKCk7
CisgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gICZ3
b3JrZXJUaHJlYWQtPndvcmtlckxvYWRlclByb3h5KCk7CisKKyAgICAvLyBDcmVhdGUgYSB1bmlx
dWUgbW9kZSBmb3IgdGhpcyBvcGVuRmlsZVN5c3RlbSBjYWxsLgorICAgIFN0cmluZyBtb2RlID0g
b3BlbkZpbGVTeXN0ZW1Nb2RlOworICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxv
b3AuY3JlYXRlVW5pcXVlSWQoKSkpOworCisgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U+IGJyaWRnZSA9IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNy
ZWF0ZSh3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsKKyAgICBi
cmlkZ2UtPnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQsIHR5cGUs
IHNpemUsIGNyZWF0ZSwgbW9kZSk7CisKKyAgICBpZiAoc3luY2hyb25vdXMpIHsKKyAgICAgICAg
aWYgKHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpID09IE1lc3NhZ2VRdWV1
ZVRlcm1pbmF0ZWQpCisgICAgICAgICAgICBicmlkZ2UtPnN0b3AoKTsKKyAgICB9Cit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKwogfSAvLyBuYW1lc3BhY2UKIAogc3RhdGljIHZvaWQg
b3BlbkZpbGVTeXN0ZW1Ob3RBbGxvd2VkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtOTMsMTAgKzIwNSwx
MCBAQCBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbUhlbHBlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAgICAg
ICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+
dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtlckJhc2UqIHdl
YldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7
Ci0gICAgICAgIGlmICghd2ViV29ya2VyLT5hbGxvd0ZpbGVTeXN0ZW0oKSkKKyAgICAgICAgaWYg
KCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSkpCiAg
ICAgICAgICAgICBhbGxvd2VkID0gZmFsc2U7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdl
Yldvcmtlci0+b3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3Rl
bTo6VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNo
cm9ub3VzKSwgc3luY2hyb25vdXMpOworICAgICAgICAgICAgb3BlbkZpbGVTeXN0ZW1Gb3JXb3Jr
ZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6
VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9u
b3VzKSwgc3luY2hyb25vdXMpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAK
aW5kZXggZDYxODY3Mi4uNTc2NzZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5jcHAKQEAgLTQ5LDggKzQ5LDcgQEAKICNpbmNsdWRlICJXZWJXb3JrZXJD
bGllbnQuaCIKIAogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgiCi0jaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2Vy
VGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtNjAsMTM0ICs1OSw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKLXN0YXRpYyBj
b25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUiOwotc3Rh
dGljIGNvbnN0IGNoYXIgYWxsb3dGaWxlU3lzdGVtTW9kZVtdID0gImFsbG93RmlsZVN5c3RlbU1v
ZGUiOwotc3RhdGljIGNvbnN0IGNoYXIgb3BlbkZpbGVTeXN0ZW1Nb2RlW10gPSAib3BlbkZpbGVT
eXN0ZW1Nb2RlIjsKLQotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJv
dXRlIHRoZSByZXN1bHQgb2YgdGhlIFdlYldvcmtlckJhc2U6OmFsbG93RGF0YWJhc2UKLS8vIGNh
bGwgYmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCi1jbGFzcyBBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0RhdGFiYXNlTWFp
blRocmVhZEJyaWRnZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViV29ya2VyQmFzZSogd29ya2VyLCBjb25z
dCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQs
IFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSh3
b3JrZXIsIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW52b2tlZCBv
biB0aGUgd29ya2VyIGNvbnRleHQuCi0gICAgdm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBtX3dvcmtlciA9IDA7Ci0gICAg
fQotCi0gICAgYm9vbCByZXN1bHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0Owot
ICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFk
LgotICAgIHZvaWQgc2lnbmFsQ29tcGxldGVkKGJvb2wgcmVzdWx0KQotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICBpZiAobV93b3JrZXIpCi0gICAg
ICAgICAgICBtX3dvcmtlci0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAotICAgICAg
ICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ29tcGxldGUsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIHJlc3VsdCksIG1fbW9kZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYldvcmtlckJhc2UqIHdvcmtlciwgY29u
c3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICAgICAg
OiBtX3dvcmtlcih3b3JrZXIpCi0gICAgICAgICwgbV9tb2RlKG1vZGUpCi0gICAgewotICAgICAg
ICB3b3JrZXItPmRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKLSAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmYWxsb3dEYXRhYmFzZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29t
bW9uQ2xpZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKGZyYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmco
bmFtZSksIFN0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRlZFNpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgIH0K
LQotICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJhc2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nIG5hbWUsIGNvbnN0IFdURjo6U3Ry
aW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKLSAgICB7Ci0gICAgICAgIGlm
ICghY29tbW9uQ2xpZW50KQotICAgICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoZmFs
c2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChj
b21tb25DbGllbnQtPmFsbG93RGF0YWJhc2UoZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlkQ29tcGxldGUoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxBbGxvd0RhdGFi
YXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlLCBib29sIHJlc3VsdCkKLSAgICB7Ci0gICAgICAg
IGJyaWRnZS0+bV9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgfQotCi0gICAgYm9vbCBtX3Jlc3VsdDsK
LSAgICBNdXRleCBtX211dGV4OwotICAgIFdlYldvcmtlckJhc2UqIG1fd29ya2VyOwotICAgIFdU
Rjo6U3RyaW5nIG1fbW9kZTsKLX07Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByb3V0ZSB0
aGUgcmVzdWx0IG9mIHRoZSBXZWJXb3JrZXJCYXNlOjphbGxvd0ZpbGVTeXN0ZW0KLS8vIGNhbGwg
YmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCi1jbGFzcyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhy
ZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0Zp
bGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViV29ya2VyQmFzZSogd29ya2VyLCBj
b25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2Uod29ya2VyLCBtb2RlLCBjb21tb25DbGllbnQpKTsKLSAgICB9Ci0KLSAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KLSAg
ICB2b2lkIGNhbmNlbCgpCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgICAgIG1fd29ya2VyID0gMDsKLSAgICB9Ci0KLSAgICBib29sIHJlc3VsdCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRo
b2QgaXMgaW52b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBzaWduYWxDb21wbGV0
ZWQoYm9vbCByZXN1bHQpCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgICAgIGlmIChtX3dvcmtlcikKLSAgICAgICAgICAgIG1fd29ya2VyLT5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCi0gICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZkaWRDb21wbGV0ZSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVzdWx0KSwg
bV9tb2RlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVh
ZEJyaWRnZShXZWJXb3JrZXJCYXNlKiB3b3JrZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBX
ZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKLSAgICAgICAgOiBtX3dvcmtlcih3
b3JrZXIpCi0gICAgICAgICwgbV9tb2RlKG1vZGUpCi0gICAgewotICAgICAgICB3b3JrZXItPmRp
c3BhdGNoVGFza1RvTWFpblRocmVhZCgKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
YWxsb3dGaWxlU3lzdGVtVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21tb25DbGllbnQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
dGhpcykpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNs
aWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRC
cmlkZ2U+IGJyaWRnZSkKLSAgICB7Ci0gICAgICAgIGlmICghY29tbW9uQ2xpZW50KQotICAgICAg
ICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoZmFsc2UpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93RmlsZVN5
c3RlbSgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkaWRDb21wbGV0ZShXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3Rl
bU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSwgYm9vbCByZXN1bHQpCi0gICAgewotICAgICAgICBi
cmlkZ2UtPm1fcmVzdWx0ID0gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgbV9yZXN1bHQ7Ci0g
ICAgTXV0ZXggbV9tdXRleDsKLSAgICBXZWJXb3JrZXJCYXNlKiBtX3dvcmtlcjsKLSAgICBXVEY6
OlN0cmluZyBtX21vZGU7Ci19OwotCi19Ci0KIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCB0byBmb3JjZSB0byBpbml0aWFsaXplIHNvbWUgc3RhdGljCiAvLyB2
YWx1ZXMgdXNlZCBpbiBXZWJLaXQgYmVmb3JlIGFueSB3b3JrZXIgdGhyZWFkIGlzIHN0YXJ0ZWQu
IFRoaXMgaXMgYmVjYXVzZSBpbgogLy8gb3VyIHdvcmtlciBwcm9jZXNzcywgd2UgZG8gbm90IHJ1
biBhbnkgV2ViS2l0IGNvZGUgaW4gbWFpbiB0aHJlYWQgYW5kIHRodXMKQEAgLTI4NSw3MCArMTU2
LDYgQEAgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIFdlYldvcmtlckJhc2U6OmNyZWF0ZUFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2UKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBX
ZWJXb3JrZXJCYXNlOjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUpCi17Ci0gICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2VyVGhyZWFkLT5y
dW5Mb29wKCk7Ci0gICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0gICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKLQotICAg
IC8vIENyZWF0ZSBhIHVuaXF1ZSBtb2RlIGp1c3QgZm9yIHRoaXMgc3luY2hyb25vdXMgY2FsbC4K
LSAgICBTdHJpbmcgbW9kZSA9IGFsbG93RGF0YWJhc2VNb2RlOwotICAgIG1vZGUuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOwotCi0gICAgUmVmUHRyPEFs
bG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UgPSBBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZTo6Y3JlYXRlKHRoaXMsIG1vZGUsIGNvbW1vbkNsaWVudCgpLCBtX3dlYlZpZXct
Pm1haW5GcmFtZSgpLCBTdHJpbmcobmFtZSksIFN0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRl
ZFNpemUpOwotCi0gICAgLy8gRWl0aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3IgdGhlIHF1ZXVl
IGdldHMgdGVybWluYXRlZC4KLSAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4
dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCkgewotICAgICAgICBicmlkZ2UtPmNh
bmNlbCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJyaWRn
ZS0+cmVzdWx0KCk7Ci19Ci0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLWJvb2wgV2ViV29y
a2VyQmFzZTo6YWxsb3dGaWxlU3lzdGVtKCkKLXsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29w
ID0gbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKTsKLSAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVy
KiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRl
eHQoKTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29y
a2VyQ29udGV4dCgpOwotCi0gICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1vZGUganVzdCBmb3IgdGhp
cyBzeW5jaHJvbm91cyBjYWxsLgotICAgIFN0cmluZyBtb2RlID0gYWxsb3dGaWxlU3lzdGVtTW9k
ZTsKLSAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlk
KCkpKTsKLQotICAgIFJlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlk
Z2UgPSBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUodGhpcywgbW9kZSwg
Y29tbW9uQ2xpZW50KCkpOwotCi0gICAgLy8gRWl0aGVyIHRoZSBicmlkZ2UgcmV0dXJucywgb3Ig
dGhlIHF1ZXVlIGdldHMgdGVybWluYXRlZC4KLSAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29y
a2VyQ29udGV4dCwgbW9kZSkgPT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCkgewotICAgICAgICBi
cmlkZ2UtPmNhbmNlbCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGJyaWRnZS0+cmVzdWx0KCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6b3BlbkZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5j
aHJvbm91cykKLXsKLSAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gbV93b3JrZXJUaHJlYWQt
PnJ1bkxvb3AoKTsKLSAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKLSAgICBXb3JrZXJD
b250ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwotCi0g
ICAgLy8gQ3JlYXRlIGEgdW5pcXVlIG1vZGUgZm9yIHRoaXMgb3BlbkZpbGVTeXN0ZW0gY2FsbC4K
LSAgICBTdHJpbmcgbW9kZSA9IG9wZW5GaWxlU3lzdGVtTW9kZTsKLSAgICBtb2RlLmFwcGVuZChT
dHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKLQotICAgIFJlZlB0cjxX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UgPSBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUodGhpcywgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKTsK
LSAgICBicmlkZ2UtPnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChjb21tb25DbGllbnQo
KSwgdHlwZSwgc2l6ZSwgY3JlYXRlLCBtb2RlKTsKLQotICAgIGlmIChzeW5jaHJvbm91cykgewot
ICAgICAgICBpZiAocnVuTG9vcC5ydW5Jbk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSkgPT0gTWVz
c2FnZVF1ZXVlVGVybWluYXRlZCkKLSAgICAgICAgICAgIGJyaWRnZS0+c3RvcCgpOwotICAgIH0K
LX0KLSNlbmRpZgotCiAvLyBXb3JrZXJPYmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIFdlYldvcmtlckJh
c2U6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1lc3NhZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmgKaW5kZXggOWVmY2UxNS4uYjBlNTFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckJhc2UuaApAQCAtODksMjEgKzg5LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqKTsKICAg
ICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hl
SG9zdChXZWJGcmFtZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7CiAKLSAgICAv
LyBDb250cm9scyB3aGV0aGVyIGFjY2VzcyB0byBXZWIgRGF0YWJhc2VzIGlzIGFsbG93ZWQgZm9y
IHRoaXMgd29ya2VyLgotICAgIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKTsKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICAvLyBDb250
cm9scyB3aGV0aGVyIGFjY2VzcyB0byBGaWxlIFN5c3RlbSBpcyBhbGxvd2VkIGZvciB0aGlzIHdv
cmtlci4KLSAgICBib29sIGFsbG93RmlsZVN5c3RlbSgpOwotICAgIHZvaWQgb3BlbkZpbGVTeXN0
ZW1Gb3JXb3JrZXIoV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiwgYm9vbCBzeW5jaHJvbm91cyk7Ci0jZW5kaWYK
LQogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KICAg
ICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CiAKKyAgICBXZWJWaWV3KiB3ZWJWaWV3
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisKKyAgICB2aXJ0dWFsIFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCBXZWJXb3JrZXJDbGllbnQqIGNsaWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOwogCiAgICAgdm9pZCBzZXRXb3JrZXJUaHJl
YWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRo
cmVhZCA9IHRocmVhZDsgfQogICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFk
KCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5jcHAKaW5kZXggZmMwNzRhZC4uMTdjNzc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5j
cHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJX
b3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtl
ckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0x
NDcsNyArMTQ4LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpzdG9w
KCkKIHsKICAgICBBU1NFUlQobV93b3JrZXJDb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwotICAgIG1fd29ya2VyID0gMDsKKyAgICBt
X3dvcmtlckxvYWRlclByb3h5ID0gMDsKIAogICAgIGlmIChtX2NhbGxiYWNrc09uV29ya2VyVGhy
ZWFkKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZEZhaWwoV2ViRmls
ZUVycm9yQWJvcnQpOwpAQCAtMzM3LDkgKzMzOCw5IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6ZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25zdCBXZWJWZWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMp
LCBlbnRyaWVzLCBoYXNNb3JlKSwgbW9kZSk7CiB9CiAKLVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViV29ya2VyQmFzZSog
d29ya2VyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCitXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tz
KQogICAgIDogV29ya2VyQ29udGV4dDo6T2JzZXJ2ZXIoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4
dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQotICAgICwgbV93b3JrZXIod29ya2VyKQorICAg
ICwgbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2Vy
Q29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICwgbV9jYWxsYmFja3NPbldvcmtl
clRocmVhZChjYWxsYmFja3MpCiB7CkBAIC0zOTksOSArNDAwLDkgQEAgdm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpydW5UYXNrT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3UKIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaXNwYXRj
aFRhc2tUb01haW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiB0YXNrKQogewotICAgIEFTU0VSVChtX3dvcmtlcik7CisgICAgQVNTRVJUKG1f
d29ya2VyTG9hZGVyUHJveHkpOwogICAgIEFTU0VSVChtX3dvcmtlckNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKLSAgICBtX3dvcmtlci0+ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0
ZUNhbGxiYWNrVGFzaygmcnVuVGFza09uTWFpblRocmVhZCwgUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+KHRoaXMpLnJlbGVhc2UoKSwgdGFzaykpOworICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJ1blRh
c2tPbk1haW5UaHJlYWQsIFJlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPih0
aGlzKS5yZWxlYXNlKCksIHRhc2spKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjptYXlQb3N0VGFza1RvV29ya2VyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtNDEzLDggKzQxNCw4
IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6bWF5UG9zdFRhc2tUb1dv
cmtlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1CiAgICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQsIHRv
IGVuc3VyZSB0aGF0IHRoZSBtX211dGV4IGlzIHN0aWxsIHZhbGlkIHdoZW4gaXQgZ2V0cyB1bmxv
Y2tlZC4pCiAgICAgUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRn
ZSA9IGFkb3B0UmVmKHRoaXMpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAg
ICBpZiAobV93b3JrZXIpCi0gICAgICAgIG1fd29ya2VyLT5wb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZydW5UYXNrT25Xb3JrZXJUaHJlYWQsIGJyaWRn
ZSwgdGFzayksIG1vZGUpOworICAgIGlmIChtX3dvcmtlckxvYWRlclByb3h5KQorICAgICAgICBt
X3dvcmtlckxvYWRlclByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZydW5UYXNrT25Xb3JrZXJUaHJlYWQsIGJyaWRnZSwgdGFzayksIG1vZGUp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKaW5k
ZXggNGVjNDUwMy4uYmI0ODQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtNDMsNiAr
NDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7
Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW07CkBAIC01
MCw3ICs1NCw2IEBAIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogY2xhc3Mg
VGhyZWFkYWJsZUNhbGxiYWNrc0JyaWRnZVdyYXBwZXI7CiBjbGFzcyBXZWJDb21tb25Xb3JrZXJD
bGllbnQ7CiBjbGFzcyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzOwotY2xhc3MgV2ViV29ya2VyQmFz
ZTsKIHN0cnVjdCBXZWJGaWxlSW5mbzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVtRW50cnk7CiAKQEAg
LTc4LDkgKzgxLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViV29y
a2VyQmFzZSogd29ya2VyLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJD
b250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlKFdlYkNvcmU6
OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogd29ya2VyQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2Fs
bGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtlciwgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZSh3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyQ29udGV4dCwgY2FsbGJhY2tzKSk7CiAgICAgfQog
CiAgICAgLy8gTWV0aG9kcyB0aGF0IGNyZWF0ZSBhbiBpbnN0YW5jZSBhbmQgcG9zdCBhbiBpbml0
aWFsIHJlcXVlc3QgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQuIFRoZXkgbXVzdCBiZSBjYWxsZWQg
b24gdGhlIHdvcmtlciB0aHJlYWQuCkBAIC0xMDQsNyArMTA3LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5
c3RlbUVudHJ5PiYsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogcHJpdmF0
ZToKLSAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYldvcmtlckJhc2UqLCBX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyop
OworICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9h
ZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24g
dGhlIG1haW4gdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhy
ZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwpAQCAt
MTM1LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXlQb3N0VGFza1RvV29ya2VyKFBh
c3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0
cmluZyYgbW9kZSk7CiAKICAgICBNdXRleCBtX211dGV4OwotICAgIFdlYldvcmtlckJhc2UqIG1f
d29ya2VyOworICAgIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiBtX3dvcmtlckxvYWRlclBy
b3h5OwogICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fd29ya2VyQ29udGV4
dDsKIAogICAgIC8vIFRoaXMgaXMgc2VsZi1kZXN0cnVjdGVkIGFuZCBtdXN0IGJlIGZpcmVkIG9u
IHRoZSB3b3JrZXIgdGhyZWFkLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>