<?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>26126</bug_id>
          
          <creation_ts>2009-06-01 18:15:33 -0700</creation_ts>
          <short_desc>Refactor methods of WorkerMessagingProxy used to talk to main-thread loader into new interface.</short_desc>
          <delta_ts>2009-06-08 20:16:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>jianli</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123906</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-01 18:15:33 -0700</bug_when>
    <thetext>This is a part of work to enable implementation of XHR in workers in Chromium, and can be used by nested workers implementation as well. It introduces additional WorkerLoaderProxy.

We have WorkerObjectProxy and WorkerContextProxy already, however, Workers not only talk back and forth with WorkerObject but they also need to talk to the loading code that normally lives on a main thread. In addition, in multi-process browsers, the &apos;loading context&apos; can be a distinct instance from &apos;Worker object&apos; and can live in different processes. 

WorkerThreadableLoader::MainThreadBridge used to use methods on WorkerMessagingProxy directly to schedule loading tasks on main thread and get the results back on worker thread. The new abstract interface WorkerLoadignProxy gets these methods so WorkerMessagingProxy can implement them, as well as Chromium, since it doesn&apos;t have WorkerMessagingProxy but rather has a set of IPC proxies on its own.

WorkerThreadableLoader::MainThreadBridge now uses an instance of WorkerLoaderProxy to talk to the DocumentThreadaableLoader. Some FIXMEs were removed.

A small note about removing a check for &quot;askedToTerminate&quot; from WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader: David Levin and I looked at it together and we don&apos;t see danger in removing this - so no need to add this method on new WorkerLoaderProxy. The absence of this check only avoids creating the main thread loader in some small number of cases cases when the worker is being terminated from the parent side but the tasks &apos;crossed in queues&apos;. The loader will still be destroyed as a result of WorkerContext destruction, so it seems to be an optimization for a pretty narrow case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123910</commentid>
    <comment_count>1</comment_count>
      <attachid>30850</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-01 18:48:37 -0700</bug_when>
    <thetext>Created attachment 30850
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124849</commentid>
    <comment_count>2</comment_count>
      <attachid>30850</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-08 17:32:19 -0700</bug_when>
    <thetext>Comment on attachment 30850
Proposed patch

A few issues to fix up, so r- for this version of the patch.

&gt; diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; index a2742ac..2996d35 100644
&gt; --- a/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; +++ b/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; @@ -208,6 +208,7 @@
&gt;  		188604B30F2E654A000B6443 /* DOMTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 188604B10F2E654A000B6443 /* DOMTimer.cpp */; };
&gt;  		188604B40F2E654A000B6443 /* DOMTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 188604B20F2E654A000B6443 /* DOMTimer.h */; };
&gt; +		18F831B80FD48C7800D8C56B /* WorkerLoaderProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F831B70FD48C7800D8C56B /* WorkerLoaderProxy.h */; };

Is this out of order?


&gt; diff --git a/WebCore/loader/WorkerThreadableLoader.cpp b/WebCore/loader/WorkerThreadableLoader.cpp
&gt;  

Is it possible to remove the #include &quot;WorkerMessagingProxy.h&quot;?


&gt; -WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(PassRefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, WorkerMessagingProxy&amp; messagingProxy, const String&amp; taskMode,
&gt; +WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(PassRefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, WorkerLoaderProxy* loaderProxy, const String&amp; taskMode,

Ideally loaderProxy would be a &amp; since it can never be 0.



&gt; diff --git a/WebCore/workers/WorkerLoaderProxy.h b/WebCore/workers/WorkerLoaderProxy.h
&gt; +
&gt; +        virtual ~WorkerLoaderProxy() {}
Nice to have a space in { }.

&gt; +        // Postst callbacks from loading code to the WorkerContext. The &apos;mode&apos; is used to differentiate

Postst spelling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124872</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-08 18:37:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 30850 [review])
&gt; &gt; +		18F831B80FD48C7800D8C56B /* WorkerLoaderProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F831B70FD48C7800D8C56B /* WorkerLoaderProxy.h */; };
&gt; 
&gt; Is this out of order?

Seems ok in the xcode itself (the file is in right alphabetical order in the Sources). 

&gt; &gt; diff --git a/WebCore/loader/WorkerThreadableLoader.cpp b/WebCore/loader/WorkerThreadableLoader.cpp
&gt; Is it possible to remove the #include &quot;WorkerMessagingProxy.h&quot;?

Yes, removed. Instead, included WorkerLoaderProxy.h

&gt; &gt; +WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(PassRefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, WorkerLoaderProxy* loaderProxy, const String&amp; taskMode,
&gt; 
&gt; Ideally loaderProxy would be a &amp; since it can never be 0.

Done, also changed WorkerThread::workerLoaderProxy and WorkerThread::workerObjectProxy to return &amp;, accordingly.

&gt; &gt; diff --git a/WebCore/workers/WorkerLoaderProxy.h b/WebCore/workers/WorkerLoaderProxy.h
&gt; &gt; +
&gt; &gt; +        virtual ~WorkerLoaderProxy() {}
&gt; Nice to have a space in { }.

Done.

&gt; &gt; +        // Postst callbacks from loading code to the WorkerContext. The &apos;mode&apos; is used to differentiate
&gt; 
&gt; Postst spelling.

Fixed.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124873</commentid>
    <comment_count>4</comment_count>
      <attachid>31077</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-08 18:37:40 -0700</bug_when>
    <thetext>Created attachment 31077
Updated according to review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124877</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-06-08 20:16:54 -0700</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/44515</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30850</attachid>
            <date>2009-06-01 18:48:37 -0700</date>
            <delta_ts>2009-06-08 18:37:40 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28884</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjc1M2VmOC4uNTk2NjhkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MyBAQAorMjAwOS0wNi0wMSAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjYxMjYKKyAgICAgICAgUmVmYWN0b3IgbWV0aG9kcyBvZiBXb3JrZXJNZXNzYWdpbmdQcm94eSB1
c2VkIHRvIHRhbGsgdG8gbWFpbi10aHJlYWQgbG9hZGVyIGludG8gbmV3IGludGVyZmFjZS4KKwor
ICAgICAgICBTcGxpdCBhIGNvdXBsZSBvZiBtZXRob2RzIHVzZWQgdG8gc2NoZWR1bGUgY3Jvc3Mt
dGhyZWFkIHRhc2tzIGJldHdlZW4gd29ya2VyIHRocmVhZCBhbmQgbG9hZGVyIHRocmVhZAorICAg
ICAgICBpbXBsZW1lbnRlZCBvbiBXb3JrZXJNZXNzYWdpbmdQcm94eSBpbnRvIGEgc2VwYXJhdGUg
aW50ZXJmYWNlIHNvIHRoZSBsb2FkaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBD
aHJvbWl1bSdzIHdvcmtlcnMuCisKKyAgICAgICAgTm8gY2hhbmdlcyBpbiBmdW5jdGlvbmFsaXR5
IHNvIG5vIHRlc3RzIGFkZGVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBXb3JrZXJMb2FkZXJQcm94eS5o
IHRvIHRoZSBidWxpZC4KKworICAgICAgICAqIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6OldvcmtlclRo
cmVhZGFibGVMb2FkZXIpOiAKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Ok1haW5UaHJlYWRCcmlkZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdl
OjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFp
blRocmVhZEJyaWRnZTo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdl
OjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5j
ZWxsYXRpb24pOgorICAgICAgICBVc2UgV29ya2VyTG9hZGVyUHJveHkgaW5zdGVhZCBvZiBXb3Jr
ZXJNZXNzYWdpbmdQcm94eSBmb3IgdGhlIE1haW5UaHJlYWRCcmlkZ2UuCisgICAgICAgIE1vc3Rs
eSByZW5hbWUuCisKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1h
aW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIpOgorICAgICAgICBJbiBhZGRp
dGlvbiB0byB1c2luZyBXb3JrZXJMb2FkZXJQcm94eSBpbnN0ZWFkIG9mIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5LCB0aGUgY2hlY2sgZm9yCisgICAgICAgIEFza2VkVG9UZXJtaW5hdGUgaXMgcmVtb3Zl
ZC4gSXQgc2VlbXMgdG8gYmUgYW4gb3B0aW1pemF0aW9uIGZvciBhIHZlcnkgc21hbGwgbnVtYmVy
IG9mIGNhc2VzCisgICAgICAgIHdoZW4gd29ya2VyIHRlcm1pbmF0aW9uIGlzIHJlcXVlc3RlZCBh
IHZlcnkgc2hvcnQgdGltZSBiZWZvcmUgdGhlIHJlcXVlc3QgdG8gbG9hZCBzb21ldGhpbmcKKyAg
ICAgICAgKFhIUiBvciBpbXBvcnRTY3JpcHQpIHdhcyBkaXNwYXRjaGVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KKworICAgICAgICAqIGxvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAg
ICAgIE5vdyBrZWVwcyBhIHBvaW50ZXIgdG8gV29ya2VyTG9hZGVyUHJveHkgcmF0aGVyIHRoZW4g
dG8gYSBXb3JrZXJNZXNzYWdpbmdQcm94eS4gVGhpcyBhbGxvd3MKKyAgICAgICAgdG8gaW1wbGVt
ZW50IFdvcmtlclRocmVhZGFibGVMb2FkZXIgZm9yIENocm9taXVtLgorCisgICAgICAgICogd29y
a2Vycy9Xb3JrZXJMb2FkZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5Ojp+V29ya2VyTG9hZGVyUHJveHkpOgorCisgICAgICAgICogd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdp
bmdQcm94eTo6c3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvTG9hZGVyKTogQWRkZWQgQVNTRVJUIHNpbmNlIHRoaXMg
bmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIG5lc3RlZCB3b3JrZXJzLgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaDoKKyAgICAgICAgRGVyaXZlZCBmcm9tIFdvcmtl
ckxvYWRlclByb3h5LCB0aGUgbWV0aG9kcyBmb3IgcG9zdGluZyB0YXNrcyBjcm9zcy10aHJlYWQg
YXJlIG5vdyB2aXJ0dWFsLgorICAgICAgICBSZW1vdmVkIHVudXNlZCBwb3N0VGFza1RvV29ya2Vy
Q29udGV4dCgpIG1ldGhvZC4KKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
clRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJMb2FkZXJQ
cm94eSk6CisgICAgICAgIFdvcmtlclRocmVhZCBnZXRzIGEgbmV3IG1lbWJlciBvZiB0eXBlIFdv
cmtlckxvYWRlclByb3h5LCBhbmQgYWNjZXNzb3IuCisKIDIwMDktMDYtMDEgIERpbWl0cmkgR2xh
emtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZl
IEh5YXR0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggYmYzZDEyNi4uMjQ1ZjE3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMjY5LDYgKzIy
NjksNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBcCiAJV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9h
ZGVyUHJveHkuaCBcCiAJV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCiAJV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmggXAogCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggZjZjZDYxNS4uNDExZjA0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC05MzY3LDYgKzkzNjcsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJMb2FkZXJQcm94eS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xX
b3JrZXJMb2NhdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhMjc0MmFjLi4yOTk2ZDM1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBA
CiAJCTE4NUJDRjI5MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBF
QTI2MiAvKiBUaHJlYWRUaW1lcnMuaCAqLzsgfTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQz
IC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CiAJ
CTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTg4NjA0QjIwRjJFNjU0QTAwMEI2NDQzIC8q
IERPTVRpbWVyLmggKi87IH07CisJCTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJM
b2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMThGODMxQjcwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi87IH07
CiAJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM0MEE1Qzc3RkUw
MDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAqLzsgfTsKIAkJMUEwRDU3MzcwQTVDNzdGRTAw
N0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM1MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50
LmggKi87IH07CiAJCTFBMEQ1NzQwMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJmbG93RXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3
M0UwQTVDNzg2NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5jcHAgKi87IH07CkBAIC01MDYw
LDYgKzUwNjEsNyBAQAogCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFRpbWVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9N
VGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NVGltZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODg2MDRCMjBGMkU2NTRBMDAwQjY0
NDMgLyogRE9NVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGlt
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThGODMxQjcwRkQ0OEM3ODAwRDhD
NTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdvcmtlckxvYWRlclByb3h5Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlckxvYWRlclByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0
QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPdmVyZmxvd0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEw
RDU3MzUwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJmbG93RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUEwRDU3MzgwQTVDNzgxMjAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBPdmVyZmxvd0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk3NjMsNiArOTc2NSw3IEBACiAJCTJFNDM0NjMxMEY1NDZBNjgwMEIw
RjFCQSAvKiB3b3JrZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkxOEY4MzFCNzBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCAq
LywKIAkJCQkyRTQzNDYzMjBGNTQ2QTgyMDBCMEYxQkEgLyogR2VuZXJpY1dvcmtlclRhc2suaCAq
LywKIAkJCQkyRTQzNDYzMzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCAqLywKIAkJCQky
RTQzNDYzNDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggKi8sCkBAIC0xNjc4OCw2ICsxNjc5
MSw3IEBACiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3Jr
ZXJMb2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRl
ci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVh
ZGFibGVMb2FkZXIuY3BwCmluZGV4IGJlYWYwNjEuLjRkZTQzMzUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCkBAIC01MywxMyArNTMsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
TW9kZVtdID0gImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlNb2RlIjsKIAotLy8gRklYTUU6IFRo
ZSBhc3N1bXB0aW9uIHRoYXQgd2UgY2FuIHVwY2FzdCB3b3JrZXIgb2JqZWN0IHByb3h5IHRvIFdv
cmtlck1lc3NhZ2luZ1Byb3h5IHdpbGwgbm90IGJlIHRydWUgaW4gbXVsdGktcHJvY2VzcyBpbXBs
ZW1lbnRhdGlvbi4KIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCog
Y2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCiAgICAgOiBtX3dvcmtlckNvbnRl
eHQod29ya2VyQ29udGV4dCkKICAgICAsIG1fd29ya2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6Y3JlYXRlKGNsaWVudCkpCi0gICAgLCBtX2JyaWRnZSgqKG5l
dyBNYWluVGhyZWFkQnJpZGdlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgKihzdGF0aWNfY2FzdDxX
b3JrZXJNZXNzYWdpbmdQcm94eSo+KG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlck9i
amVjdFByb3h5KCkpKSwgdGFza01vZGUsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3Jl
ZGVudGlhbHMpKSkKKyAgICAsIG1fYnJpZGdlKCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3Jr
ZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQ
cm94eSgpLCB0YXNrTW9kZSwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZm
LCBzdG9yZWRDcmVkZW50aWFscykpKQogewogfQogCkBAIC05MiwxNCArOTAsMTQgQEAgdm9pZCBX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogICAgIG1fYnJpZGdlLmNhbmNlbCgpOwog
fQogCi1Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFk
QnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNs
aWVudFdyYXBwZXIsIFdvcmtlck1lc3NhZ2luZ1Byb3h5JiBtZXNzYWdpbmdQcm94eSwgY29uc3Qg
U3RyaW5nJiB0YXNrTW9kZSwKK1dvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6Ok1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkqIGxvYWRlclByb3h5
LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRT
bmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCiAgICAgOiBtX3dvcmtl
ckNsaWVudFdyYXBwZXIod29ya2VyQ2xpZW50V3JhcHBlcikKLSAgICAsIG1fbWVzc2FnaW5nUHJv
eHkobWVzc2FnaW5nUHJveHkpCisgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclByb3h5KQogICAg
ICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jb3B5KCkpCiB7CiAgICAgQVNTRVJUKG1fd29ya2VyQ2xp
ZW50V3JhcHBlci5nZXQoKSk7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2Vy
T2JqZWN0KGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENy
ZWF0ZUxvYWRlciwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZm
LCBzdG9yZWRDcmVkZW50aWFscykpOworICAgIG1fbG9hZGVyUHJveHktPnBvc3RUYXNrVG9Mb2Fk
ZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyLCB0aGlzLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0
b3JlZENyZWRlbnRpYWxzKSk7CiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCcmlkZ2U6On5NYWluVGhyZWFkQnJpZGdlKCkKQEAgLTEwOCwxNiArMTA2LDkgQEAgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6fk1haW5UaHJlYWRCcmlkZ2UoKQog
CiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJl
YWRDcmVhdGVMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVh
ZEJyaWRnZSogdGhpc1B0ciwgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRh
PiByZXF1ZXN0RGF0YSwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25p
ZmYgY29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscykKIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBhc3NlcnQgZmFpbHMgZm9yIG5lc3RlZCB3b3JrZXJzLiAgUmVt
b3ZpbmcgdGhlIGFzc2VydCB3b3VsZCBhbGxvdyBpdCB0byB3b3JrLAotICAgIC8vIGJ1dCB0aGVu
IHRoZXJlIHdvdWxkIGJlIG9uZSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyIGluIGV2ZXJ5IGludGVy
bWVkaWF0ZSB3b3JrZXIgc2ltcGx5Ci0gICAgLy8gY2hhaW5pbmcgdGhlIHJlcXVlc3RzLCB3aGlj
aCBpcyBub3QgdmVyeSBnb29kLiBJbnN0ZWFkLCB0aGUgcG9zdFRhc2tUb1dvcmtlck9iamVjdCBz
aG91bGQgYmUgYQotICAgIC8vIHBvc3RUYXNrVG9Eb2N1bWVudENvbnRleHQuCiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKIAot
ICAgIGlmICh0aGlzUHRyLT5tX21lc3NhZ2luZ1Byb3h5LmFza2VkVG9UZXJtaW5hdGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgLy8gRklYTUU6IHRoZSBjcmVhdGVkIGxvYWRlciBoYXMgbm8g
a25vd2xlZGdlIG9mIHRoZSBvcmlnaW4gb2YgdGhlIHdvcmtlciBkb2luZyB0aGUgbG9hZCByZXF1
ZXN0LgogICAgIC8vIEJhc2ljYWxseSBldmVyeSBzZXR0aW5nIGRvbmUgaW4gU3VicmVzb3VyY2VM
b2FkZXI6OmNyZWF0ZSAoaW5jbHVkaW5nIHRoZSBjb250ZW50cyBvZiBhZGRFeHRyYUZpZWxkc1Rv
UmVxdWVzdCkKICAgICAvLyBuZWVkcyB0byBiZSBleGFtaW5lZCBmb3IgaG93IGl0IHNob3VsZCB0
YWtlIGludG8gYWNjb3VudCBhIGRpZmZlcmVudCBvcmlnaW5hdG9yLgpAQCAtMTQyLDcgKzEzMyw3
IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGVzdHJv
eSgpCiAgICAgY2xlYXJDbGllbnRXcmFwcGVyKCk7CiAKICAgICAvLyAiZGVsZXRlIHRoaXMiIGFu
ZCBtX21haW5UaHJlYWRMb2FkZXI6OmRlcmVmKCkgb24gdGhlIHdvcmtlciBvYmplY3QncyB0aHJl
YWQuCi0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza1RvV29ya2VyT2JqZWN0KGNyZWF0ZUNh
bGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZERlc3Ryb3ksIHRoaXMpKTsK
KyAgICBtX2xvYWRlclByb3h5LT5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygm
TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZERlc3Ryb3ksIHRoaXMpKTsKIH0KIAogdm9pZCBX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ2FuY2Vs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQ
dHIpCkBAIC0xNTgsNyArMTQ5LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkMKIAogdm9pZCBX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpjYW5jZWwoKQogewotICAg
IG1fbWVzc2FnaW5nUHJveHkucG9zdFRhc2tUb1dvcmtlck9iamVjdChjcmVhdGVDYWxsYmFja1Rh
c2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDYW5jZWwsIHRoaXMpKTsKKyAgICBtX2xv
YWRlclByb3h5LT5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVh
ZEJyaWRnZTo6bWFpblRocmVhZENhbmNlbCwgdGhpcykpOwogICAgIFRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZUxvYWRl
ckNsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwogICAgIGlmICgh
Y2xpZW50V3JhcHBlci0+ZG9uZSgpKSB7CiAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgaGFzbid0
IHJlYWNoZWQgYSB0ZXJtaW5hdGlvbiBzdGF0ZSwgdGhlbiB0cmFuc2l0aW9uIGl0IGJ5IHNlbmRp
bmcgYSBjYW5jZWxsYXRpb24gZXJyb3IuCkBAIC0xODMsNyArMTc0LDcgQEAgc3RhdGljIHZvaWQg
d29ya2VyQ29udGV4dERpZFNlbmREYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFJlZlB0cjxUaHIKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJp
ZGdlOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIG1fbWVzc2FnaW5nUHJveHkucG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29u
dGV4dERpZFNlbmREYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ5dGVzU2VudCwgdG90YWxC
eXRlc1RvQmVTZW50KSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS0+cG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERp
ZFNlbmREYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1Rv
QmVTZW50KSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRS
ZWNlaXZlUmVzcG9uc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRo
cmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBhdXRvX3B0
cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiByZXNwb25zZURhdGEpCkBAIC0xOTUs
NyArMTg2LDcgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFJlY2VpdmVSZXNwb25zZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWYKIAogdm9pZCBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0
RGlkUmVjZWl2ZVJlc3BvbnNlLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHJlc3BvbnNlKSwgbV90
YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250
ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVSZXNwb25zZSwg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCByZXNwb25zZSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJD
bGllbnRXcmFwcGVyLCBhdXRvX3B0cjxWZWN0b3I8Y2hhcj4gPiB2ZWN0b3JEYXRhKQpAQCAtMjA4
LDcgKzE5OSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRn
ZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwKIHsKICAgICBhdXRvX3B0cjxWZWN0
b3I8Y2hhcj4gPiB2ZWN0b3IobmV3IFZlY3RvcjxjaGFyPihsZW5ndGhSZWNlaXZlZCkpOyAvLyBu
ZWVkcyB0byBiZSBhbiBhdXRvX3B0ciBmb3IgdXNhZ2Ugd2l0aCBjcmVhdGVDYWxsYmFja1Rhc2su
CiAgICAgbWVtY3B5KHZlY3Rvci0+ZGF0YSgpLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Ci0gICAg
bV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgdmVjdG9yKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS0+cG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERp
ZFJlY2VpdmVEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHZlY3RvciksIG1fdGFza01vZGUp
OwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKQEAg
LTIxOSw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdAogCiB2b2lkIFdvcmtlclRo
cmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmcodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQogewotICAgIG1fbWVzc2FnaW5nUHJveHkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmcsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgaWRlbnRpZmllciksIG1fdGFza01v
ZGUpOworICAgIG1fbG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChj
cmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nLCBtX3dvcmtl
ckNsaWVudFdyYXBwZXIsIGlkZW50aWZpZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZv
aWQgd29ya2VyQ29udGV4dERpZEZhaWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTIzMCw3ICsyMjEsNyBAQCBzdGF0aWMg
dm9pZCB3b3JrZXJDb250ZXh0RGlkRmFpbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBSZWZQdHI8VGhyZWFkYQogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCcmlkZ2U6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9t
ZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmFpbCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBlcnJv
ciksIG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29y
a2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGYWlsLCBtX3dv
cmtlckNsaWVudFdyYXBwZXIsIGVycm9yKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdvcmtlckNvbnRleHREaWRGYWlsUmVkaXJlY3RDaGVjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNs
aWVudFdyYXBwZXIpCkBAIC0yNDEsNyArMjMyLDcgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4
dERpZEZhaWxSZWRpcmVjdENoZWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFIK
IAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRGYWls
UmVkaXJlY3RDaGVjaygpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVU
b1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmFpbFJl
ZGlyZWN0Q2hlY2ssIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOworICAgIG1f
bG9hZGVyUHJveHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckNvbnRleHREaWRGYWlsUmVkaXJlY3RDaGVjaywgbV93b3JrZXJDbGllbnRX
cmFwcGVyKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGll
bnRXcmFwcGVyLCBhdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiByZXNw
b25zZURhdGEpCkBAIC0yNTMsNyArMjQ0LDcgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihTY3JpcHRFeGVjdXRpb25Db24KIAog
dm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRl
eHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2FuY2VsbGF0aW9uLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHJlc3BvbnNlKSwgbV90YXNr
TW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbiwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCByZXNwb25zZSksIG1fdGFza01v
ZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmgKaW5kZXggOTgxN2ZlYS4uNjM3NzFkNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgICBzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0
OwogICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7Ci0gICAgY2xhc3MgV29ya2VyTWVzc2FnaW5nUHJv
eHk7CisgICAgY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7CiAgICAgc3RydWN0IENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGE7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1
ZXN0RGF0YTsKIApAQCAtODYsNyArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IC8vCiAgICAgICAgIC8vIGNhc2UgMS4gd29ya2VyLnRlcm1pbmF0ZSBpcyBjYWxsZWQuCiAgICAg
ICAgIC8vICAgIEluIHRoaXMgY2FzZSwgbm8gbW9yZSB0YXNrcyBhcmUgcG9zdGVkIGZyb20gdGhl
IHdvcmtlciBvYmplY3QncyB0aHJlYWQgdG8gdGhlIHdvcmtlcgotICAgICAgICAvLyAgICBjb250
ZXh0J3MgdGhyZWFkIC0tIFdvcmtlck1lc3NhZ2luZ1Byb3h5IGVuZm9yY2VzIHRoaXMuCisgICAg
ICAgIC8vICAgIGNvbnRleHQncyB0aHJlYWQgLS0gV29ya2VyQ29udGV4dFByb3h5IGltcGxlbWVu
dGF0aW9uIGVuZm9yY2VzIHRoaXMuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIGNhc2UgMi4geGhy
IGdldHMgYWJvcnRlZCBhbmQgdGhlIHdvcmtlciBjb250ZXh0IGNvbnRpbnVlcyBydW5uaW5nLgog
ICAgICAgICAvLyAgICBUaGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIgaGFzIHRoZSB1
bmRlcmx5aW5nIGNsaWVudCBjbGVhcmVkLCBzbyBubyBtb3JlIGNhbGxzCkBAIC05Nyw3ICs5Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2xhc3MgTWFpblRocmVhZEJyaWRnZSA6
IFRocmVhZGFibGVMb2FkZXJDbGllbnQgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAv
LyBBbGwgZXhlY3V0ZWQgb24gdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFkLgotICAgICAgICAg
ICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFw
cGVyPiwgV29ya2VyTWVzc2FnaW5nUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENy
ZWRlbnRpYWxzKTsKKyAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclByb3h5KiwgY29uc3QgU3Ry
aW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyk7CiAgICAgICAgICAgICB2b2lkIGNhbmNlbCgp
OwogICAgICAgICAgICAgdm9pZCBkZXN0cm95KCk7CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAKICAg
ICAgICAgICAgIC8vIE1heSBiZSB1c2VkIG9uIGVpdGhlciB0aHJlYWQuCi0gICAgICAgICAgICBX
b3JrZXJNZXNzYWdpbmdQcm94eSYgbV9tZXNzYWdpbmdQcm94eTsKKyAgICAgICAgICAgIFdvcmtl
ckxvYWRlclByb3h5KiBtX2xvYWRlclByb3h5OwogCiAgICAgICAgICAgICAvLyBGb3IgdXNlIG9u
IHRoZSBtYWluIHRocmVhZC4KICAgICAgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmggYi9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyTG9hZGVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kYWY5ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRl
clByb3h5LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV29ya2VyTG9hZGVyUHJveHlfaAorI2Rl
ZmluZSBXb3JrZXJMb2FkZXJQcm94eV9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAg
Ly8gQSBwcm94eSB0byB0YWxrIHRvIHRoZSBsb2FkZXIgY29udGV4dC4gTm9ybWFsbHksIHRoZSBk
b2N1bWVudCBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBwcm92aWRlcyBsb2FkaW5nIHNlcnZp
Y2VzIGZvciB0aGUgc3Vib3JkaW5hdGUgd29ya2Vycy4gVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMg
Mi13YXkKKyAgICAvLyBjb21tdW5pY2F0aW9ucyB0byB0aGUgRG9jdW1lbnQgY29udGV4dCBhbmQg
YmFjayB0byB0aGUgd29ya2VyLgorICAgIC8vIE5vdGUgdGhhdCBpbiBtdWx0aS1wcm9jZXNzIGJy
b3dzZXJzLCB0aGUgV29ya2VyIG9iamVjdCBjb250ZXh0IGFuZCB0aGUgRG9jdW1lbnQKKyAgICAv
LyBjb250ZXh0IGNhbiBiZSBkaXN0aW5jdC4KKyAgICBjbGFzcyBXb3JrZXJMb2FkZXJQcm94eSB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJMb2FkZXJQcm94eSgpIHt9CisK
KyAgICAgICAgLy8gUG9zdHMgYSB0YXNrIHRvIHRoZSB0aHJlYWQgd2hpY2ggcnVucyB0aGUgbG9h
ZGluZyBjb2RlIChub3JtYWxseSwgdGhlIG1haW4gdGhyZWFkKS4KKyAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPikgPSAwOworCisgICAgICAgIC8vIFBvc3RzdCBjYWxsYmFja3MgZnJvbSBsb2FkaW5nIGNv
ZGUgdG8gdGhlIFdvcmtlckNvbnRleHQuIFRoZSAnbW9kZScgaXMgdXNlZCB0byBkaWZmZXJlbnRp
YXRlCisgICAgICAgIC8vIHNwZWNpZmljIHN5bmNocm9ub3VzIGxvYWRpbmcgcmVxdWVzdHMgc28g
dGhleSBjYW4gYmUgJ25lc3RlZCcsIHBlciBzcGVjLgorICAgICAgICB2aXJ0dWFsIHZvaWQgcG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYgbW9kZSkgPSAwOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8g
V29ya2VyTG9hZGVyUHJveHlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1l
c3NhZ2luZ1Byb3h5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5j
cHAKaW5kZXggMDdlZTRmOS4uZTkyNjk0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck1lc3NhZ2luZ1Byb3h5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgV29ya2VyTWVzc2FnaW5nUHJveHk6On5X
b3JrZXJNZXNzYWdpbmdQcm94eSgpCiAKIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnN0YXJ0
V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0gICAgUmVmUHRyPFdvcmtlclRocmVh
ZD4gdGhyZWFkID0gV29ya2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNv
dXJjZUNvZGUsIHRoaXMpOworICAgIFJlZlB0cjxXb3JrZXJUaHJlYWQ+IHRocmVhZCA9IFdvcmtl
clRocmVhZDo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VDb2RlLCB0aGlzLCB0
aGlzKTsKICAgICB3b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7CiAgICAgdGhyZWFkLT5zdGFy
dCgpOwogfQpAQCAtMjIyLDExICsyMjIsNiBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpw
b3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAg
IG1fcXVldWVkRWFybHlUYXNrcy5hcHBlbmQoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVh
dGUobWVzc2FnZSkpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1Rv
V29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2spCi17Ci0gICAgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KHRhc2ssIFdvcmtlclJ1
bkxvb3A6OmRlZmF1bHRNb2RlKCkpOwotfQotCiB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpw
b3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKG1fYXNr
ZWRUb1Rlcm1pbmF0ZSkKQEAgLTIzNiw4ICsyMzEsMTAgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3UKICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBt
b2RlKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb1dvcmtlck9i
amVjdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit2b2lk
IFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFBhc3NSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKIHsKKyAgICAvLyBGSVhNRTogSW4gY2FzZSBv
ZiBuZXN0ZWQgd29ya2VycywgdGhpcyBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHJvb3QgRG9j
dW1lbnQgY29udGV4dC4KKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2sodGFzayk7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5o
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggOGQ4MWRlYi4u
N2ZjOTc5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5
LmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTMxLDYg
KzMxLDcgQEAKIAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgog
I2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdvcmtlcjsKICAgICBjbGFzcyBXb3JrZXJUaHJlYWQ7
CiAKLSAgICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQcm94eSA6IHB1YmxpYyBXb3JrZXJDb250ZXh0
UHJveHksIHB1YmxpYyBXb3JrZXJPYmplY3RQcm94eSwgTm9uY29weWFibGUgeworICAgIGNsYXNz
IFdvcmtlck1lc3NhZ2luZ1Byb3h5IDogcHVibGljIFdvcmtlckNvbnRleHRQcm94eSwgcHVibGlj
IFdvcmtlck9iamVjdFByb3h5LCBwdWJsaWMgV29ya2VyTG9hZGVyUHJveHksIE5vbmNvcHlhYmxl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5KFdvcmtlciopOwog
CkBAIC02NSw5ICs2NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwogCi0gICAgICAgIHZv
aWQgcG9zdFRhc2tUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+KTsKLSAgICAgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyQ29udGV4dChQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLSAgICAgICAgdm9pZCBwb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24g
b2YgV29ya2VyTG9hZGVyUHJveHkuCisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxl
ZCBvbiBkaWZmZXJlbnQgdGhyZWFkcyB0byBzY2hlZHVsZSBsb2FkaW5nCisgICAgICAgIC8vIHJl
cXVlc3RzIGFuZCB0byBzZW5kIGNhbGxiYWNrcyBiYWNrIHRvIFdvcmtlckNvbnRleHQuCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2Rl
VG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4s
IGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAgICAgICAgdm9pZCB3b3JrZXJUaHJlYWRDcmVhdGVk
KFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5k
ZXggZDEwMjZiMS4uYmQ4NjMxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRo
cmVhZC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTYyLDEz
ICs2MiwxNCBAQCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YTo6V29ya2VyVGhyZWFkU3RhcnR1cERh
dGEoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdAogewogfQogCi1QYXNzUmVmUHRyPFdv
cmtlclRocmVhZD4gV29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJP
YmplY3RQcm94eSogd29ya2VyT2JqZWN0UHJveHkpCitQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4g
V29ya2VyVGhyZWFkOjpjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIFdvcmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkwsIHVzZXJB
Z2VudCwgc291cmNlQ29kZSwgd29ya2VyT2JqZWN0UHJveHkpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgd29y
a2VyTG9hZGVyUHJveHksIHdvcmtlck9iamVjdFByb3h5KSk7CiB9CiAKLVdvcmtlclRocmVhZDo6
V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9i
amVjdFByb3h5KQorV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0
VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdvcmtlck9iamVjdFByb3h5KiB3
b3JrZXJPYmplY3RQcm94eSkKICAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAsIG1fd29ya2VyTG9h
ZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAgLCBtX3dvcmtlck9iamVjdFByb3h5KHdv
cmtlck9iamVjdFByb3h5KQogICAgICwgbV9zdGFydHVwRGF0YShXb3JrZXJUaHJlYWRTdGFydHVw
RGF0YTo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzb3VyY2VDb2RlKSkKIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaCBiL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuaAppbmRleCBmMWE4YTUyLi5lMWY3MjI4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5oCkBAIC0zOSwxMiArMzksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtV
Ukw7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CisgICAgY2xh
c3MgV29ya2VyTG9hZGVyUHJveHk7CiAgICAgY2xhc3MgV29ya2VyT2JqZWN0UHJveHk7CiAgICAg
c3RydWN0IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhOwogCiAgICAgY2xhc3MgV29ya2VyVGhyZWFk
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3Jp
cHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUs
IFdvcmtlck9iamVjdFByb3h5Kik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRo
cmVhZD4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkqLCBXb3JrZXJP
YmplY3RQcm94eSopOwogICAgICAgICB+V29ya2VyVGhyZWFkKCk7CiAKICAgICAgICAgYm9vbCBz
dGFydCgpOwpAQCAtNTIsMTYgKzUzLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQogICAgICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9
CisgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsg
cmV0dXJuIG1fd29ya2VyTG9hZGVyUHJveHk7IH0KICAgICAgICAgV29ya2VyT2JqZWN0UHJveHkq
IHdvcmtlck9iamVjdFByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3RQcm94eTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmpl
Y3RQcm94eSopOworICAgICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5
KiwgV29ya2VyT2JqZWN0UHJveHkqKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCogd29ya2VyVGhy
ZWFkU3RhcnQodm9pZCopOwogICAgICAgICB2b2lkKiB3b3JrZXJUaHJlYWQoKTsKIAogICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CiAgICAgICAgIFdvcmtlclJ1bkxvb3AgbV9y
dW5Mb29wOworICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsK
ICAgICAgICAgV29ya2VyT2JqZWN0UHJveHkqIG1fd29ya2VyT2JqZWN0UHJveHk7CiAKICAgICAg
ICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dDsK
</data>
<flag name="review"
          id="15663"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31077</attachid>
            <date>2009-06-08 18:37:40 -0700</date>
            <delta_ts>2009-06-08 18:42:57 -0700</delta_ts>
            <desc>Updated according to review comments.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>34506</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTc5OWU4ZS4uNzVjYWJhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAwOS0wNi0wOCAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjYxMjYKKyAgICAgICAgUmVmYWN0b3IgbWV0aG9kcyBvZiBXb3JrZXJNZXNzYWdpbmdQcm94eSB1
c2VkIHRvIHRhbGsgdG8gbWFpbi10aHJlYWQgbG9hZGVyIGludG8gbmV3IGludGVyZmFjZS4KKwor
ICAgICAgICBTcGxpdCBhIGNvdXBsZSBvZiBtZXRob2RzIHVzZWQgdG8gc2NoZWR1bGUgY3Jvc3Mt
dGhyZWFkIHRhc2tzIGJldHdlZW4gd29ya2VyIHRocmVhZCBhbmQgbG9hZGVyIHRocmVhZAorICAg
ICAgICBpbXBsZW1lbnRlZCBvbiBXb3JrZXJNZXNzYWdpbmdQcm94eSBpbnRvIGEgc2VwYXJhdGUg
aW50ZXJmYWNlIHNvIHRoZSBsb2FkaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICBD
aHJvbWl1bSdzIHdvcmtlcnMuCisKKyAgICAgICAgTm8gY2hhbmdlcyBpbiBmdW5jdGlvbmFsaXR5
IHNvIG5vIHRlc3RzIGFkZGVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBXb3JrZXJMb2FkZXJQcm94eS5o
IHRvIHRoZSBidWxpZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUpOiBXb3JrZXJUaHJlYWQ6Ondvcmtlck9iamVjdFByb3h5KCkgbm93IHJldHVybnMgJiBp
bnN0ZWFkIG9mICoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KTogc2FtZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6fldvcmtlckNvbnRleHQpOiBzYW1lLgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKTogc2FtZS4KKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmFkZE1lc3NhZ2UpOiBzYW1lLgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UpOiBzYW1lLgorCisgICAgICAgICogbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6IAorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVh
ZEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRTZW5kRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdl
OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmluaXNo
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWxSZWRpcmVjdENoZWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbik6CisgICAgICAgIFVzZSBXb3JrZXJM
b2FkZXJQcm94eSBpbnN0ZWFkIG9mIFdvcmtlck1lc3NhZ2luZ1Byb3h5IGZvciB0aGUgTWFpblRo
cmVhZEJyaWRnZS4KKyAgICAgICAgTW9zdGx5IHJlbmFtZS4KKworICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0
ZUxvYWRlcik6CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHVzaW5nIFdvcmtlckxvYWRlclByb3h5
IGluc3RlYWQgb2YgV29ya2VyTWVzc2FnaW5nUHJveHksIHRoZSBjaGVjayBmb3IKKyAgICAgICAg
QXNrZWRUb1Rlcm1pbmF0ZSBpcyByZW1vdmVkLiBJdCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRp
b24gZm9yIGEgdmVyeSBzbWFsbCBudW1iZXIgb2YgY2FzZXMKKyAgICAgICAgd2hlbiB3b3JrZXIg
dGVybWluYXRpb24gaXMgcmVxdWVzdGVkIGEgdmVyeSBzaG9ydCB0aW1lIGJlZm9yZSB0aGUgcmVx
dWVzdCB0byBsb2FkIHNvbWV0aGluZworICAgICAgICAoWEhSIG9yIGltcG9ydFNjcmlwdCkgd2Fz
IGRpc3BhdGNoZWQgb24gdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgICogbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgTm93IGtlZXBzIGEgcG9pbnRlciB0byBXb3Jr
ZXJMb2FkZXJQcm94eSByYXRoZXIgdGhlbiB0byBhIFdvcmtlck1lc3NhZ2luZ1Byb3h5LiBUaGlz
IGFsbG93cworICAgICAgICB0byBpbXBsZW1lbnQgV29ya2VyVGhyZWFkYWJsZUxvYWRlciBmb3Ig
Q2hyb21pdW0uCisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckxvYWRlclByb3h5Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHk6On5Xb3JrZXJMb2FkZXJQcm94
eSk6CisKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrVG9Mb2FkZXIp
OiBBZGRlZCBBU1NFUlQgc2luY2UgdGhpcyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgbmVz
dGVkIHdvcmtlcnMuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oOgor
ICAgICAgICBEZXJpdmVkIGZyb20gV29ya2VyTG9hZGVyUHJveHksIHRoZSBtZXRob2RzIGZvciBw
b3N0aW5nIHRhc2tzIGNyb3NzLXRocmVhZCBhcmUgbm93IHZpcnR1YWwuCisgICAgICAgIFJlbW92
ZWQgdW51c2VkIHBvc3RUYXNrVG9Xb3JrZXJDb250ZXh0KCkgbWV0aG9kLgorCisgICAgICAgICog
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWQ6OndvcmtlckxvYWRlclByb3h5KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
clRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJUaHJlYWQuaDogCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6Ondvcmtlckxv
YWRlclByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyT2JqZWN0
UHJveHkpOgorICAgICAgICBXb3JrZXJUaHJlYWQgZ2V0cyBhIG5ldyBtZW1iZXIgb2YgdHlwZSBX
b3JrZXJMb2FkZXJQcm94eSYsIGFuZCBhY2Nlc3Nvci4KKyAgICAgICAgQWxzbywgZXhpc3Rpbmcg
V29ya2VyT2JqZWN0UHJveHkqIG1lbWJlciBpcyBub3cgV29ya2VyT2JqZWN0UHJveHkmIGJlY2F1
c2UgaXQgY2FuJ3QgYmUgbnVsbC4KKwogMjAwOS0wNi0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggNWZkMTQyMi4uMTUxYzAxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMjcxLDYgKzIyNzEsNyBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBc
CiAJV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBcCiAJV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHRQcm94eS5oIFwKKwlXZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9hZGVyUHJveHku
aCBcCiAJV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCiAJV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckxvY2F0aW9uLmggXAogCVdlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQ
cm94eS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTg0YmVh
YS4uNjA1MmNlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC05MzY3
LDYgKzkzNjcsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJMb2FkZXJQcm94eS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd29ya2Vyc1xXb3JrZXJMb2Nh
dGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBiMTRiMDUxLi5jN2IyN2VlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTE4NUJD
RjI5MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBFQTI2MiAvKiBU
aHJlYWRUaW1lcnMuaCAqLzsgfTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRp
bWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4
ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CiAJCTE4ODYwNEI0
MEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTg4NjA0QjIwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVy
LmggKi87IH07CisJCTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThGODMx
QjcwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi87IH07CiAJCTFBMEQ1
NzM2MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAv
KiBPdmVyZmxvd0V2ZW50LmNwcCAqLzsgfTsKIAkJMUEwRDU3MzcwQTVDNzdGRTAwN0VERDRDIC8q
IE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBMEQ1NzM1MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmggKi87IH07
CiAJCTFBMEQ1NzQwMEE1Qzc4NjcwMDdFREQ0QyAvKiBKU092ZXJmbG93RXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3M0UwQTVDNzg2
NzAwN0VERDRDIC8qIEpTT3ZlcmZsb3dFdmVudC5jcHAgKi87IH07CkBAIC01MDYwLDYgKzUwNjEs
NyBAQAogCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFRpbWVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NVGltZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODg2MDRCMjBGMkU2NTRBMDAwQjY0NDMgLyogRE9N
VGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThGODMxQjcwRkQ0OEM3ODAwRDhDNTZCIC8qIFdv
cmtlckxvYWRlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtl
ckxvYWRlclByb3h5Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlckxvYWRlclByb3h5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVy
Zmxvd0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPdmVy
Zmxvd0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3MzUwQTVD
NzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE92ZXJmbG93RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUEwRDU3MzgwQTVDNzgxMjAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBPdmVyZmxvd0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk3NjMsNiArOTc2NSw3IEBACiAJCTJFNDM0NjMxMEY1NDZBNjgwMEIwRjFCQSAvKiB3
b3JrZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkx
OEY4MzFCNzBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCAqLywKIAkJCQky
RTQzNDYzMjBGNTQ2QTgyMDBCMEYxQkEgLyogR2VuZXJpY1dvcmtlclRhc2suaCAqLywKIAkJCQky
RTQzNDYzMzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCAqLywKIAkJCQkyRTQzNDYzNDBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggKi8sCkBAIC0xNjc4Nyw2ICsxNjc5MCw3IEBACiAJ
CQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGRkMzkxYmMuLmJjZjEwN2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAt
MTEwLDcgKzExMCw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAgICAgQ29tcGxldGlvbiBj
b21wID0gSlNDOjpldmFsdWF0ZShleGVjLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmds
b2JhbFNjb3BlQ2hhaW4oKSwgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJDb250
ZXh0V3JhcHBlcik7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRGF0YSgpLT50
aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKLSAgICBtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53
b3JrZXJPYmplY3RQcm94eSgpLT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXJDb250ZXh0
LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CisgICAgbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+
d29ya2VyT2JqZWN0UHJveHkoKS5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXJDb250ZXh0
LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CiAKICAgICBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBO
b3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJu
IGNvbXAudmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCmluZGV4IGNmMmExODYuLmIzZWRlMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCBTY3JpcHRW
YWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlKQogICAgIH0KIAogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3Vs
dCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNvZGUudXJs
KCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCkgLSAxKTsKLSAgICBtX3dvcmtlckNv
bnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLT5yZXBvcnRQZW5kaW5nQWN0aXZp
dHkobV93b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CisgICAgbV93b3JrZXJD
b250ZXh0LT50aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5yZXBvcnRQZW5kaW5nQWN0aXZp
dHkobV93b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CiAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVh
ZGFibGVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5j
cHAKaW5kZXggYmVhZjA2MS4uNDc0MDJjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgorI2luY2x1ZGUgIldv
cmtlckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTUzLDEzICs1MywxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHlNb2RlW10gPSAibG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGUiOwogCi0vLyBGSVhN
RTogVGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBjYW4gdXBjYXN0IHdvcmtlciBvYmplY3QgcHJveHkg
dG8gV29ya2VyTWVzc2FnaW5nUHJveHkgd2lsbCBub3QgYmUgdHJ1ZSBpbiBtdWx0aS1wcm9jZXNz
IGltcGxlbWVudGF0aW9uLgogV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJs
ZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U25pZmYgY29udGVudFNu
aWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscykKICAgICA6IG1fd29ya2Vy
Q29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRocmVh
ZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpjcmVhdGUoY2xpZW50KSkKLSAgICAsIG1fYnJpZGdl
KCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCAqKHN0YXRpY19j
YXN0PFdvcmtlck1lc3NhZ2luZ1Byb3h5Kj4obV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyT2JqZWN0UHJveHkoKSkpLCB0YXNrTW9kZSwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFNuaWZmLCBzdG9y
ZWRDcmVkZW50aWFscykpKQorICAgICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVhZEJyaWRnZSht
X3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxv
YWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50
U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzKSkpCiB7CiB9CiAKQEAgLTkyLDE0ICs5MCwxNCBAQCB2
b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNhbmNlbCgpCiAgICAgbV9icmlkZ2UuY2FuY2Vs
KCk7CiB9CiAKLVdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Ok1haW5U
aHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29y
a2VyQ2xpZW50V3JhcHBlciwgV29ya2VyTWVzc2FnaW5nUHJveHkmIG1lc3NhZ2luZ1Byb3h5LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlLAorV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVh
ZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGll
bnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVy
UHJveHksIGNvbnN0IFN0cmluZyYgdGFza01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscykKICAgICA6IG1f
d29ya2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQotICAgICwgbV9tZXNzYWdp
bmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICAsIG1fbG9hZGVyUHJveHkobG9hZGVyUHJveHkp
CiAgICAgLCBtX3Rhc2tNb2RlKHRhc2tNb2RlLmNvcHkoKSkKIHsKICAgICBBU1NFUlQobV93b3Jr
ZXJDbGllbnRXcmFwcGVyLmdldCgpKTsKLSAgICBtX21lc3NhZ2luZ1Byb3h5LnBvc3RUYXNrVG9X
b3JrZXJPYmplY3QoY3JlYXRlQ2FsbGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhy
ZWFkQ3JlYXRlTG9hZGVyLCB0aGlzLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50
U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzKSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1Rv
TG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENy
ZWF0ZUxvYWRlciwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZm
LCBzdG9yZWRDcmVkZW50aWFscykpOwogfQogCiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjp+TWFpblRocmVhZEJyaWRnZSgpCkBAIC0xMDgsMTYgKzEwNiw5IEBAIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6On5NYWluVGhyZWFkQnJpZGdl
KCkKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWlu
VGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5U
aHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0
RGF0YT4gcmVxdWVzdERhdGEsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVu
dFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMp
CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgYXNzZXJ0IGZhaWxzIGZvciBuZXN0ZWQgd29ya2Vycy4g
IFJlbW92aW5nIHRoZSBhc3NlcnQgd291bGQgYWxsb3cgaXQgdG8gd29yaywKLSAgICAvLyBidXQg
dGhlbiB0aGVyZSB3b3VsZCBiZSBvbmUgV29ya2VyVGhyZWFkYWJsZUxvYWRlciBpbiBldmVyeSBp
bnRlcm1lZGlhdGUgd29ya2VyIHNpbXBseQotICAgIC8vIGNoYWluaW5nIHRoZSByZXF1ZXN0cywg
d2hpY2ggaXMgbm90IHZlcnkgZ29vZC4gSW5zdGVhZCwgdGhlIHBvc3RUYXNrVG9Xb3JrZXJPYmpl
Y3Qgc2hvdWxkIGJlIGEKLSAgICAvLyBwb3N0VGFza1RvRG9jdW1lbnRDb250ZXh0LgogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7
CiAKLSAgICBpZiAodGhpc1B0ci0+bV9tZXNzYWdpbmdQcm94eS5hc2tlZFRvVGVybWluYXRlKCkp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIC8vIEZJWE1FOiB0aGUgY3JlYXRlZCBsb2FkZXIgaGFz
IG5vIGtub3dsZWRnZSBvZiB0aGUgb3JpZ2luIG9mIHRoZSB3b3JrZXIgZG9pbmcgdGhlIGxvYWQg
cmVxdWVzdC4KICAgICAvLyBCYXNpY2FsbHkgZXZlcnkgc2V0dGluZyBkb25lIGluIFN1YnJlc291
cmNlTG9hZGVyOjpjcmVhdGUgKGluY2x1ZGluZyB0aGUgY29udGVudHMgb2YgYWRkRXh0cmFGaWVs
ZHNUb1JlcXVlc3QpCiAgICAgLy8gbmVlZHMgdG8gYmUgZXhhbWluZWQgZm9yIGhvdyBpdCBzaG91
bGQgdGFrZSBpbnRvIGFjY291bnQgYSBkaWZmZXJlbnQgb3JpZ2luYXRvci4KQEAgLTE0Miw3ICsx
MzMsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRl
c3Ryb3koKQogICAgIGNsZWFyQ2xpZW50V3JhcHBlcigpOwogCiAgICAgLy8gImRlbGV0ZSB0aGlz
IiBhbmQgbV9tYWluVGhyZWFkTG9hZGVyOjpkZXJlZigpIG9uIHRoZSB3b3JrZXIgb2JqZWN0J3Mg
dGhyZWFkLgotICAgIG1fbWVzc2FnaW5nUHJveHkucG9zdFRhc2tUb1dvcmtlck9iamVjdChjcmVh
dGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWREZXN0cm95LCB0aGlz
KSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFz
aygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZERlc3Ryb3ksIHRoaXMpKTsKIH0KIAogdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ2Fu
Y2VsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRo
aXNQdHIpCkBAIC0xNTgsNyArMTQ5LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpN
YWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkMKIAogdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpjYW5jZWwoKQogewot
ICAgIG1fbWVzc2FnaW5nUHJveHkucG9zdFRhc2tUb1dvcmtlck9iamVjdChjcmVhdGVDYWxsYmFj
a1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDYW5jZWwsIHRoaXMpKTsKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZNYWluVGhy
ZWFkQnJpZGdlOjptYWluVGhyZWFkQ2FuY2VsLCB0aGlzKSk7CiAgICAgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50V3JhcHBlcio+KG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7CiAgICAgaWYg
KCFjbGllbnRXcmFwcGVyLT5kb25lKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCBoYXNu
J3QgcmVhY2hlZCBhIHRlcm1pbmF0aW9uIHN0YXRlLCB0aGVuIHRyYW5zaXRpb24gaXQgYnkgc2Vu
ZGluZyBhIGNhbmNlbGxhdGlvbiBlcnJvci4KQEAgLTE4Myw3ICsxNzQsNyBAQCBzdGF0aWMgdm9p
ZCB3b3JrZXJDb250ZXh0RGlkU2VuZERhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUmVmUHRyPFRocgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRC
cmlkZ2U6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5w
b3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0RGlkU2VuZERhdGEsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgYnl0ZXNTZW50LCB0b3Rh
bEJ5dGVzVG9CZVNlbnQpLCBtX3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHRE
aWRTZW5kRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNU
b0JlU2VudCksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlk
UmVjZWl2ZVJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgYXV0b19w
dHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gcmVzcG9uc2VEYXRhKQpAQCAtMTk1
LDcgKzE4Niw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlUmVzcG9uc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmCiAKIHZvaWQgV29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIG1fbWVzc2FnaW5nUHJveHkucG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4
dERpZFJlY2VpdmVSZXNwb25zZSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCByZXNwb25zZSksIG1f
dGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250
ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVSZXNwb25zZSwg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCByZXNwb25zZSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJD
bGllbnRXcmFwcGVyLCBhdXRvX3B0cjxWZWN0b3I8Y2hhcj4gPiB2ZWN0b3JEYXRhKQpAQCAtMjA4
LDcgKzE5OSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRn
ZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwKIHsKICAgICBhdXRvX3B0cjxWZWN0
b3I8Y2hhcj4gPiB2ZWN0b3IobmV3IFZlY3RvcjxjaGFyPihsZW5ndGhSZWNlaXZlZCkpOyAvLyBu
ZWVkcyB0byBiZSBhbiBhdXRvX3B0ciBmb3IgdXNhZ2Ugd2l0aCBjcmVhdGVDYWxsYmFja1Rhc2su
CiAgICAgbWVtY3B5KHZlY3Rvci0+ZGF0YSgpLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7Ci0gICAg
bV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgdmVjdG9yKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlk
UmVjZWl2ZURhdGEsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgdmVjdG9yKSwgbV90YXNrTW9kZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQpAQCAt
MjE5LDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5n
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0CiAKIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmlu
aXNoTG9hZGluZywgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBpZGVudGlmaWVyKSwgbV90YXNrTW9k
ZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZywgbV93b3JrZXJD
bGllbnRXcmFwcGVyLCBpZGVudGlmaWVyKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdvcmtlckNvbnRleHREaWRGYWlsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC0yMzAsNyArMjIxLDcgQEAgc3RhdGljIHZv
aWQgd29ya2VyQ29udGV4dERpZEZhaWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UmVmUHRyPFRocmVhZGEKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFk
QnJpZGdlOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG1fbWVz
c2FnaW5nUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNr
VGFzaygmd29ya2VyQ29udGV4dERpZEZhaWwsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgZXJyb3Ip
LCBtX3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGYWlsLCBtX3dvcmtl
ckNsaWVudFdyYXBwZXIsIGVycm9yKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdv
cmtlckNvbnRleHREaWRGYWlsUmVkaXJlY3RDaGVjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVu
dFdyYXBwZXIpCkBAIC0yNDEsNyArMjMyLDcgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERp
ZEZhaWxSZWRpcmVjdENoZWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFIKIAog
dm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRGYWlsUmVk
aXJlY3RDaGVjaygpCiB7Ci0gICAgbV9tZXNzYWdpbmdQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dv
cmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmFpbFJlZGly
ZWN0Q2hlY2ssIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOworICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyQ29udGV4dERpZEZhaWxSZWRpcmVjdENoZWNrLCBtX3dvcmtlckNsaWVudFdyYXBw
ZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdy
YXBwZXIsIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IHJlc3BvbnNl
RGF0YSkKQEAgLTI1Myw3ICsyNDQsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbgogCiB2b2lk
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKLSAgICBtX21lc3NhZ2luZ1Byb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChj
cmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
YW5jZWxsYXRpb24sIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgcmVzcG9uc2UpLCBtX3Rhc2tNb2Rl
KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVh
dGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5j
ZWxsYXRpb24sIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgcmVzcG9uc2UpLCBtX3Rhc2tNb2RlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
V29ya2VyVGhyZWFkYWJsZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJs
ZUxvYWRlci5oCmluZGV4IDk4MTdmZWEuLmU1ODQ5NTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAorKysgYi9XZWJDb3JlL2xvYWRlci9Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CiAgICAgc3RydWN0IFJlc291cmNlUmVxdWVzdDsKICAg
ICBjbGFzcyBXb3JrZXJDb250ZXh0OwotICAgIGNsYXNzIFdvcmtlck1lc3NhZ2luZ1Byb3h5Owor
ICAgIGNsYXNzIFdvcmtlckxvYWRlclByb3h5OwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhOwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERh
dGE7CiAKQEAgLTg2LDcgKzg2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLwog
ICAgICAgICAvLyBjYXNlIDEuIHdvcmtlci50ZXJtaW5hdGUgaXMgY2FsbGVkLgogICAgICAgICAv
LyAgICBJbiB0aGlzIGNhc2UsIG5vIG1vcmUgdGFza3MgYXJlIHBvc3RlZCBmcm9tIHRoZSB3b3Jr
ZXIgb2JqZWN0J3MgdGhyZWFkIHRvIHRoZSB3b3JrZXIKLSAgICAgICAgLy8gICAgY29udGV4dCdz
IHRocmVhZCAtLSBXb3JrZXJNZXNzYWdpbmdQcm94eSBlbmZvcmNlcyB0aGlzLgorICAgICAgICAv
LyAgICBjb250ZXh0J3MgdGhyZWFkIC0tIFdvcmtlckNvbnRleHRQcm94eSBpbXBsZW1lbnRhdGlv
biBlbmZvcmNlcyB0aGlzLgogICAgICAgICAvLwogICAgICAgICAvLyBjYXNlIDIuIHhociBnZXRz
IGFib3J0ZWQgYW5kIHRoZSB3b3JrZXIgY29udGV4dCBjb250aW51ZXMgcnVubmluZy4KICAgICAg
ICAgLy8gICAgVGhlIFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyIGhhcyB0aGUgdW5kZXJs
eWluZyBjbGllbnQgY2xlYXJlZCwgc28gbm8gbW9yZSBjYWxscwpAQCAtOTcsNyArOTcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNsYXNzIE1haW5UaHJlYWRCcmlkZ2UgOiBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50IHsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgLy8gQWxs
IGV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29udGV4dCdzIHRocmVhZC4KLSAgICAgICAgICAgIE1h
aW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4s
IFdvcmtlck1lc3NhZ2luZ1Byb3h5JiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50
aWFscyk7CisgICAgICAgICAgICBNYWluVGhyZWFkQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJs
ZUxvYWRlckNsaWVudFdyYXBwZXI+LCBXb3JrZXJMb2FkZXJQcm94eSYsIGNvbnN0IFN0cmluZyYg
dGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRT
bmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMpOwogICAgICAgICAgICAgdm9pZCBjYW5jZWwoKTsKICAg
ICAgICAgICAgIHZvaWQgZGVzdHJveSgpOwogCkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJs
ZUxvYWRlckNsaWVudFdyYXBwZXI+ID4gbV93b3JrZXJDbGllbnRXcmFwcGVyOwogCiAgICAgICAg
ICAgICAvLyBNYXkgYmUgdXNlZCBvbiBlaXRoZXIgdGhyZWFkLgotICAgICAgICAgICAgV29ya2Vy
TWVzc2FnaW5nUHJveHkmIG1fbWVzc2FnaW5nUHJveHk7CisgICAgICAgICAgICBXb3JrZXJMb2Fk
ZXJQcm94eSYgbV9sb2FkZXJQcm94eTsKIAogICAgICAgICAgICAgLy8gRm9yIHVzZSBvbiB0aGUg
bWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcAppbmRleCA1OTE2OGM3Li45ODllZmNkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFdvcmtlckNvbnRleHQ6On5Xb3JrZXJDb250ZXh0
KCkKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkLT50aHJlYWRJRCgp
KTsKIAotICAgIG1fdGhyZWFkLT53b3JrZXJPYmplY3RQcm94eSgpLT53b3JrZXJDb250ZXh0RGVz
dHJveWVkKCk7CisgICAgbV90aHJlYWQtPndvcmtlck9iamVjdFByb3h5KCkud29ya2VyQ29udGV4
dERlc3Ryb3llZCgpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJDb250ZXh0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTEzNiwxMiArMTM2LDEyIEBAIGJv
b2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogdm9pZCBXb3Jr
ZXJDb250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICBtX3RocmVhZC0+
d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVz
c2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKyAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0
UHJveHkoKS5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBzb3VyY2VVUkwpOwogfQogCiB2b2lkIFdvcmtlckNvbnRleHQ6OmFkZE1lc3NhZ2UoTWVz
c2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIG1fdGhyZWFkLT53b3JrZXJPYmplY3RQ
cm94eSgpLT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChkZXN0aW5hdGlvbiwgc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKyAgICBtX3RocmVh
ZC0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChk
ZXN0aW5hdGlvbiwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJM
KTsKIH0KIAogdm9pZCBXb3JrZXJDb250ZXh0OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJl
cXVlc3QodW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJikKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICBpZiAobV9jbG9zaW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RocmVhZC0+
d29ya2VyT2JqZWN0UHJveHkoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlKTsK
KyAgICBtX3RocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0TWVzc2FnZVRvV29ya2VyT2Jq
ZWN0KG1lc3NhZ2UpOwogfQogCiB2b2lkIFdvcmtlckNvbnRleHQ6OmFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lciwgYm9vbCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJM
b2FkZXJQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxZjQ4MAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94eS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdvcmtlckxvYWRlclByb3h5X2gKKyNkZWZpbmUgV29ya2VyTG9hZGVyUHJveHlfaAorCisj
aWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8vIEEgcHJveHkgdG8gdGFsayB0byB0aGUgbG9h
ZGVyIGNvbnRleHQuIE5vcm1hbGx5LCB0aGUgZG9jdW1lbnQgb24gdGhlIG1haW4gdGhyZWFkCisg
ICAgLy8gcHJvdmlkZXMgbG9hZGluZyBzZXJ2aWNlcyBmb3IgdGhlIHN1Ym9yZGluYXRlIHdvcmtl
cnMuIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIDItd2F5CisgICAgLy8gY29tbXVuaWNhdGlvbnMg
dG8gdGhlIERvY3VtZW50IGNvbnRleHQgYW5kIGJhY2sgdG8gdGhlIHdvcmtlci4KKyAgICAvLyBO
b3RlIHRoYXQgaW4gbXVsdGktcHJvY2VzcyBicm93c2VycywgdGhlIFdvcmtlciBvYmplY3QgY29u
dGV4dCBhbmQgdGhlIERvY3VtZW50CisgICAgLy8gY29udGV4dCBjYW4gYmUgZGlzdGluY3QuCisg
ICAgY2xhc3MgV29ya2VyTG9hZGVyUHJveHkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCB+V29ya2VyTG9hZGVyUHJveHkoKSB7IH0KKworICAgICAgICAvLyBQb3N0cyBhIHRhc2sgdG8g
dGhlIHRocmVhZCB3aGljaCBydW5zIHRoZSBsb2FkaW5nIGNvZGUgKG5vcm1hbGx5LCB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KSA9IDA7CisKKyAgICAgICAgLy8gUG9z
dHMgY2FsbGJhY2tzIGZyb20gbG9hZGluZyBjb2RlIHRvIHRoZSBXb3JrZXJDb250ZXh0LiBUaGUg
J21vZGUnIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAgICAvLyBzcGVjaWZpYyBzeW5j
aHJvbm91cyBsb2FkaW5nIHJlcXVlc3RzIHNvIHRoZXkgY2FuIGJlICduZXN0ZWQnLCBwZXIgc3Bl
Yy4KKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQ
YXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1v
ZGUpID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlckxvYWRlclByb3h5X2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDA3ZWU0ZjkuLmE2ZDBkNWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIGIv
V2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNjIsNyArNjIsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIGNvbnRleHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2Up
OwogCi0gICAgICAgIGNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLT5jb25m
aXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkp
OworICAgICAgICBjb250ZXh0LT50aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5jb25maXJt
TWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOwog
ICAgIH0KIAogcHJpdmF0ZToKQEAgLTIwMCw3ICsyMDAsNyBAQCBXb3JrZXJNZXNzYWdpbmdQcm94
eTo6fldvcmtlck1lc3NhZ2luZ1Byb3h5KCkKIAogdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1
c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKIHsKLSAgICBSZWZQdHI8V29ya2Vy
VGhyZWFkPiB0aHJlYWQgPSBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2Vu
dCwgc291cmNlQ29kZSwgdGhpcyk7CisgICAgUmVmUHRyPFdvcmtlclRocmVhZD4gdGhyZWFkID0g
V29ya2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsICp0
aGlzLCAqdGhpcyk7CiAgICAgd29ya2VyVGhyZWFkQ3JlYXRlZCh0aHJlYWQpOwogICAgIHRocmVh
ZC0+c3RhcnQoKTsKIH0KQEAgLTIyMiwxMSArMjIyLDYgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFz
azo6Y3JlYXRlKG1lc3NhZ2UpKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9z
dFRhc2tUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrKQotewotICAgIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCh0YXNrLCBX
b3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpKTsKLX0KLQogdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIGlm
IChtX2Fza2VkVG9UZXJtaW5hdGUpCkBAIC0yMzYsOCArMjMxLDEwIEBAIHZvaWQgV29ya2VyTWVz
c2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1CiAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUo
dGFzaywgbW9kZSk7CiB9CiAKLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrVG9X
b3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
KQordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7CisgICAgLy8gRklYTUU6IElu
IGNhc2Ugb2YgbmVzdGVkIHdvcmtlcnMsIHRoaXMgc2hvdWxkIGdvIGRpcmVjdGx5IHRvIHRoZSBy
b290IERvY3VtZW50IGNvbnRleHQuCisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNEb2N1bWVudCgpKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KHRhc2spOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5n
UHJveHkuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCmluZGV4IDhk
ODFkZWIuLjdmYzk3OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCkBA
IC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJv
eHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NCw3ICs0NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXb3JrZXI7CiAgICAgY2xhc3MgV29ya2Vy
VGhyZWFkOwogCi0gICAgY2xhc3MgV29ya2VyTWVzc2FnaW5nUHJveHkgOiBwdWJsaWMgV29ya2Vy
Q29udGV4dFByb3h5LCBwdWJsaWMgV29ya2VyT2JqZWN0UHJveHksIE5vbmNvcHlhYmxlIHsKKyAg
ICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQcm94eSA6IHB1YmxpYyBXb3JrZXJDb250ZXh0UHJveHks
IHB1YmxpYyBXb3JrZXJPYmplY3RQcm94eSwgcHVibGljIFdvcmtlckxvYWRlclByb3h5LCBOb25j
b3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eShXb3Jr
ZXIqKTsKIApAQCAtNjUsOSArNjYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKIAotICAg
ICAgICB2b2lkIHBvc3RUYXNrVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPik7Ci0gICAgICAgIHZvaWQgcG9zdFRhc2tUb1dvcmtlckNvbnRleHQo
UGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAgICAgIHZvaWQg
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgICAgIC8vIEltcGxlbWVu
dGF0aW9uIG9mIFdvcmtlckxvYWRlclByb3h5LgorICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFy
ZSBjYWxsZWQgb24gZGlmZmVyZW50IHRocmVhZHMgdG8gc2NoZWR1bGUgbG9hZGluZworICAgICAg
ICAvLyByZXF1ZXN0cyBhbmQgdG8gc2VuZCBjYWxsYmFja3MgYmFjayB0byBXb3JrZXJDb250ZXh0
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiAgICAgICAgIHZvaWQgd29ya2VyVGhyZWFk
Q3JlYXRlZChQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4pOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQu
Y3BwCmluZGV4IGQxMDI2YjEuLjA3NDUyMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBA
IC02MiwxMyArNjIsMTQgQEAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0
YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3QKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxXb3JrZXJUaHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlw
dFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwg
V29ya2VyT2JqZWN0UHJveHkqIHdvcmtlck9iamVjdFByb3h5KQorUGFzc1JlZlB0cjxXb3JrZXJU
aHJlYWQ+IFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVy
UHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3JrZXJPYmplY3RQcm94eSYgd29ya2VyT2JqZWN0
UHJveHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJM
LCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsIHdvcmtlck9iamVjdFByb3h5KSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNv
ZGUsIHdvcmtlckxvYWRlclByb3h5LCB3b3JrZXJPYmplY3RQcm94eSkpOwogfQogCi1Xb3JrZXJU
aHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYg
dXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlck9iamVjdFByb3h5KiB3
b3JrZXJPYmplY3RQcm94eSkKK1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwm
IHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNl
Q29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3JrZXJPYmplY3RQ
cm94eSYgd29ya2VyT2JqZWN0UHJveHkpCiAgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3dv
cmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJPYmplY3RQ
cm94eSh3b3JrZXJPYmplY3RQcm94eSkKICAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFk
U3RhcnR1cERhdGE6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSkpCiB7
CkBAIC0xMTUsNyArMTE2LDcgQEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQog
ICAgIC8vIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCBoYXBwZW5zIG9uIGEgZGlmZmVyZW50
IHRocmVhZCB3aGVyZSBpdCB3YXMgY3JlYXRlZC4KICAgICBtX3N0YXJ0dXBEYXRhLmNsZWFyKCk7
CiAKLSAgICBtX3dvcmtlck9iamVjdFByb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3Jr
ZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7CisgICAgbV93b3JrZXJPYmplY3RQcm94
eS5yZXBvcnRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSk7CiAKICAgICAvLyBCbG9ja3MgdW50aWwgdGVybWluYXRlZC4KICAgICBtX3J1bkxvb3Au
cnVuKG1fd29ya2VyQ29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmggYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKaW5kZXggZjFh
OGE1Mi4uOGExY2U2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5o
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApAQCAtMzksMTIgKzM5LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFN0cmluZzsK
ICAgICBjbGFzcyBXb3JrZXJDb250ZXh0OworICAgIGNsYXNzIFdvcmtlckxvYWRlclByb3h5Owog
ICAgIGNsYXNzIFdvcmtlck9iamVjdFByb3h5OwogICAgIHN0cnVjdCBXb3JrZXJUaHJlYWRTdGFy
dHVwRGF0YTsKIAogICAgIGNsYXNzIFdvcmtlclRocmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtlclRocmVhZD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29y
a2VyVGhyZWFkPiBjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJPYmplY3RQcm94eSopOwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBLVVJM
JiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiwgV29ya2VyT2JqZWN0UHJveHkmKTsKICAgICAgICAg
fldvcmtlclRocmVhZCgpOwogCiAgICAgICAgIGJvb2wgc3RhcnQoKTsKQEAgLTUyLDE3ICs1Mywx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KICAgICAgICAgV29ya2VyUnVuTG9v
cCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQotICAgICAgICBXb3JrZXJPYmplY3RQ
cm94eSogd29ya2VyT2JqZWN0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlck9iamVjdFBy
b3h5OyB9CisgICAgICAgIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fd29ya2VyTG9hZGVyUHJveHk7IH0KKyAgICAgICAgV29ya2VyT2JqZWN0
UHJveHkmIHdvcmtlck9iamVjdFByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJPYmplY3RQ
cm94eTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3Jr
ZXJPYmplY3RQcm94eSopOworICAgICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRl
clByb3h5JiwgV29ya2VyT2JqZWN0UHJveHkmKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCogd29y
a2VyVGhyZWFkU3RhcnQodm9pZCopOwogICAgICAgICB2b2lkKiB3b3JrZXJUaHJlYWQoKTsKIAog
ICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CiAgICAgICAgIFdvcmtlclJ1bkxv
b3AgbV9ydW5Mb29wOwotICAgICAgICBXb3JrZXJPYmplY3RQcm94eSogbV93b3JrZXJPYmplY3RQ
cm94eTsKKyAgICAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7Cisg
ICAgICAgIFdvcmtlck9iamVjdFByb3h5JiBtX3dvcmtlck9iamVjdFByb3h5OwogCiAgICAgICAg
IFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7CiAgICAgICAgIE11dGV4IG1f
dGhyZWFkQ3JlYXRpb25NdXRleDsK
</data>
<flag name="review"
          id="15831"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>