<?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>236868</bug_id>
          
          <creation_ts>2022-02-18 15:59:29 -0800</creation_ts>
          <short_desc>Provide a WebCore subspaceImplFor template to make code more readable.</short_desc>
          <delta_ts>2022-02-19 15:07:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=232849</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>236875</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843681</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 15:59:29 -0800</bug_when>
    <thetext>The pre-existing code is difficult to follow, especially in CodeGeneratorJS.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843682</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-18 16:00:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/89170090&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843692</commentid>
    <comment_count>2</comment_count>
      <attachid>452596</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 16:11:14 -0800</bug_when>
    <thetext>Created attachment 452596
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843705</commentid>
    <comment_count>3</comment_count>
      <attachid>452596</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-02-18 16:22:10 -0800</bug_when>
    <thetext>Comment on attachment 452596
proposed patch.

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

r=me

&gt; Source/WebCore/bindings/js/WebCoreJSClientData.h:204
&gt; +    auto* clientSpace = new JSC::GCClient::IsoSubspace(*space);
&gt; +    setClient(clientSubspaces, std::unique_ptr&lt;JSC::GCClient::IsoSubspace&gt;(clientSpace));

why not using makeUnique&lt;&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843707</commentid>
    <comment_count>4</comment_count>
      <attachid>452596</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 16:23:16 -0800</bug_when>
    <thetext>Comment on attachment 452596
proposed patch.

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

&gt;&gt; Source/WebCore/bindings/js/WebCoreJSClientData.h:204
&gt;&gt; +    setClient(clientSubspaces, std::unique_ptr&lt;JSC::GCClient::IsoSubspace&gt;(clientSpace));
&gt; 
&gt; why not using makeUnique&lt;&gt; ?

Because I need return a copy of the raw pointer anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843712</commentid>
    <comment_count>5</comment_count>
      <attachid>452596</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 16:32:09 -0800</bug_when>
    <thetext>Comment on attachment 452596
proposed patch.

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

&gt;&gt;&gt; Source/WebCore/bindings/js/WebCoreJSClientData.h:204
&gt;&gt;&gt; +    setClient(clientSubspaces, std::unique_ptr&lt;JSC::GCClient::IsoSubspace&gt;(clientSpace));
&gt;&gt; 
&gt;&gt; why not using makeUnique&lt;&gt; ?
&gt; 
&gt; Because I need return a copy of the raw pointer anyway.

Yusuke tells me that makeUnique has extra verification compared to new e.g. it ensures that the type is FastAllocated.  I&apos;ll make the change locally and do a local test build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843726</commentid>
    <comment_count>6</comment_count>
      <attachid>452607</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 16:53:10 -0800</bug_when>
    <thetext>Created attachment 452607
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843734</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 16:59:42 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r290188: &lt;http://trac.webkit.org/r290188&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843753</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-18 18:52:38 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 236875</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843765</commentid>
    <comment_count>9</comment_count>
      <attachid>452618</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 19:52:05 -0800</bug_when>
    <thetext>Created attachment 452618
EWS test 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843779</commentid>
    <comment_count>10</comment_count>
      <attachid>452621</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 21:06:32 -0800</bug_when>
    <thetext>Created attachment 452621
EWS test 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843780</commentid>
    <comment_count>11</comment_count>
      <attachid>452622</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 21:08:33 -0800</bug_when>
    <thetext>Created attachment 452622
EWS test 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843792</commentid>
    <comment_count>12</comment_count>
      <attachid>452626</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 22:07:47 -0800</bug_when>
    <thetext>Created attachment 452626
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843804</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-18 22:57:54 -0800</bug_when>
    <thetext>OK, we now have the evidence we need to determine what went wrong.  Basically, for some reason, when gcc and MSVC fails to resolve a template function in the class scope, they don&apos;t look in outer scopes for a match.  Clang on the other hand is able to do this.  Specifically, in this case, some classes have a method (not a template) with the same name as the WebCore scoped template function, and they have different parameters.  Perhaps the same name thing is tripping up gcc and MSVC, and overloading is failing to work in this scenario.

Regardless, I&apos;m able to work around this by explicitly qualifying the template function with WebCore:: when invoking it.  That has made the build failures go away.

I&apos;ll let the EWS bots run longer before I re-land with the workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843915</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-19 15:00:57 -0800</bug_when>
    <thetext>The max-AS-debug-wk2 bot claims that there is a failure in this test:
platform/mac/media/media-source/videoplaybackquality-decompressionsession.html

https://results.webkit.org/?suite=layout-tests&amp;test=platform/mac/media/media-source/videoplaybackquality-decompressionsession.html shows that test as having a history of crashing wk2 Debug runs on arm64 Macs, though supposedly fixed recently.

Looking at the crash log for this test failure from the EWS bot&apos;s failed test run (https://ews-build.s3-us-west-2.amazonaws.com/macOS-AppleSilicon-Big-Sur-Debug-WK2-Tests-EWS/452626-24391-rerun/platform/mac/media/media-source/videoplaybackquality-decompressionsession-crash-log.txt), we see:

Shader compiler output: Metal
ASSERTION FAILED: platformSample.type == PlatformSample::CMSampleBufferType
/Volumes/Data/worker/macOS-AppleSilicon-Big-Sur-Debug-Build-EWS/build/Source/WebKit/GPUProcess/media/RemoteVideoFrameObjectHeap.cpp(99) : void WebKit::RemoteVideoFrameObjectHeap::getVideoFrameBuffer(WebKit::RemoteVideoFrameReadReference &amp;&amp;)
1   0x13c2cd7e8 WTFCrash
2   0x102ab0620 WebKit::Daemon::Decoder::~Decoder()
3   0x1023e1b14 WebKit::RemoteVideoFrameObjectHeap::getVideoFrameBuffer(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;)
4   0x1020ba9d4 void IPC::callMemberFunctionImpl&lt;WebKit::RemoteVideoFrameObjectHeap, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;), std::__1::tuple&lt;WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt; &gt;, 0ul&gt;(WebKit::RemoteVideoFrameObjectHeap*, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;), std::__1::tuple&lt;WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt; &gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt;)
5   0x1020b9ed8 void IPC::callMemberFunction&lt;WebKit::RemoteVideoFrameObjectHeap, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;), std::__1::tuple&lt;WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt; &gt;, std::__1::integer_sequence&lt;unsigned long, 0ul&gt; &gt;(std::__1::tuple&lt;WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt; &gt;&amp;&amp;, WebKit::RemoteVideoFrameObjectHeap*, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;))
6   0x1020b6a20 void IPC::handleMessage&lt;Messages::RemoteVideoFrameObjectHeap::GetVideoFrameBuffer, WebKit::RemoteVideoFrameObjectHeap, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;)&gt;(IPC::Connection&amp;, IPC::Decoder&amp;, WebKit::RemoteVideoFrameObjectHeap*, void (WebKit::RemoteVideoFrameObjectHeap::*)(WebKit::ObjectIdentifierReadReference&lt;WebCore::ProcessQualified&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteVideoFrameIdentifierType&gt; &gt; &gt;&amp;&amp;))
7   0x1020b6874 WebKit::RemoteVideoFrameObjectHeap::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
8   0x102ab9fe8 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
9   0x102229434 WebKit::GPUConnectionToWebProcess::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
10  0x1020e08ec WebKit::GPUConnectionToWebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
11  0x102a805b0 IPC::Connection::dispatchMessage(IPC::Decoder&amp;)
...

That doesn&apos;t look related to my patch at all.

Running the test individually and locally on my own M1 Mac, the test passes every time.  Running the entire webkit tests on a Debug build locally, I also cannot reproduce a failure in that test.

Based on all the above, I think the test failure is not caused by my patch.  I&apos;m going to re-land the patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843917</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-19 15:06:58 -0800</bug_when>
    <thetext>Re-landed in r290217: &lt;http://trac.webkit.org/r290217&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452596</attachid>
            <date>2022-02-18 16:11:14 -0800</date>
            <delta_ts>2022-02-18 17:44:44 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-236868.patch</filename>
            <type>text/plain</type>
            <size>326483</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBhIFdlYkNvcmUgc3Vi
c3BhY2VJbXBsRm9yIHRlbXBsYXRlIHRvIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODY4CisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzg5MTcwMDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIHByZS1leGlzdGluZyBjb2RlIGlzIGRpZmZpY3VsdCB0byBm
b2xsb3csIGVzcGVjaWFsbHkgaW4gQ29kZUdlbmVyYXRvckpTLnBtLgorICAgICAgICBUaGlzIGNo
YW5nZSBhbHNvIGNvbnNvbGlkYXRlcyB0aGUgZnJhbWV3b3JrIGltcGxlbWVudGF0aW9uIG9mIHN1
YnNwYWNlRm9ySW1wbCBpbgorICAgICAgICBvbmUgcGxhY2UgcmF0aGVyIHRoYW4gc2NhdHRlcmVk
IGFjcm9zcyAzIGxvY2F0aW9ucy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0bworICAgICAg
ICBjaGFuZ2UgdGhpcyBjb2RlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgQWxzbyBpbnRyb2R1
Y2VkIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2UgYW5kIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzIGNsYXNzZXMKKyAgICAgICAgYW5kIG1vdmVkIHRoZSBGaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3Igc3Vic3BhY2VzIGluIHRoZXJlLiAgVGhpcyBtYWtlcworICAgICAgICB0aGUg
Y29kZSBiZWhhdmUgbW9yZSBjb25zaXN0ZW50bHkgZm9yIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvcidzCisgICAgICAgIElzb1N1YnNwYWNlIGFzIGZvciBvdGhlciBJc29TdWJzcGFj
ZXMuCisKKyAgICAgICAgQWxzbyByZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVzdWx0cy4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0hl
YXBEYXRhOjpzdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6Omlk
YlNlcmlhbGl6YXRpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6
Y2xpZW50U3Vic3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpzZXRG
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OnNl
dEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24p
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9z
ZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xv
YmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFsbUdsb2JhbFNjb3Bl
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJl
YWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RE9NSklUOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT046
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05J
bmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRy
aWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERv
bWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVBZGRP
cGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEl0ZXJh
YmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9J
bnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5Tm9JbnRl
cmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50cmllc0NhbGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdp
bkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RUYWdnZWRXcmFwcGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKwogMjAy
Mi0wMi0xOCAgUm9iZXJ0IEplbm5lciAgPEplbm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxNDkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyOTAxNTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTI0MjAsMTEgKzI0MjAsMTEgQEAKIAkJN0JCNjgwQkEyNUJBMUJFNDAwMkI4NzM4
IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QkI2ODBCODI1QkExQkU0MDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NN
YWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QkREQTMxRjI3NEZBMDIxMDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEREEzMUQyNzRGOURB
NTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkREQTM0QzI3NUEwMTMxMDAzODY1OUUg
LyogUHJvY2Vzc0lkZW50aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkREQTM0OTI3NUEwMTMwMDAzODY1OUUgLyogUHJvY2Vzc0lkZW50aXR5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0JFMzdG
ODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JCQjZGRjAwN0E2Q0QzIC8qIFZp
ZGVvRnJhbWVDVi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdCRTM3RjdBMjdCQjg2QUIwMDdBNkNEMyAvKiBHcmFwaGljc0NvbnRleHRHTENvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEREEz
MUMyNzRGOURBNDAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EubW0gKi87IH07CiAJ
CTdCRTM3RjdDMjdCQjg2QjgwMDdBNkNEMyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQ0Q0MkRBMjcwNUM5
NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNwcCAqLzsgfTsKIAkJN0JFMzdGN0Qy
N0JCODZDRDAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQ0Q0MkQ4MjcwNTk5RUYwMEVCMjEyNyAvKiBB
TkdMRVV0aWxpdGllcy5jcHAgKi87IH07CiAJCTdCRTM3RjdFMjdCQjg2REIwMDdBNkNEMyAvKiBH
cmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUEyNTQ5NzIwMDAwQzhDMUFDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQ1ZDb2NvYS5jcHAgKi87IH07CisJCTdCRTM3Rjg3MjdCQkI3MDgwMDdBNkNEMyAvKiBW
aWRlb0ZyYW1lQ1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCRTM3Rjg2MjdCQkI2RkYwMDdBNkNEMyAvKiBWaWRlb0ZyYW1lQ1YuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkU3NDI3MzgxRkE5MDZG
QkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NW
R0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QkZGNTlGNDI3NTc3MjY3MDA3NzNEMzkgLyog
RGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkZGNTlFRjI3NTc3MUU4MDA3NzNEMzkgLyogRGlzcGxheUNv
bmZpZ3VyYXRpb25Nb25pdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDI5QzZEMjQ5
M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3NDQsNiArNTc0NCw4IEBACiAJCUZERjA5REM5MTM5
OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjA5REM3MTM5OUI2MjIwMDY4OEU1QiAvKiBK
U0JpcXVhZEZpbHRlck5vZGUuaCAqLzsgfTsKIAkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8q
IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkRGN0U5QzQxM0FDMjFEQjAwQTUx
RUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9C
dWZmZXJDYWxsYmFjay5oICovOyB9OworCQlGRTBCQ0YzNDI3QzA2NjEwMDBCRkIyREIgLyogRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oICovOyB9OworCQlGRTBCQ0YzNTI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oICovOyB9OwogCQlGRTBEODRFOTEwNDg0MzQ4MDAxQTE3OUUgLyogV2Vi
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
MEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAv
KiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRh
LmggKi87IH07CiAJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0
YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5l
LmggKi87IH07CkBAIC0xODI5MSw2ICsxODI5Myw4IEBACiAJCUZERjZCQUY3MTM0QTRDOTgwMDgy
MjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGREY3RTlDMTEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRp
b0J1ZmZlckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAvKiBF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDg0RTgxMDQ4
NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMEQ4NEVBMTA0
ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzM2LDYgKzI5MzQwLDggQEAKIAkJCQlCQzUzREE0NzExNDMx
MzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCAqLywKIAkJCQlCQzUzREEyRDExNDMx
MjFFMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmggKi8sCiAJCQkJMkQyOTM4NjkyMzVGNkI2
ODAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCAqLywKKwkJCQlGRTBCQ0YzMzI3QzA2NjEw
MDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCAqLywKKwkJCQlGRTBC
Q0YzMTI3QzA2NjBGMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCAqLywKIAkJ
CQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCAqLywKIAkJCQkx
NDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggKi8sCiAJCQkJQzU4NUE2
NjAxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwICovLApAQCAtMzUx
ODIsNiArMzUxODgsNyBAQAogCQkJCTcxNEM3QzZEMUZEQURBRjYwMEYyQkVFMSAvKiBKU0FuaW1h
dGlvblBsYXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTAyNUVERTFGOTlG
MUVDMDA0QTI1MEMgLyogSlNBbmltYXRpb25UaW1lbGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE5NTZGMUMyMzMxQTY3NzAwNTdFOUQyIC8qIEpTQXBwbGVQYXlDYW5jZWxFdmVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkUwQkNGMzUyN0MwNjYxMDAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMURGNUE5OTFGN0VDOEMwMDA1
OEE0NzcgLyogSlNBcHBsZVBheUNvbnRhY3RGaWVsZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTU5
NkI5MzgyNURFRUYwMzAwRUQyQ0ZBIC8qIEpTQXBwbGVQYXlDb3Vwb25Db2RlQ2hhbmdlZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUVBRDU4MzI2NkVGNTNCMDA0QjlDRjEgLyogSlNBcHBs
ZVBheUNvdXBvbkNvZGVEZXRhaWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM3MTA0LDYgKzM3MTEx
LDcgQEAKIAkJCQkwNzhFMDk0NDE3RDE2RTFDMDA0MjBBQTEgLyogUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzNTkxMEIxRTdEREM3MzAwRjMwNjMw
IC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDkyQTE3RDE0
RDFDMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMEJD
RjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUUyQzQzNjgxQkNFRTM3NzAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZFMUMwMDQyMEFBMSAvKiBSVENWb2lkUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4MTExNjAwOTA3NEI3IC8qIFJ1
YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0V4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzIDogcHVibGljIERPTUNsaWVudElz
b1N1YnNwYWNlcyB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMo
KSA9IGRlZmF1bHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMgOiBwdWJsaWMgRE9NSXNvU3Vic3BhY2VzIHsKK3B1YmxpYzoKKyAgICBFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlND
OjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI5MDE1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KQEAgLTUwLDM2ICs1MiwxMiBAQCBjb25zdCBKU0M6OkNs
YXNzSW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvCiBHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFjZUZvckltcGwoVk0mIHZtKQog
ewogICAgIEpTTG9ja0hvbGRlciBhcGlMb2NrZXIodm0pOwotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlKCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IGhlYXBEYXRhLmZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yKTsKLSAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSkpOwotCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IH0KLQotICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xpZW50OjpJc29TdWJzcGFjZSgq
c3BhY2UpOwotICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29TdWJzcGFjZT4oY2xpZW50U3Bh
Y2UpKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2U7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2Up
OyB9CisgICAgKTsKIH0KIAogaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Jfb25Qcm9taXNlU2V0dGxlZEJvZHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvciogY2FzdGVkVGhpcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyOTAxNTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWludC5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0F1
ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgiCkBAIC05MCw3ICs5MCw3IEBAIEpT
SGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVhcCkKICAgICAsIG1fcnVudGltZU9iamVjdFNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKICAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRv
d1Byb3h5KQogICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpT
SURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKLSAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlx
dWU8RE9NSXNvU3Vic3BhY2VzPigpKQorICAgICwgbV9zdWJzcGFjZXMobWFrZVVuaXF1ZTxFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcz4oKSkKIHsKIH0KIApAQCAtMTIyLDcgKzEyMiw3IEBAIEpTVk1D
bGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQ
QUNFX0lOSVQobV9ydW50aW1lT2JqZWN0U3BhY2UpCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNF
X0lOSVQobV93aW5kb3dQcm94eVNwYWNlKQogICAgICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklU
KG1faWRiU2VyaWFsaXphdGlvblNwYWNlKQotICAgICwgbV9jbGllbnRTdWJzcGFjZXMobWFrZVVu
aXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCisgICAgLCBtX2NsaWVudFN1YnNwYWNlcyht
YWtlVW5pcXVlPEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzPigpKQogewogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5o
CShyZXZpc2lvbiAyOTAxNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01DbGllbnRJc29TdWJzcGFjZXM7Ci1jbGFzcyBET01J
c29TdWJzcGFjZXM7CitjbGFzcyBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlczsKK2NsYXNz
IEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzOwogCiBjbGFzcyBKU0hlYXBEYXRhIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShKU0hlYXBEYXRhKTsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBlbnN1cmVIZWFwRGF0YShKU0M6OkhlYXAmKTsKIAogICAg
IExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLSAgICBET01Jc29TdWJzcGFjZXMmIHN1
YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQorICAgIEV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0K
IAogICAgIFZlY3RvcjxKU0M6Oklzb1N1YnNwYWNlKj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7IH0KIApAQCAtNTUsOSArNTUsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBmdW5jKCpzcGFjZSk7CiAgICAgfQogCi0gICAgSlNDOjpJ
c29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJl
dHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVu
aXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9Ci0K
IHByaXZhdGU6CiAgICAgTG9jayBtX2xvY2s7CiAKQEAgLTkzLDkgKzkwLDggQEAgcHJpdmF0ZToK
ICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNwYWNlOwogICAgIEpTQzo6SXNv
U3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwogICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9pZGJT
ZXJpYWxpemF0aW9uU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+
IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2U7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM+IG1fc3Vic3BhY2VzOwogICAgIFZlY3RvcjxKU0M6
Oklzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOwogfTsKIApAQCAtMTQxLDEw
ICsxMzcsOCBAQCBwdWJsaWM6CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRp
bWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU9iamVjdFNwYWNlOyB9CiAgICAgSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHdpbmRvd1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dp
bmRvd1Byb3h5U3BhY2U7IH0KICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgaWRiU2Vy
aWFsaXphdGlvblNwYWNlKCkgeyByZXR1cm4gbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KLSAg
ICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IHNw
YWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4
Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQogCi0gICAgRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBj
bGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KKyAg
ICBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcyYgY2xpZW50U3Vic3BhY2VzKCkgeyByZXR1
cm4gKm1fY2xpZW50U3Vic3BhY2VzLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgSGFzaFNldDxE
T01XcmFwcGVyV29ybGQqPiBtX3dvcmxkU2V0OwpAQCAtMTY0LDggKzE1OCw1MSBAQCBwcml2YXRl
OgogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsKICAg
ICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4gbV9maWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9N
Q2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1YnNwYWNlczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xpZW50U3Vic3BhY2VzOwogfTsK
IAorCitlbnVtIGNsYXNzIFVzZUN1c3RvbUhlYXBDZWxsVHlwZSB7IFllcywgTm8gfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlIHVzZUN1c3RvbUhlYXBDZWxs
VHlwZSwgdHlwZW5hbWUgR2V0Q2xpZW50LCB0eXBlbmFtZSBTZXRDbGllbnQsIHR5cGVuYW1lIEdl
dFNlcnZlciwgdHlwZW5hbWUgU2V0U2VydmVyPgorQUxXQVlTX0lOTElORSBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtLCBHZXRDbGllbnQgZ2V0
Q2xpZW50LCBTZXRDbGllbnQgc2V0Q2xpZW50LCBHZXRTZXJ2ZXIgZ2V0U2VydmVyLCBTZXRTZXJ2
ZXIgc2V0U2VydmVyLCBKU0M6OkhlYXBDZWxsVHlwZSYgKCpnZXRDdXN0b21IZWFwQ2VsbFR5cGUp
KEpTSGVhcERhdGEmKSA9IG51bGxwdHIpCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIGNsaWVu
dFN1YnNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gZ2V0Q2xpZW50KGNsaWVudFN1YnNwYWNlcykpCisgICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8m
IHN1YnNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAgIEpTQzo6SXNvU3Vic3BhY2Uq
IHNwYWNlID0gZ2V0U2VydmVyKHN1YnNwYWNlcyk7CisgICAgaWYgKCFzcGFjZSkgeworICAgICAg
ICBKU0M6OkhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHVzZUN1
c3RvbUhlYXBDZWxsVHlwZSA9PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllcyB8fCBzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUPiB8fCAhVDo6bmVlZHNEZXN0
cnVjdGlvbik7CisgICAgICAgIGlmIGNvbnN0ZXhwciAodXNlQ3VzdG9tSGVhcENlbGxUeXBlID09
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzKQorICAgICAgICAgICAgc3BhY2UgPSBuZXcgSlND
OjpJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBnZXRDdXN0b21IZWFwQ2VsbFR5
cGUoaGVhcERhdGEpLCBUKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFQ+KQorICAg
ICAgICAgICAgICAgIHNwYWNlID0gbmV3IEpTQzo6SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IEpTQzo6SXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUKTsKKyAgICAg
ICAgfQorICAgICAgICBzZXRTZXJ2ZXIoc3Vic3BhY2VzLCBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJ
c29TdWJzcGFjZT4oc3BhY2UpKTsKKworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gVDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0K
KworICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KCpzcGFjZSk7CisgICAgc2V0Q2xpZW50KGNsaWVudFN1YnNwYWNlcywgc3RkOjp1bmlxdWVfcHRy
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPihjbGllbnRTcGFjZSkpOworICAgIHJldHVybiBj
bGllbnRTcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00ODcxLDUwICs0ODcxLDMyIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24o
JGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAKLSAgICBBZGRUb0ltcGxJbmNs
dWRlcygiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiKTsKLSAgICBBZGRUb0ltcGxJbmNsdWRlcygi
RE9NSXNvU3Vic3BhY2VzLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
PEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpO1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZh
Y2VOYW1lfS5nZXQoKSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKIAorICAgIG15
ICR1c2VDdXN0b21IZWFwQ2VsbDsKKyAgICBteSAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyOwog
ICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xh
c3NOYW1lfSk7XG4iKTsKKyAgICAgICAgJHVzZUN1c3RvbUhlYXBDZWxsID0gIlllcyI7CisgICAg
ICAgICRjdXN0b21IZWFwQ2VsbFR5cGVHZXR0ZXIgPSAiW10gKGF1dG8mIHNlcnZlcikgLT4gSlND
OjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NO
YW1lfTsgfSI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgJHtjbGFzc05hbWV9PiB8fCAhJHtjbGFzc05hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTtc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFtZX0+
KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIGVsc2VcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgJHtjbGFzc05hbWV9KTtcbiIpOwotICAgIH0KLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVy
ZmFjZU5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7XG4iKTsKLSAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInVucmVhY2hhYmxl
LWNvZGVcIilcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIilcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gJHtjbGFzc05hbWV9Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
O1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgfVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAg
ICAgICAkdXNlQ3VzdG9tSGVhcENlbGwgPSAiTm8iOworICAgICAgICAkY3VzdG9tSGVhcENlbGxU
eXBlR2V0dGVyID0gIm51bGxwdHIiOworICAgIH0KIAotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7XG4iKTsKLSAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDwke2NsYXNzTmFtZX0sIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZTo6JHVzZUN1c3RvbUhlYXBDZWxsPih2bSxcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7IH0sXG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9
LFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTsgfSxc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gV1RG
TW92ZShzcGFjZSk7IH0sXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJGN1
c3RvbUhlYXBDZWxsVHlwZUdldHRlclxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
KTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKIAogICAgIGlmICgkbmVl
ZHNWaXNpdENoaWxkcmVuKSB7CkBAIC02ODAyLDM2ICs2Nzg0LDEyIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25j
dXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsKLSAg
ICAgICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4gfHwgISR7aXRlcmF0b3JOYW1lfTo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7aXRlcmF0b3JOYW1lfT4pCi0gICAgICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1lfSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFt
ZX0pOwotICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInVucmVhY2hhYmxlLWNvZGVcIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRvbG9n
aWNhbC1jb21wYXJlXCIpCi0gICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gJHtpdGVyYXRvck5hbWV9Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIH0KLQotICAg
ICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQo
KTsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDwke2l0ZXJhdG9yTmFtZX0sIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7
IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0g
V1RGTW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cu
Y3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zNjYsMzIgKzM2NiwxMyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoanNET01XaW5kb3dfVGVzCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yRE9NV2luZG93LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvckRPTVdpbmRvdy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93LCBKU0RP
TVdpbmRvdyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93ID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0RPTVdpbmRvdzo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
RE9NV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0RPTVdpbmRvdywgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yRE9NV2luZG93ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JET01XaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZl
cikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZv
ckpTRE9NV2luZG93OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvdzo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5j
bHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTY3LDMyICsxNjcsMTMgQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzRGVkaWNhdGVkV29yawogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxU
eXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAKIHZvaWQg
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmNwcAkocmV2aXNpb24g
MjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhw
b3NlZFN0YXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNFeHBvc2VkU3Rhci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTIzMSwzNiArMjMxLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c0V4cG9zZWRTdGFyUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRXhwb3NlZFN0
YXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9z
ZWRTdGFyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRT
dGFyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4gfHwgIUpTRXhwb3NlZFN0YXI6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvckV4cG9zZWRTdGFyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0V4cG9zZWRTdGFyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU0V4cG9zZWRTdGFyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQg
SlNFeHBvc2VkU3Rhcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3Bw
CShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0yNDksMzYgKzI0
OSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNFeHBvc2VkVG9Xb3JrCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93
PiB8fCAhSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93PikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3cpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNFeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3csIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjYsMzIgKzE2NiwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNQYWludFdvcmtsZXRHCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxT
Y29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUs
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmts
ZXRHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29y
a2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7
IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3Bl
OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRl
ICJKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NiwzMiArMTY2LDEzIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NlcnZpY2VXb3JrZXIKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUsIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olll
cz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6Okhl
YXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dS
ZWFsbUdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24g
MjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hh
ZG93UmVhbG1HbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNTIsMzIgKzE1MiwxMyBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNTaGFkb3dSZWFsbUdsCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9i
YWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2hhZG93UmVhbG1HbG9iYWxTY29w
ZSwgSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxt
R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1Jl
YWxtR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1NoYWRv
d1JlYWxtR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JT
aGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFkb3dSZWFsbUds
b2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4g
c2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOyB9CisgICAg
KTsKIH0KIAogdm9pZCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFy
ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2hhcmVkV29y
a2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0xNTAsMzIgKzE1MCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNTaGFyZWRXb3JrZXJHCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1No
YXJlZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5t
X2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUsIEpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtlckds
b2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1NoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2Nv
cGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1NoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3Bl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIu
bV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0K
IAogdm9pZCBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5j
cHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIz
LDkgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
Ci0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtNDMzLDM2
ICs0MzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3RpbwogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4gfHwgIUpTVGVzdENFUmVhY3Rpb25zOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rpb25zKTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q0VSZWFjdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJl
YWN0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENFUmVhY3Rp
b25zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDRVJlYWN0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENF
UmVhY3Rpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3Bw
CShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAg
LTI1OSwzNiArMjU5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RDRVJlYWN0
aW8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllcj4gfHwgIUpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxs
VHJhY2VyLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTUwOCwzNiArNTA4LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3RDYWxsVHJhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdENhbGxUcmFjZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlcj4gfHwgIUpT
VGVzdENhbGxUcmFjZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxU
cmFjZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENh
bGxUcmFjZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dENhbGxUcmFjZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2Vy
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDYWxsVHJhY2VyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3RDYWxsVHJhY2VyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q2FsbFRyYWNlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFj
ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0Q2FsbFRyYWNlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE3MSwzNiArMTcxLDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RDbGFzc1dpdGgKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IHx8ICFKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTc4NCwzNiArNzg0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RDb25kaXRpb24KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4gfHwgIUpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDb25kaXRpb25hbEluY2x1ZGVzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmNwcAko
cmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MiwxMCArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Q
cm9taXNlUHJveHkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02
MDYsMzYgKzYwNiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIoc2V0SlNUZXN0Q29uZGl0
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRp
dGlvbmFsbHlSZWFkV3JpdGU+IHx8ICFKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDb25kaXRpb25h
bGx5UmVhZFdyaXRlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25h
bGx5UmVhZFdyaXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3Bw
CShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RE9NSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBA
CiAjaW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01KSVRBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAj
aW5jbHVkZSAiRE9NSklUSURMQ29udmVydC5oIgogI2luY2x1ZGUgIkRPTUpJVElETFR5cGUuaCIK
ICNpbmNsdWRlICJET01KSVRJRExUeXBlRmlsdGVyLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTEyNDcs
MzYgKzEyNDcsMTMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKGpzVGVzdERPTUpJVFBybwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RE9NSklUOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RET01KSVQ+IHx8ICFKU1Rlc3RET01KSVQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERPTUpJVD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0RE9NSklUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RET01KSVQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERPTUpJVDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERPTUpJVCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERPTUpJVC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERPTUpJVCwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERPTUpJVCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RET01KSVQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RE9NSklUOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT04uY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTgwMywzNiArODAzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dERlZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNP
Tj4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT046Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT04+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT04pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT04pOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04u
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
RGVmYXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjY1LDM2ICsyNjUsMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERl
ZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJl
ZEJ5RXhwb3NlZCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTU3LDM2ICsxNTcsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4gfHwgIUpTVGVzdERlZmF1
bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdC5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTI4NywzNiArMjg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQ+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMyNywzNiArMzI3LDEzIEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRv
U2hhcmVkU3ludGhldGljQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZS5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0MSwxMyBA
QCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIoc2V0SlNUZXN0RGVsZWdhCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVs
ZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+IHx8ICFK
U1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWxlZ2F0ZVRv
U2hhcmVkU3ludGhldGljQXR0cmlidXRlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlKTsKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0
dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVsZWdhdGVU
b1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRl
VG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0
dHJpYnV0ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRl
VG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxl
Z2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
bGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxl
Z2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50
aGV0aWNBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3REb21haW5TZWN1cml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcAkocmV2aXNpb24g
MjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERvbWFpblNlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgpAQCAtMzE1LDM2ICszMTUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdERvbWFpblNlYwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RG9t
YWluU2VjdXJpdHk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1cml0
eT4gfHwgIUpTVGVzdERvbWFpblNlY3VyaXR5OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REb21haW5TZWN1cml0eT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0RG9tYWluU2VjdXJpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERvbWFpblNlY3VyaXR5KTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdERvbWFpblNlY3VyaXR5Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RG9tYWlu
U2VjdXJpdHkgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5T
ZWN1cml0eS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERvbWFpblNl
Y3VyaXR5LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RG9tYWluU2Vj
dXJpdHkuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNl
Y3VyaXR5ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdERvbWFpblNlY3VyaXR5OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRp
bmcuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNDU0
LDM2ICs0NTQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEVuYWJsZWRCeQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRC
eVNldHRpbmcuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVu
YWJsZWRCeVNldHRpbmcuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPiB8fCAhSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
RW5hYmxlZEJ5U2V0dGluZz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFi
bGVkQnlTZXR0aW5nID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5h
YmxlZEJ5U2V0dGluZy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEVu
YWJsZWRCeVNldHRpbmcsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RF
bmFibGVkQnlTZXR0aW5nLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGlu
ZyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTE4MSwzNiArMTgxLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3RFbmFibGVkRm8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ+IHx8ICFKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250
ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29u
dGV4dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMzE4LDM2ICszMTgsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV2ZW50Q29ucwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yPiB8fCAhSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2
ZW50Q29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3Is
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9y
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25z
dHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI1NywzNiArMjU3
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RFdmVudFRhcmcKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0RXZlbnRUYXJnZXQ+IHx8ICFKU1Rlc3RFdmVudFRhcmdldDo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXQ+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudFRhcmdldCk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RFdmVudFRhcmdldDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50
VGFyZ2V0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJn
ZXQuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFdmVudFRhcmdldCwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RXZlbnRUYXJnZXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldCA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RFdmVudFRh
cmdldDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMTgyLDM2ICsxODIsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV4Y2Vw
dGlvbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXhjZXB0aW9uOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9u
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24u
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RFeGNlcHRpb24+IHx8ICFKU1Rlc3RFeGNlcHRpb246Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV4Y2VwdGlvbj4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOwotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEV4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEV4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVl
Um9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoanNUZXN0R2VuZXJhdGVBCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVl
Um9vdC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdD4gfHwgIUpTVGVzdEdl
bmVyYXRlQWRkT3BhcXVlUm9vdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVS
b290LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xOTIsMzYgKzE5MiwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0R2VuZXJhdGVJCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+IHx8ICFKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBA
CiAjaW5jbHVkZSAiSlNUZXN0R2xvYmFsT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNpbmNsdWRl
ICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgpAQCAtMTgyNSwzMiArMTgyNSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0R2xvYmFsT2JqCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RH
bG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTVGVzdEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RHbG9iYWxPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RHbG9iYWxPYmplY3QsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2Jh
bE9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyBy
ZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xvYmFsT2JqZWN0OyB9CisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTI3MSwzNiArMjcxLDEz
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0y
NzEsMzYgKzI3MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW5kZXhlZFNl
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKQEAgLTMwMywzNiArMzAzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsy
NSw5IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMTEwMSwzNiArMTEw
MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlND
OjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0
KCkpCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICAgICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7Ci0gICAgICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJm
YWNlSXRlcmF0b3I+IHx8ICFUZXN0SW50ZXJmYWNlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNlSXRlcmF0b3I+KQotICAgICAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdEludGVyZmFj
ZUl0ZXJhdG9yKTsKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFj
ZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEludGVy
ZmFjZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgICAgIH0KLQotICAgICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
bnRlcmZhY2VJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxUZXN0SW50ZXJmYWNlSXRlcmF0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVy
ZmFjZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0g
V1RGTW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTIwNCwzNiArMTE4
MCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SW50ZXJmYWNlCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdEludGVyZmFjZT4gfHwgIUpTVGVzdEludGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOworICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNUZXN0SW50ZXJmYWNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJm
YWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsK
IH0KIAogdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTgyLDM2ICsxODIsMTMgQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEludGVyZmFjZQogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZT4gfHwgIUpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJ
KHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RJdGVyYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAj
aW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0xOTYsMzYgKzE5NiwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFj
ZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVy
YWJsZUl0ZXJhdG9yLmdldCgpOwotICAgICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+
IHx8ICFUZXN0SXRlcmFibGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIFRlc3RJdGVyYWJsZUl0ZXJhdG9yPikKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgVGVzdEl0ZXJhYmxlSXRlcmF0b3IpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdEl0ZXJhYmxlSXRlcmF0b3IpOwotICAg
ICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJdGVyYWJsZUl0ZXJhdG9yOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIH0KLQotICAgICAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0
b3IuZ2V0KCk7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdEl0ZXJhYmxlSXRl
cmF0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFi
bGVJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9y
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOyB9LAor
ICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICAg
ICApOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCkBAIC0yOTksMzYgKzI3NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0SXRlcmFibGVQCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RJdGVyYWJsZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEl0ZXJhYmxlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJdGVyYWJsZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPiB8fCAhSlNUZXN0SXRlcmFi
bGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SXRlcmFibGUpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVy
YWJsZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SXRlcmFibGUsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEl0ZXJhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SXRlcmFibGU6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5o
IgpAQCAtMjI1LDM2ICsyMjUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEpT
QnVpbHRpbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9y
eUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUg
IkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2Uu
aCIKQEAgLTIyNywzNiArMjI3LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RM
ZWdhY3lGYWMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeUZhY3Rv
cnlGdW5jdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TGVnYWN5RmFjdG9yeUZ1bmN0aW9uPiB8fCAhSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVn
YWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVn
YWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CkBAIC0zMzAsMzYgKzMzMCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TGVn
YWN5Tm9JCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0PiB8fCAhSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QpOwotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Qs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5Tm9JbnRlcmZh
Y2VPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJ
KHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCkBAIC0yNDQsMzYgKzI0NCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNU
ZXN0TGVnYWN5T3ZlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOworICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucywgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExpa2UuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zNjEsMzYgKzM2MSwx
MyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TWFwTGlrZVByCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExp
a2U+IHx8ICFKU1Rlc3RNYXBMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RNYXBMaWtlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RNYXBMaWtlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RNYXBMaWtlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE1hcExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RNYXBMaWtlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TWFwTGlr
ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExp
a2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE1hcExpa2U6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zNzUsMzYg
KzM3NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TWFwTGlrZVdpCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucywgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE1hcExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTMzOSwzNiArMzM5LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
Uihqc1Rlc3ROYW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZp
c2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3Ry
YWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMzksMzYgKzMzOSwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRBbmRJCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24s
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJK
U0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAt
Mzk2LDM2ICszOTYsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkQW5k
SQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC0yNDEsMzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRE
ZWxlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjQx
LDM2ICsyNDEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkRGVsZQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAg
ICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFj
dE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTI2NSwzNiArMjY1
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZp
c2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0yNTcsMzYgKzI1NywxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNUZXN0TmFtZWREZWxlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aElu
ZGV4ZWRHZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5j
cHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCkBAIC0yMTUsMzYgKzIxNSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0
TmFtZWRHZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg+IHx8ICFKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdl
dHRlckNhbGxXaXRoKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgg
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxX
aXRoLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGguZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRo
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24g
MjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMjE1LDM2ICsyMTUsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVk
R2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgpAQCAtMjQxLDM2ICsyNDEsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGpzVGVzdE5hbWVkR2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiB8fCAh
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTI5NSwzNiArMjk1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rl
c3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJz
dHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI5NSwzNiArMjk1LDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTMyNiwzNiArMzI2LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2
aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01B
YnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM3Mywz
NiArMzczLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2
aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgi
CiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTQyMywzNiArNDIzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI3MiwzNiArMjcy
LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9u
IDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCkBAIC0zNTYsMzYgKzM1NiwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
czo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9u
IDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKQEAgLTMzMywzNiArMzMzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJp
ZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI5
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q2FsbGFibGUuaCIKQEAgLTI3NSwzNiArMjc1LDEzIEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lc3BhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZXNwYWNlT2JqZWN0PiB8fCAhSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVzcGFjZU9iamVjdCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3ROYW1lc3BhY2VPYmplY3QsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lc3BhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlz
aW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUg
IkpTVGVzdE5vZGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCkBAIC00MDIsMzYgKzQwMiwxMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3Vy
cmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQoKTsKLSAg
ICAgICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIFRlc3ROb2RlSXRlcmF0b3I+IHx8ICFUZXN0Tm9kZUl0ZXJhdG9yOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdE5vZGVJdGVyYXRvcj4pCi0gICAgICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRlc3ROb2RlSXRlcmF0b3IpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJ
dGVyYXRvcik7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0
b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0Tm9kZUl0ZXJhdG9y
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIH0KLQot
ICAgICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3Ig
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9y
LmdldCgpOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPFRlc3ROb2RlSXRlcmF0b3Is
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9y
LmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJ
dGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTUw
NSwzNiArNDgxLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROb2RlUHJvdG8K
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9k
ZT4gfHwgIUpTVGVzdE5vZGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5v
ZGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3ROb2RlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROb2RlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Tm9k
ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxNCAr
MjIsMTQgQEAKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCkBAIC05MDYyLDM2ICs5
MDYyLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RPYmpQcm90b3QKIAogSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPiB8fCAhSlNU
ZXN0T2JqOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPYmo+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE9iaik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T2JqKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0T2JqID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RPYmo6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmogPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3RPYmosIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmou
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmogPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T2Jq
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCShyZXZpc2lvbiAyOTAxNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTIyOSwzNiArMjI5
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RPcGVyYXRpb24KIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29u
ZGl0aW9uYWwuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+
IHx8ICFKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPcGVyYXRpb25Db25kaXRp
b25hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRp
dGlvbmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjkw
MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3IuaCIKQEAgLTMwMCwzNiArMzAwLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1Rlc3RPdmVybG9hZGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gfHwgIUpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
Ci0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTIzNywzNiArMjM3LDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RPdmVybG9hZGUKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4gfHwgIUpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDI5MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RQbHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0yMzksMzYgKzIzOSwx
MyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UGx1Z2luSW50CiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFj
ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFBsdWdpbkludGVyZmFjZT4gfHwgIUpTVGVzdFBsdWdpbkludGVy
ZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UGx1Z2luSW50ZXJmYWNl
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RQbHVnaW5J
bnRlcmZhY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dFBsdWdpbkludGVyZmFjZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdp
bkludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UGx1Z2lu
SW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UGx1Z2luSW50ZXJmYWNlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFBsdWdpbkludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMjk4LDM2ICsyOTgsMTMgQEAgSlNDX0RFRklORV9D
VVNUT01fR0VUVEVSKGpzVGVzdFByb21pc2VSZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ+IHx8ICFKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFk
T25seU1hcExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0zMDAsMzYgKzMwMCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0UmVhZE9ubHlNCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RS
ZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5
TWFwTGlrZT4gfHwgIUpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8
SlNUZXN0UmVhZE9ubHlNYXBMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlN
YXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RSZWFkT25seU1hcExpa2U6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RSZWFkT25seVNldExpa2UuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5
U2V0TGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTI3OSwzNiArMjc5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RSZWFkT25seVMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRP
bmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlTZXRM
aWtlPiB8fCAhSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RSZWFkT25seVNldExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seVNldExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZWFkT25seVNldExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZWFkT25seVNldExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RSZWFkT25seVNldExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZWFkT25seVNldExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExp
a2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNjYsMzYgKzE2NiwxMyBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UmVwb3J0RXh0CiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdD4g
fHwgIUpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVwb3J0RXh0cmFN
ZW1vcnlDb3N0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlD
b3N0LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UmVwb3J0RXh0cmFN
ZW1vcnlDb3N0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5
cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTM0NCwzNiArMzQ0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RTZXJpYWxpemUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlPiB8fCAhSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlr
ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKQEAgLTMzNywzNiArMzM3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RT
ZXRMaWtlUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExpa2U6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtl
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4gfHwgIUpTVGVzdFNldExpa2U6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXRMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
ZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3RTZXRMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
U2V0TGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklE
TFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTM0OSwzNiArMzQ5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RTZXRMaWtlV2kKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucz4gfHwgIUpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9
CiAKIHZvaWQgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXIuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAg
LTE4NywzNiArMTg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdp
ZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RTdHJpbmdpZmllcjo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXI+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllcik7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RT
dHJpbmdpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RTdHJpbmdpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTE4NywzNiArMTg3LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
biwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjkwMTU1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMjA0LDM2
ICsyMDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
biA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2aXNpb24g
MjkwMTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
dmVydFN0cmluZ3MuaCIKQEAgLTIwNCwzNiArMjA0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI5
MDE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTdHJpbmdzLmgiCkBAIC0xODcsMzYgKzE4NywxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0g
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZz4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDI5MDE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgot
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMDMsMzYgKzIw
MywxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOworICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjIyLDM2ICsy
MjIsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFRhZ2dlZFdyYXBwZXIuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RUYWdnZWRXcmFwcGVyLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgiCkBAIC0xNjUsMzYgKzE2NSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNU
ZXN0VGFnZ2VkV3JhCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RUYWdnZWRX
cmFwcGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0VGFnZ2VkV3JhcHBlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdyYXBwZXI+IHx8ICFK
U1Rlc3RUYWdnZWRXcmFwcGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RU
YWdnZWRXcmFwcGVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3RUYWdnZWRXcmFwcGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RUYWdnZWRXcmFwcGVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0VGFnZ2VkV3JhcHBlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
VGFnZ2VkV3JhcHBlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0VGFnZ2VkV3JhcHBlciwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dl
ZFdyYXBwZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFRhZ2dlZFdy
YXBwZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMjkwMTU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFR5cGVkZWZzLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzc1LDM2ICs3NzUsMTMgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFR5cGVkZWZzUAogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcz4gfHwg
IUpTVGVzdFR5cGVkZWZzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUeXBl
ZGVmcz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0VHlw
ZWRlZnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFR5
cGVkZWZzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFR5cGVkZWZzOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0VHlwZWRlZnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RUeXBlZGVmcy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFR5cGVk
ZWZzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RU
eXBlZGVmcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNj
b3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgpAQCAtMjQ2LDMyICsyNDYsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzV29y
a2VyR2xvYmFsUwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXb3JrZXJHbG9iYWxT
Y29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
V29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2Jh
bFNjb3BlLCBKU1dvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNX
b3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtl
ckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlw
ZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZTsg
fQorICAgICk7CiB9CiAKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0
R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNXb3JrbGV0R2xvYmFsU2NvcGUuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC0xNjAsMzIgKzE2MCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNXb3JrbGV0R2xv
YmFsCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dvcmtsZXRHbG9iYWxTY29wZTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEds
b2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmts
ZXRHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNj
b3BlLCBKU1dvcmtsZXRHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
V29ya2xldEdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dv
cmtsZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1dvcmtsZXRHbG9iYWxTY29wZSwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFw
Q2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2Jh
bFNjb3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQo=
</data>
<flag name="review"
          id="479684"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="479698"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452607</attachid>
            <date>2022-02-18 16:53:10 -0800</date>
            <delta_ts>2022-02-18 20:20:05 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-236868.patch</filename>
            <type>text/plain</type>
            <size>326638</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBhIFdlYkNvcmUgc3Vi
c3BhY2VJbXBsRm9yIHRlbXBsYXRlIHRvIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODY4CisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzg5MTcwMDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICBUaGUgcHJlLWV4aXN0aW5nIGNvZGUgaXMgZGlmZmljdWx0IHRvIGZv
bGxvdywgZXNwZWNpYWxseSBpbiBDb2RlR2VuZXJhdG9ySlMucG0uCisgICAgICAgIFRoaXMgY2hh
bmdlIGFsc28gY29uc29saWRhdGVzIHRoZSBmcmFtZXdvcmsgaW1wbGVtZW50YXRpb24gb2Ygc3Vi
c3BhY2VGb3JJbXBsIGluCisgICAgICAgIG9uZSBwbGFjZSByYXRoZXIgdGhhbiBzY2F0dGVyZWQg
YWNyb3NzIDMgbG9jYXRpb25zLiAgVGhpcyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvCisgICAgICAg
IGNoYW5nZSB0aGlzIGNvZGUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBBbHNvIGludHJvZHVj
ZWQgRXh0ZW5kZWRET01Jc29TdWJzcGFjZSBhbmQgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMgY2xhc3NlcworICAgICAgICBhbmQgbW92ZWQgdGhlIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvciBzdWJzcGFjZXMgaW4gdGhlcmUuICBUaGlzIG1ha2VzCisgICAgICAgIHRoZSBj
b2RlIGJlaGF2ZSBtb3JlIGNvbnNpc3RlbnRseSBmb3IgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yJ3MKKyAgICAgICAgSXNvU3Vic3BhY2UgYXMgZm9yIG90aGVyIElzb1N1YnNwYWNl
cy4KKworICAgICAgICBBbHNvIHJlYmFzZWQgYmluZGluZ3MgdGVzdCByZXN1bHRzLgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0V4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0V4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIZWFwRGF0YTo6SlNIZWFwRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVh
cERhdGE6OnN1YnNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6aWRi
U2VyaWFsaXphdGlvblNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpj
bGllbnRTdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OnNldEZp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6c2V0
RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3Nl
ZFN0YXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3c6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9i
YWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3Jp
dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RET01KSVQ6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT04uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRvSlNPTjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJp
YnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RG9t
YWluU2VjdXJpdHk6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRU
YXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXQ6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2Vw
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
QWRkT3BhcXVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHZW5lcmF0ZUFkZE9w
YXF1ZVJvb3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdEdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25fZW50cmllc0NhbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJdGVyYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJsZVByb3RvdHlw
ZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SXRlcmFi
bGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZv
ckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RPYmo6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2lu
SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVyZmFjZTo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dDo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdFN0cmluZ2lmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFR5cGVkZWZzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorCiAyMDIy
LTAyLTE4ICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI5MDE0OS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjQyMCwxMSArMjQyMCwxMSBAQAogCQk3QkI2ODBCQTI1QkExQkU0MDAyQjg3Mzgg
LyogR3JhcGhpY3NDaGVja3NNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdCQjY4MEI4MjVCQTFCRTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01h
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdC
RERBMzFGMjc0RkEwMjEwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRHTENvY29hLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTMxRDI3NEY5REE1
MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRERBMzRDMjc1QTAxMzEwMDM4NjU5RSAv
KiBQcm9jZXNzSWRlbnRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCRERBMzQ5Mjc1QTAxMzAwMDM4NjU5RSAvKiBQcm9jZXNzSWRlbnRpdHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3QkUzN0Y4
NzI3QkJCNzA4MDA3QTZDRDMgLyogVmlkZW9GcmFtZUNWLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkUzN0Y4NjI3QkJCNkZGMDA3QTZDRDMgLyogVmlk
ZW9GcmFtZUNWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJN0JFMzdGN0EyN0JCODZBQjAwN0E2Q0QzIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2Eu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTMx
QzI3NEY5REE0MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5tbSAqLzsgfTsKIAkJ
N0JFMzdGN0MyN0JCODZCODAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDRDQyREEyNzA1Qzk0
OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwICovOyB9OwogCQk3QkUzN0Y3RDI3
QkI4NkNEMDA3QTZDRDMgLyogQU5HTEVVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDRDQyRDgyNzA1OTlFRjAwRUIyMTI3IC8qIEFO
R0xFVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJN0JFMzdGN0UyN0JCODZEQjAwN0E2Q0QzIC8qIEdy
YXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMgLyogR3JhcGhpY3NDb250
ZXh0R0xDVkNvY29hLmNwcCAqLzsgfTsKKwkJN0JFMzdGODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZp
ZGVvRnJhbWVDVi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0JFMzdGODYyN0JCQjZGRjAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTc0MjczODFGQTkwNkZC
QjRGMEYyQyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZH
R3JhcGhpY3NFbGVtZW50LmggKi87IH07CiAJCTdCRkY1OUY0Mjc1NzcyNjcwMDc3M0QzOSAvKiBE
aXNwbGF5Q29uZmlndXJhdGlvbk1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRkY1OUVGMjc1NzcxRTgwMDc3M0QzOSAvKiBEaXNwbGF5Q29u
ZmlndXJhdGlvbk1vbml0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkz
QzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTc0NCw2ICs1NzQ0LDggQEAKIAkJRkRGMDlEQzkxMzk5
QjYyMjAwNjg4RTVCIC8qIEpTQmlxdWFkRmlsdGVyTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGMDlEQzcxMzk5QjYyMjAwNjg4RTVCIC8qIEpT
QmlxdWFkRmlsdGVyTm9kZS5oICovOyB9OwogCQlGREY2QkFGOTEzNEE0Qzk4MDA4MjI5MjAgLyog
SlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovOyB9OwogCQlGREY3RTlDNDEzQUMyMURCMDBBNTFF
QUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlDMjEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1
ZmZlckNhbGxiYWNrLmggKi87IH07CisJCUZFMEJDRjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUwQkNGMzEyN0MwNjYwRjAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmggKi87IH07CisJCUZFMEJDRjM1MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUwQkNGMzMyN0MwNjYxMDAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmggKi87IH07CiAJCUZFMEQ4NEU5MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUw
RDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8q
IENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEu
aCAqLzsgfTsKIAkJRkUzNkZEMTcxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3Rh
dGVNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
aCAqLzsgfTsKQEAgLTE4MjkxLDYgKzE4MjkzLDggQEAKIAkJRkRGNkJBRjcxMzRBNEM5ODAwODIy
OTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERjdFOUMxMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlv
QnVmZmVyQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwQkNGMzEyN0MwNjYwRjAwQkZCMkRCIC8qIEV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTBEODRFODEwNDg0
MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUwRDg0RUExMDQ4
NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFuZ2VWZXJzaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjkzMzYsNiArMjkzNDAsOCBAQAogCQkJCUJDNTNEQTQ3MTE0MzEz
NEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEy
MUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKIAkJCQkyRDI5Mzg2OTIzNUY2QjY4
MDBDN0YzQjIgLyogRXhjZXB0aW9uRGV0YWlscy5oICovLAorCQkJCUZFMEJDRjMzMjdDMDY2MTAw
MEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oICovLAorCQkJCUZFMEJD
RjMxMjdDMDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovLAogCQkJ
CTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICovLAogCQkJCTE0
MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCAqLywKIAkJCQlDNTg1QTY2
MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgKi8sCkBAIC0zNTE4
Miw2ICszNTE4OCw3IEBACiAJCQkJNzE0QzdDNkQxRkRBREFGNjAwRjJCRUUxIC8qIEpTQW5pbWF0
aW9uUGxheWJhY2tFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMDI1RURFMUY5OUYx
RUMwMDRBMjUwQyAvKiBKU0FuaW1hdGlvblRpbWVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTk1NkYxQzIzMzFBNjc3MDA1N0U5RDIgLyogSlNBcHBsZVBheUNhbmNlbEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTBCQ0YzNTI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExREY1QTk5MUY3RUM4QzAwMDU4
QTQ3NyAvKiBKU0FwcGxlUGF5Q29udGFjdEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NTk2
QjkzODI1REVFRjAzMDBFRDJDRkEgLyogSlNBcHBsZVBheUNvdXBvbkNvZGVDaGFuZ2VkRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk1RUFENTgzMjY2RUY1M0IwMDRCOUNGMSAvKiBKU0FwcGxl
UGF5Q291cG9uQ29kZURldGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzcxMDQsNiArMzcxMTEs
NyBAQAogCQkJCTA3OEUwOTQ0MTdEMTZFMUMwMDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRp
b25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTM1OTEwQjFFN0REQzczMDBGMzA2MzAg
LyogUlRDU2lnbmFsaW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTJBMTdEMTRE
MUMwMDQyMEFBMSAvKiBSVENTdGF0c1JlcG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwQkNG
MzQyN0MwNjYxMDAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1RTJDNDM2ODFCQ0VFMzc3MDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDcxN0QxNkUxQzAwNDIwQUExIC8qIFJUQ1ZvaWRSZXF1
ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1ODI0QUJBMzFBRTgxMTE2MDA5MDc0QjcgLyogUnVi
eUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMgOiBwdWJsaWMgRE9NQ2xpZW50SXNv
U3Vic3BhY2VzIHsKK3B1YmxpYzoKKyAgICBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcygp
ID0gZGVmYXVsdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+IG1fY2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcyA6IHB1YmxpYyBET01Jc29TdWJzcGFjZXMgeworcHVibGljOgorICAgIEV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZhdWx0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6
Oklzb1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oPgpAQCAtNTAsMzYgKzUyLDEyIEBAIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvIEpTRmlsZVN5c3RlbURpcmVjdG8KIEdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNGaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9ySW1wbChWTSYgdm0pCiB7
CiAgICAgSlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gaGVhcERhdGEuZmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yPiB8fCAhSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3IpOwotICAgICAgICBoZWFwRGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKSk7Ci0KLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgYXV0byogY2xpZW50U3BhY2UgPSBuZXcgR0NDbGllbnQ6Oklzb1N1YnNwYWNlKCpz
cGFjZSk7Ci0gICAgY2xpZW50RGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8R0NDbGllbnQ6Oklzb1N1YnNwYWNlPihjbGllbnRTcGFj
ZSkpOwotICAgIHJldHVybiBjbGllbnRTcGFjZTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7
IH0KKyAgICApOwogfQogCiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0ZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcl9vblByb21pc2VTZXR0bGVkQm9keShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSosIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yKiBjYXN0ZWRUaGlzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25zdHJhaW50LmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTQXVk
aW9Xb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaCIKQEAgLTkwLDcgKzkwLDcgQEAgSlNI
ZWFwRGF0YTo6SlNIZWFwRGF0YShIZWFwJiBoZWFwKQogICAgICwgbV9ydW50aW1lT2JqZWN0U3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9ydW50aW1lT2JqZWN0SGVhcENlbGxUeXBlLCBK
U0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0KQogICAgICwgbV93aW5kb3dQcm94eVNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIG1fd2luZG93UHJveHlIZWFwQ2VsbFR5cGUsIEpTV2luZG93
UHJveHkpCiAgICAgLCBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCwgSlNJ
REJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KQotICAgICwgbV9zdWJzcGFjZXMobWFrZVVuaXF1
ZTxET01Jc29TdWJzcGFjZXM+KCkpCisgICAgLCBtX3N1YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzPigpKQogewogfQogCkBAIC0xMjIsNyArMTIyLDcgQEAgSlNWTUNs
aWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICAsIENMSUVOVF9JU09fU1VCU1BB
Q0VfSU5JVChtX3J1bnRpbWVPYmplY3RTcGFjZSkKICAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0Vf
SU5JVChtX3dpbmRvd1Byb3h5U3BhY2UpCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQo
bV9pZGJTZXJpYWxpemF0aW9uU3BhY2UpCi0gICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5p
cXVlPERPTUNsaWVudElzb1N1YnNwYWNlcz4oKSkKKyAgICAsIG1fY2xpZW50U3Vic3BhY2VzKG1h
a2VVbmlxdWU8RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCiB7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJ
KHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTUNsaWVudElzb1N1YnNwYWNlczsKLWNsYXNzIERPTUlz
b1N1YnNwYWNlczsKK2NsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzOworY2xhc3Mg
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM7CiAKIGNsYXNzIEpTSGVhcERhdGEgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEpTSGVhcERhdGEpOwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTSGVhcERhdGEqIGVuc3VyZUhlYXBEYXRhKEpTQzo6SGVhcCYpOwogCiAgICAg
TG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQotICAgIERPTUlzb1N1YnNwYWNlcyYgc3Vi
c3BhY2VzKCkgeyByZXR1cm4gKm1fc3Vic3BhY2VzLmdldCgpOyB9CisgICAgRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMmIHN1YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsgfQog
CiAgICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiYgb3V0cHV0Q29uc3RyYWludFNwYWNlcygp
IHsgcmV0dXJuIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlczsgfQogCkBAIC01NSw5ICs1NSw2IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKnNwYWNlKTsKICAgICB9CiAKLSAgICBKU0M6Oklz
b1N1YnNwYWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0
dXJuIG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5p
cXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KLQog
cHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKIApAQCAtOTMsOSArOTAsOCBAQCBwcml2YXRlOgog
ICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2JqZWN0U3BhY2U7CiAgICAgSlNDOjpJc29T
dWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CiAgICAgSlNDOjpJc29TdWJzcGFjZSBtX2lkYlNl
cmlhbGl6YXRpb25TcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4g
bV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxET01Jc29TdWJzcGFjZXM+IG1fc3Vic3BhY2VzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbmRlZERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7CiAgICAgVmVjdG9yPEpTQzo6
SXNvU3Vic3BhY2UqPiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7CiB9OwogCkBAIC0xNDEsMTAg
KzEzNyw4IEBAIHB1YmxpYzoKICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgcnVudGlt
ZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1lT2JqZWN0U3BhY2U7IH0KICAgICBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgd2luZG93UHJveHlTcGFjZSgpIHsgcmV0dXJuIG1fd2lu
ZG93UHJveHlTcGFjZTsgfQogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiBpZGJTZXJp
YWxpemF0aW9uU3BhY2UoKSB7IHJldHVybiBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsgfQotICAg
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
U3BhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4gc3Bh
Y2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhj
aGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CiAKLSAgICBET01DbGllbnRJc29TdWJzcGFjZXMmIGNs
aWVudFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNwYWNlcy5nZXQoKTsgfQorICAg
IEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBjbGllbnRTdWJzcGFjZXMoKSB7IHJldHVy
biAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PERP
TVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7CkBAIC0xNjQsOCArMTU4LDU0IEBAIHByaXZhdGU6
CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwogICAg
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxET01D
bGllbnRJc29TdWJzcGFjZXM+IG1fY2xpZW50U3Vic3BhY2VzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcz4gbV9jbGllbnRTdWJzcGFjZXM7CiB9Owog
CisKK2VudW0gY2xhc3MgVXNlQ3VzdG9tSGVhcENlbGxUeXBlIHsgWWVzLCBObyB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBVc2VDdXN0b21IZWFwQ2VsbFR5cGUgdXNlQ3VzdG9tSGVhcENlbGxU
eXBlLCB0eXBlbmFtZSBHZXRDbGllbnQsIHR5cGVuYW1lIFNldENsaWVudCwgdHlwZW5hbWUgR2V0
U2VydmVyLCB0eXBlbmFtZSBTZXRTZXJ2ZXI+CitBTFdBWVNfSU5MSU5FIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0sIEdldENsaWVudCBnZXRD
bGllbnQsIFNldENsaWVudCBzZXRDbGllbnQsIEdldFNlcnZlciBnZXRTZXJ2ZXIsIFNldFNlcnZl
ciBzZXRTZXJ2ZXIsIEpTQzo6SGVhcENlbGxUeXBlJiAoKmdldEN1c3RvbUhlYXBDZWxsVHlwZSko
SlNIZWFwRGF0YSYpID0gbnVsbHB0cikKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgY2xpZW50
U3Vic3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBnZXRDbGllbnQoY2xpZW50U3Vic3BhY2VzKSkKKyAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OworCisgICAgYXV0byYg
c3Vic3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7CisgICAgSlNDOjpJc29TdWJzcGFjZSog
c3BhY2UgPSBnZXRTZXJ2ZXIoc3Vic3BhY2VzKTsKKyAgICBpZiAoIXNwYWNlKSB7CisgICAgICAg
IEpTQzo6SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6
Oklzb1N1YnNwYWNlPiB1bmlxdWVTdWJzcGFjZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCh1c2VD
dXN0b21IZWFwQ2VsbFR5cGUgPT0gVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXMgfHwgc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVD4gfHwgIVQ6Om5lZWRzRGVz
dHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHVzZUN1c3RvbUhlYXBDZWxsVHlwZSA9
PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllcykKKyAgICAgICAgICAgIHVuaXF1ZVN1YnNwYWNl
ID0gbWFrZVVuaXF1ZTxKU0M6Oklzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBn
ZXRDdXN0b21IZWFwQ2VsbFR5cGUoaGVhcERhdGEpLCBUKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIFQ+KQorICAgICAgICAgICAgICAgIHVuaXF1ZVN1YnNwYWNlID0gbWFrZVVuaXF1
ZTxKU0M6Oklzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdW5pcXVlU3Vic3BhY2UgPSBtYWtlVW5pcXVlPEpTQzo6SXNvU3Vic3BhY2U+IElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVCk7CisgICAgICAgIH0K
KyAgICAgICAgc3BhY2UgPSB1bmlxdWVTdWJzcGFjZS5nZXQoKTsKKyAgICAgICAgc2V0U2VydmVy
KHN1YnNwYWNlcywgdW5pcXVlU3Vic3BhY2UpOworCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwor
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgfQorCisgICAgYXV0byB1bmlxdWVDbGllbnRTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7CisgICAgYXV0byogY2xpZW50U3BhY2Ug
PSB1bmlxdWVDbGllbnRTdWJzcGFjZS5nZXQoKTsKKyAgICBzZXRDbGllbnQoY2xpZW50U3Vic3Bh
Y2VzLCB1bmlxdWVDbGllbnRTdWJzcGFjZSk7CisgICAgcmV0dXJuIGNsaWVudFNwYWNlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjkwMTc5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTQ4NzEsNTAgKzQ4NzEsMzIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAk
aW50ZXJmYWNlLT5pdGVyYWJsZTsKIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIpOwotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01Jc29TdWJzcGFjZXMu
aCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
KTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIik7CiAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPiIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUv
U2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFTY3Jp
cHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqICR7Y2xhc3NOYW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpO1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpKVxu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTtc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTtcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTtcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghc3BhY2UpIHtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDtcbiIpOwogCisgICAgbXkgJHVzZUN1c3RvbUhlYXBD
ZWxsOworICAgIG15ICRjdXN0b21IZWFwQ2VsbFR5cGVHZXR0ZXI7CiAgICAgaWYgKElzRE9NR2xv
YmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
RGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtjbGFzc05hbWV9KTtcbiIpOwor
ICAgICAgICAkdXNlQ3VzdG9tSGVhcENlbGwgPSAiWWVzIjsKKyAgICAgICAgJGN1c3RvbUhlYXBD
ZWxsVHlwZUdldHRlciA9ICJbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYg
eyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9yJHtjbGFzc05hbWV9OyB9IjsKICAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2NsYXNzTmFt
ZX0+IHx8ICEke2NsYXNzTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pO1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4pXG4iKTsKLSAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgJHtjbGFzc05hbWV9KTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgZWxzZVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgfQotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29kZVwiKVxuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZVwiKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSAke2NsYXNzTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50cztcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTtcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiSUdOT1JFX1dBUk5JTkdTX0VORFxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICR1c2VDdXN0b21I
ZWFwQ2VsbCA9ICJObyI7CisgICAgICAgICRjdXN0b21IZWFwQ2VsbFR5cGVHZXR0ZXIgPSAibnVs
bHB0ciI7CisgICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNl
TmFtZX0uZ2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPCR7Y2xhc3NOYW1lfSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjokdXNlQ3Vz
dG9tSGVhcENlbGw+KHZtLFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRl
cmZhY2VOYW1lfS5nZXQoKTsgfSxcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gV1RGTW92ZShzcGFjZSk7IH0sXG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpOyB9LFxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsgfSxc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkY3VzdG9tSGVhcENlbGxUeXBl
R2V0dGVyXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICApO1xuIik7CiAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4p
IHsKQEAgLTY4MDIsMzYgKzY3ODQsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgY29u
c3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVy
YXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwotICAgICAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtp
dGVyYXRvck5hbWV9PiB8fCAhJHtpdGVyYXRvck5hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1lfSk7Ci0gICAgICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUt
Y29kZVwiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIikK
LSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOworICAgICAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPCR7aXRlcmF0b3JOYW1lfSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsgfSwKKyAgICAgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvciR7aXRlcmF0b3JOYW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFt
ZX0uZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsg
fQorICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDI5
MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdp
bmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTM2NiwzMiArMzY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c0RPTVdpbmRvd19UZXMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5k
b3cuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93Lmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3csIEpTRE9NV2luZG93KTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTRE9NV2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTRE9NV2luZG93LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olll
cz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdyA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBD
ZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3c7IH0K
KyAgICApOwogfQogCiB2b2lkIEpTRE9NV2luZG93OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCkBAIC0xNjcsMzIgKzE2NywxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNEZWRp
Y2F0ZWRXb3JrCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hl
YXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6
SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNF
eHBvc2VkU3Rhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU0V4cG9zZWRTdGFyLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjMx
LDM2ICsyMzEsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzRXhwb3NlZFN0YXJQcgog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNFeHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0V4cG9zZWRTdGFyPiB8fCAhSlNFeHBvc2VkU3Rhcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNFeHBvc2VkU3Rhcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNFeHBvc2VkU3Rhcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNFeHBvc2VkU3Rhcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3Nl
ZFN0YXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRXhwb3NlZFN0YXI6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpT
RXhwb3NlZFN0YXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRT
dGFyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
ckV4cG9zZWRTdGFyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU0V4cG9zZWRTdGFyOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAJKHJldmlzaW9uIDI5MDE3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTI0OSwzNiArMjQ5LDEzIEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc0V4cG9zZWRUb1dvcmsKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHx8ICFKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3c+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdywgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsK
IH0KIAogdm9pZCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTE2NiwzMiArMTY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1BhaW50V29ya2xldEcKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1f
aGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSwgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRH
bG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5t
X2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQog
CiB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMTY2LDMyICsxNjYsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzU2VydmljZVdvcmtlcgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEu
bV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSwgSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckds
b2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJl
dHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsg
fQorICAgICk7CiB9CiAKIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2hh
ZG93UmVhbG1HbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE1MiwzMiArMTUyLDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1NoYWRvd1JlYWxtR2wKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRh
Lm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLCBKU1NoYWRvd1JlYWxt
R2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xv
YmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2hhZG93UmVhbG1H
bG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhZG93UmVhbG1HbG9iYWxTY29w
ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFs
U2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFk
b3dSZWFsbUdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2Vs
bFR5cGVGb3JKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpT
U2hhZG93UmVhbG1HbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTE1MCwzMiArMTUwLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NoYXJlZFdv
cmtlckcKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNo
YXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9y
SlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZl
cikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZv
ckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjkw
MTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENF
UmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBAIC00MzMsMzYgKzQzMywxMyBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Q0VSZWFjdGlvCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RDRVJlYWN0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENF
UmVhY3Rpb25zPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0Q0VSZWFjdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0Q0VSZWFjdGlvbnMsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENFUmVhY3Rpb25zID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25z
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnM6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI5MDE3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJl
YWN0aW9uUXVldWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjU5LDM2ICsyNTksMTMg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3RpbwogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZp
c2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RDYWxsVHJhY2VyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgpAQCAtNTA4LDM2ICs1MDgsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENh
bGxUcmFjZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q2FsbFRyYWNlcjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxU
cmFjZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxU
cmFjZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPiB8fCAhSlNUZXN0Q2FsbFRyYWNlcjo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlcj4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2FsbFRyYWNlcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2FsbFRyYWNlcik7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENhbGxUcmFjZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDYWxsVHJhY2VyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2Fs
bFRyYWNlci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENhbGxUcmFj
ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDYWxsVHJhY2VyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDYWxsVHJh
Y2VyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTcxLDM2ICsxNzEsMTMgQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdENsYXNzV2l0aAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXMuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtNzg0LDM2ICs3ODQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENvbmRp
dGlvbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewot
ICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlcyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbElu
Y2x1ZGVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRX
cml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCShyZXZpc2lvbiAyOTAxNzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0
aW9uYWxseVJlYWRXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAog
I2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTYwNiwzNiArNjA2LDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRKU1Rlc3RDb25kaXQKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25k
aXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0
ZT4gfHwgIUpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25h
bGx5UmVhZFdyaXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDb25k
aXRpb25hbGx5UmVhZFdyaXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJl
YWRXcml0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlv
bmFsbHlSZWFkV3JpdGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RD
b25kaXRpb25hbGx5UmVhZFdyaXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDI5MDE3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAKICNpbmNsdWRlICJKU1Rl
c3RET01KSVQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkRPTUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJET01KSVRJ
RExDb252ZXJ0LmgiCiAjaW5jbHVkZSAiRE9NSklUSURMVHlwZS5oIgogI2luY2x1ZGUgIkRPTUpJ
VElETFR5cGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTI0NywzNiArMTI0NywxMyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04oanNUZXN0RE9NSklUUHJvCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RET01KSVQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERPTUpJVD4gfHwgIUpT
VGVzdERPTUpJVDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RET01KSVQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERPTUpJVCk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklU
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RE9NSklULCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RE9NSklUID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dERPTUpJVCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RET01KSVQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHJldmlz
aW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3REZWZhdWx0VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAog
I2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtODAzLDM2ICs4MDMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1
bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT04uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT04uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0RGVm
YXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVm
YXVsdFRvSlNPTik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RGVmYXVsdFRvSlNPTik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT04gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRU
b0pTT046OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT04sIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2Vk
LmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09O
RmlsdGVyZWRCeUV4cG9zZWQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNjUsMzYgKzI2NSwxMyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4
cG9zZWQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRl
cmVkQnlFeHBvc2VkPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJl
ZEJ5RXhwb3NlZCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVs
dFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOworICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0
YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNp
b24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNTcsMzYgKzE1NywxMyBAQCBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
LmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Lmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMjg3LDM2ICsyODcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1
bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTkluaGVyaXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdEZpbmFsLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMzI3LDM2ICszMjcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pT
T05Jbmhlcml0RmluYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1No
YXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwzNiArMjQxLDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX1NFVFRFUihzZXRKU1Rlc3REZWxlZ2EKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3lu
dGhldGljQXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZT4gfHwgIUpTVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRp
Y0F0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVn
YXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRp
Y0F0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50
aGV0aWNBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50
aGV0aWNBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3Vy
aXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgotI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0z
MTUsMzYgKzMxNSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RG9tYWluU2Vj
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REb21haW5TZWN1cml0eTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNl
Y3VyaXR5LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21h
aW5TZWN1cml0eS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PiB8fCAhSlNUZXN0RG9t
YWluU2VjdXJpdHk6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNl
Y3VyaXR5PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RE
b21haW5TZWN1cml0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0RG9tYWluU2VjdXJpdHkpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
b21haW5TZWN1cml0eSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RG9t
YWluU2VjdXJpdHk6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RG9tYWluU2VjdXJpdHksIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERv
bWFpblNlY3VyaXR5LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RG9t
YWluU2VjdXJpdHk6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHJldmlzaW9u
IDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC00NTQsMzYgKzQ1NCwxMyBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RW5hYmxlZEJ5CiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+IHx8ICFKU1Rlc3RFbmFibGVkQnlTZXR0
aW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5n
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVk
QnlTZXR0aW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RFbmFibGVkQnlTZXR0aW5nKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5h
YmxlZEJ5U2V0dGluZyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RW5hYmxlZEJ5U2V0dGluZywg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlT
ZXR0aW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JD
b250ZXh0LmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMTgxLDM2ICsxODEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEVuYWJs
ZWRGbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RF
bmFibGVkRm9yQ29udGV4dC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4
dD4gfHwgIUpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RFbmFibGVkRm9yQ29udGV4dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9y
Q29udGV4dC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0zMTgsMzYgKzMxOCwxMyBAQCBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNUZXN0RXZlbnRDb25zCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3I+IHx8ICFKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudENvbnN0cnVj
dG9yKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOworICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvciwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50
Q29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3I6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjkwMTc5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdEV2ZW50VGFyZ2V0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjU3LDM2ICsyNTcsMTMgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEV2ZW50VGFyZwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0RXZlbnRUYXJnZXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRh
cmdldD4gfHwgIUpTVGVzdEV2ZW50VGFyZ2V0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RFdmVudFRhcmdldD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RXZlbnRUYXJnZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dEV2ZW50VGFyZ2V0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50VGFyZ2V0LCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RFdmVudFRhcmdldCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhj
ZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4Miwx
MyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RXhjZXB0aW9uCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEV4Y2VwdGlvbj4gfHwgIUpTVGVzdEV4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdEV4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEV4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXhj
ZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0RXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9u
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4
Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9w
YXF1ZVJvb3QuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEdlbmVyYXRlQWRkT3Bh
cXVlUm9vdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTE4MiwzNiArMTgyLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c1Rlc3RHZW5lcmF0ZUEKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290PiB8fCAhSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVS
b290OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1
ZVJvb3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEdl
bmVyYXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRP
cGFxdWVSb290ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTE5MiwzNiArMTkyLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3RHZW5lcmF0ZUkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4gfHwgIUpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rl
c3RHbG9iYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3Js
ZC5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0x
ODI1LDMyICsxODI1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RHbG9iYWxP
YmoKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdsb2JhbE9iamVjdDo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9i
amVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFs
T2JqZWN0LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxP
YmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdsb2JhbE9iamVj
dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPEpTVGVzdEdsb2JhbE9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZ
ZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RH
bG9iYWxPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9o
ZWFwQ2VsbFR5cGVGb3JKU1Rlc3RHbG9iYWxPYmplY3Q7IH0KKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdEdsb2JhbE9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMjcxLDM2ICsyNzEsMTMgQEAgSlNDX0RFRklORV9D
VVNUT01fR0VUVEVSKGpzVGVzdEluZGV4ZWRTZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
PiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTI3MSwzNiArMjcxLDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIK
KyAgICApOwogfQogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMzAzLDM2ICszMDMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdElu
ZGV4ZWRTZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24g
MjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDkgQEAKICNpbmNsdWRl
ICJKU1Rlc3RJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkVsZW1lbnRJbmxpbmVzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0xMTAxLDM2ICsxMTAxLDEyIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNz
OjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOwotICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKSkKLSAgICAgICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgICAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJ
dGVyYXRvci5nZXQoKTsKLSAgICAgICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4gfHwg
IVRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4pCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAg
ICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SW50ZXJmYWNlSXRlcmF0b3I6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAg
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9y
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0
ZXJhdG9yLmdldCgpOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPFRlc3RJbnRlcmZh
Y2VJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
bnRlcmZhY2VJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJ
dGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0
KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsg
fQorICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xMjA0LDM2ICsxMTgwLDEzIEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3RJbnRlcmZhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlPiB8
fCAhSlNUZXN0SW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJ
bnRlcmZhY2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dEludGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0SW50ZXJmYWNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbnRlcmZhY2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RJbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
bnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dEludGVyZmFjZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmUuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNUZXN0SW50ZXJmYWNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPiB8
fCAhSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpOworICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkocmV2aXNpb24gMjkwMTc5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dEl0ZXJhYmxlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnZlcnRJbnRlcmZhY2UuaCIKQEAgLTE5NiwzNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
ICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAg
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0
KCk7Ci0gICAgICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SXRlcmFibGVJdGVyYXRvcj4gfHwgIVRlc3RJdGVyYWJs
ZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxl
SXRlcmF0b3I+KQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBU
ZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBUZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gVGVzdEl0ZXJhYmxlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxUZXN0SXRlcmFibGVJdGVyYXRvciwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgp
OyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRl
cmFibGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
QEAgLTI5OSwzNiArMjc1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RJdGVy
YWJsZVAKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEl0ZXJhYmxlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0SXRlcmFibGU+IHx8ICFKU1Rlc3RJdGVyYWJsZTo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SXRlcmFibGU+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEl0ZXJhYmxlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RJdGVyYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJdGVyYWJsZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFi
bGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
dGVyYWJsZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RJdGVyYWJsZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCkBAIC0yMjUsMzYgKzIy
NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SlNCdWlsdGluCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
PiB8fCAhSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgpAQCAtMjI3LDM2ICsy
MjcsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdExlZ2FjeUZhYwogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVu
Y3Rpb24+IHx8ICFKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lGYWN0
b3J5RnVuY3Rpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0
b3J5RnVuY3Rpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2Fj
eUZhY3RvcnlGdW5jdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5j
dGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3Rv
cnlGdW5jdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdExlZ2Fj
eUZhY3RvcnlGdW5jdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5
RmFjdG9yeUZ1bmN0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9i
amVjdC5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTMzMCwzNiArMzMw
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RMZWdhY3lOb0kKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9J
bnRlcmZhY2VPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRl
cmZhY2VPYmplY3Q+IHx8ICFKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjkwMTc5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0NCwz
NiArMjQ0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RMZWdhY3lPdmUKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9
CiAKIHZvaWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAko
cmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE1hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTM2MSwzNiArMzYxLDEzIEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3RNYXBMaWtlUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RNYXBMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZT4gfHwgIUpTVGVzdE1h
cExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlr
ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RNYXBMaWtlLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwMTc5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4
IEBACiAjaW5jbHVkZSAiSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM3NSwzNiArMzc1LDEzIEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RNYXBMaWtlV2kKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MzM5LDM2ICszMzksMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkQW5k
SQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUuaCIKQEAgLTMzOSwzNiArMzM5LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9N
X0dFVFRFUihqc1Rlc3ROYW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHx8ICFKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zOTYsMzYgKzM5NiwxMyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRBbmRJCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiB8
fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwzNiArMjQxLDEz
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3Ry
YWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0MSwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWREZWxlCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24g
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQg
SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMjY1LDM2ICsyNjUsMTMgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkRGVsZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTI1NywzNiArMjU3LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1l
ZERlbGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHx8ICFK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
cjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjkw
MTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIxNSwzNiAr
MjE1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEdldHQKIAogSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEdldHRlckNhbGxXaXRoLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD4g
fHwgIUpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGggPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7
CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMTUsMzYgKzIxNSwx
MyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRHZXR0CiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5
MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CkBAIC0yNDEsMzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFt
ZWRHZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsK
LSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTc5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjk1LDM2
ICsyOTUsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjk1LDM2ICsyOTUsMTMgQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzI2LDM2
ICszMjYsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzczLDM2ICszNzMsMTMgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNDIz
LDM2ICs0MjMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAy
OTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjcyLDM2ICsyNzIsMTMgQEAgSlNDX0RFRklO
RV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAh
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
QEAgLTM1NiwzNiArMzU2LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1l
ZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPiB8fCAhSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAg
ICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01B
YnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtMzMz
LDM2ICszMzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
QW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQ
cm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1l
c3BhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDYWxs
YWJsZS5oIgpAQCAtMjc1LDM2ICsyNzUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdE5hbWVzcGFjZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZXNw
YWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmpl
Y3Q+IHx8ICFKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVzcGFjZU9iamVjdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lc3BhY2VPYmplY3QpOwotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVzcGFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVzcGFjZU9iamVjdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dE5hbWVzcGFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVj
dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lc3BhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJv
bWlzZVByb3h5LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKQEAgLTQwMiwzNiArNDAyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2Rl
SXRlcmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICAg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOwotICAgICAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVz
dE5vZGVJdGVyYXRvcj4gfHwgIVRlc3ROb2RlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBUZXN0Tm9kZUl0ZXJhdG9yPikKLSAgICAgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0Tm9kZUl0ZXJhdG9yKTsKLSAgICAg
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3ROb2RlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7CisgICAgICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdE5vZGVJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAg
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
b2RlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gV1RGTW92
ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNTA1LDM2ICs0ODEsMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5vZGVQcm90bwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROb2RlPiB8fCAhSlNUZXN0Tm9k
ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9kZT4pCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5vZGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdE5vZGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
b2RlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROb2RlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROb2RlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2
aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE0ICsyMiwxNCBAQAogI2luY2x1
ZGUgIkpTVGVzdE9iai5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAj
aW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJFbGVtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKQEAgLTkwNjIsMzYgKzkwNjIsMTMgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9ialByb3RvdAogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RPYmouZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPYmo+IHx8ICFKU1Rlc3RPYmo6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9iaj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T2JqKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RPYmopOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RPYmogPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9iajo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE9iaiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE9iai5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE9iaiwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE9iaiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RPYmogPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
cGVyYXRpb25Db25kaXRpb25hbC5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJKU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMjI5LDM2ICsyMjksMTMgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9wZXJhdGlvbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4gfHwgIUpTVGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVy
YXRpb25Db25kaXRpb25hbD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgpAQCAtMzAwLDM2ICszMDAsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE92
ZXJsb2FkZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9N
Q29udmVydEludGVyZmFjZS5oIgpAQCAtMjM3LDM2ICsyMzcsMTMgQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdE92ZXJsb2FkZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJm
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RQ
bHVnaW5JbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTIzOSwzNiArMjM5LDEzIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3RQbHVnaW5JbnQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlPiB8fCAhSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFBsdWdpbkludGVyZmFjZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNl
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNl
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBy
b21pc2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJl
dmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5
ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNl
UHJveHkuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yLmgiCkBAIC0yOTgsMzYgKzI5OCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNU
ZXN0UHJvbWlzZVJlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudD4gfHwgIUpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25s
eU1hcExpa2UuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5TWFwTGlrZS5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAg
LTMwMCwzNiArMzAwLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RSZWFkT25s
eU0KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRP
bmx5TWFwTGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UmVhZE9ubHlNYXBMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPiB8fCAhSlNU
ZXN0UmVhZE9ubHlNYXBMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RS
ZWFkT25seU1hcExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RSZWFkT25seU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1h
cExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1h
cExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RSZWFkT25seU1h
cExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1h
cExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9u
bHlNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0
TGlrZS5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjc5
LDM2ICsyNzksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFJlYWRPbmx5Uwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlT
ZXRMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFk
T25seVNldExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seVNldExpa2U+IHx8ICFKU1Rlc3RS
ZWFkT25seVNldExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRP
bmx5U2V0TGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0UmVhZE9ubHlTZXRMaWtlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RSZWFkT25seVNldExpa2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RSZWFkT25seVNldExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdFJlYWRPbmx5U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlr
ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlr
ZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFJlYWRPbmx5U2V0TGlr
ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlr
ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNl
dExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0
cmFNZW1vcnlDb3N0LmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE2NiwzNiArMTY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3RSZXBvcnRFeHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PiB8fCAhSlNUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0KTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJ
KHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzQ0LDM2
ICszNDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNlcmlhbGl6ZQogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IHx8ICFKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2UuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzM3LDM2ICsz
MzcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNldExpa2VQcgogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
ZXRMaWtlPiB8fCAhSlNUZXN0U2V0TGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0U2V0TGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0U2V0TGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0U2V0TGlrZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2Ug
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2U6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTZXRMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0U2V0TGlrZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNl
dExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
ZXRMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTZXRMaWtlOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzQ5
LDM2ICszNDksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNldExpa2VXaQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB8fCAh
SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAJ
KHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTMg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0g
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllcj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVy
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTMgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24u
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yMDQsMzYgKzIwNCwxMyBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRP
cGVyYXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPikKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRP
cGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpA
QCAtMjA0LDM2ICsyMDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmlu
Z2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXM+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBcz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBcywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAg
LTE4NywzNiArMTg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdp
ZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25O
YW1lZFRvU3RyaW5nLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmc+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTc5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIwMywzNiArMjAzLDEzIEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMjIsMzYgKzIyMiwxMyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5j
cHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFRhZ2dlZFdyYXBwZXIuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE2NSwz
NiArMTY1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RUYWdnZWRXcmEKIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVy
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFw
cGVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0VGFnZ2VkV3JhcHBlcj4gfHwgIUpTVGVzdFRhZ2dlZFdyYXBw
ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdyYXBwZXI+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFRhZ2dlZFdyYXBw
ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFRhZ2dl
ZFdyYXBwZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVy
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUYWdnZWRXcmFwcGVyOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3RUYWdnZWRXcmFwcGVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRh
Z2dlZFdyYXBwZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0VGFnZ2VkV3JhcHBlcjo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCShyZXZpc2lvbiAyOTAxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0VHlwZWRlZnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCkBAIC03NzUsMzYgKzc3NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0VHlwZWRlZnNQCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RU
eXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFR5cGVkZWZzLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RUeXBlZGVmcy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFR5cGVkZWZzPiB8fCAhSlNUZXN0VHlwZWRlZnM6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFR5cGVkZWZzPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RUeXBlZGVmcyk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0VHlwZWRlZnMpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0VHlwZWRlZnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVm
cyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0VHlwZWRlZnMsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFR5cGVkZWZzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0VHlwZWRlZnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0VHlwZWRlZnM6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxT
Y29wZS5jcHAJKHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDYsMzIg
KzI0NiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNXb3JrZXJHbG9iYWxTCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29w
ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGUsIEpTV29ya2Vy
R2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNj
b3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1dvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldv
cmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2
ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAog
dm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJ
KHJldmlzaW9uIDI5MDE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIy
LDggQEAKICNpbmNsdWRlICJKU1dvcmtsZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2MCwzMiArMTYwLDEz
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1dvcmtsZXRHbG9iYWwKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGUsIEpTV29ya2xldEds
b2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2Nv
cGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2xldEdsb2JhbFNjb3Bl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTV29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2Nv
cGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1
cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGU7IH0KKyAgICAp
OwogfQogCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452618</attachid>
            <date>2022-02-18 19:52:05 -0800</date>
            <delta_ts>2022-02-18 21:36:01 -0800</delta_ts>
            <desc>EWS test 1</desc>
            <filename>bug-236868-test1.patch</filename>
            <type>text/plain</type>
            <size>326708</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlLWxhbmRpbmddIFByb3ZpZGUg
YSBXZWJDb3JlIHN1YnNwYWNlSW1wbEZvciB0ZW1wbGF0ZSB0byBtYWtlIGNvZGUgbW9yZSByZWFk
YWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Njg2OAorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTE3MDA5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhlIHByZS1leGlzdGluZyBjb2RlIGlzIGRp
ZmZpY3VsdCB0byBmb2xsb3csIGVzcGVjaWFsbHkgaW4gQ29kZUdlbmVyYXRvckpTLnBtLgorICAg
ICAgICBUaGlzIGNoYW5nZSBhbHNvIGNvbnNvbGlkYXRlcyB0aGUgZnJhbWV3b3JrIGltcGxlbWVu
dGF0aW9uIG9mIHN1YnNwYWNlRm9ySW1wbCBpbgorICAgICAgICBvbmUgcGxhY2UgcmF0aGVyIHRo
YW4gc2NhdHRlcmVkIGFjcm9zcyAzIGxvY2F0aW9ucy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2ll
ciB0bworICAgICAgICBjaGFuZ2UgdGhpcyBjb2RlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAg
QWxzbyBpbnRyb2R1Y2VkIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2UgYW5kIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzIGNsYXNzZXMKKyAgICAgICAgYW5kIG1vdmVkIHRoZSBGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Igc3Vic3BhY2VzIGluIHRoZXJlLiAgVGhpcyBtYWtlcwor
ICAgICAgICB0aGUgY29kZSBiZWhhdmUgbW9yZSBjb25zaXN0ZW50bHkgZm9yIEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcidzCisgICAgICAgIElzb1N1YnNwYWNlIGFzIGZvciBvdGhl
ciBJc29TdWJzcGFjZXMuCisKKyAgICAgICAgQWxzbyByZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVz
dWx0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hlYXBEYXRhOjpzdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OmlkYlNlcmlhbGl6YXRpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZN
Q2xpZW50RGF0YTo6Y2xpZW50U3Vic3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpmaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hl
YXBEYXRhOjpzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJs
ZURlZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1No
YWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFs
bUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERl
ZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFy
Z2V0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlr
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50
cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVn
aW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUYWdnZWRXcmFwcGVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKwogMjAyMi0wMi0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxODguCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjAsMTEgKzI0MjAsMTEgQEAKIAkJN0JCNjgw
QkEyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkI2ODBCODI1QkExQkU0MDAyQjg3Mzgg
LyogR3JhcGhpY3NDaGVja3NNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUgLyogR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkREQTM0
QzI3NUEwMTMxMDAzODY1OUUgLyogUHJvY2Vzc0lkZW50aXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTM0OTI3NUEwMTMwMDAzODY1OUUgLyog
UHJvY2Vzc0lkZW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJN0JFMzdGODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JC
QjZGRjAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTM3RjdBMjdCQjg2QUIwMDdBNkNEMyAvKiBHcmFw
aGljc0NvbnRleHRHTENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JEREEzMUMyNzRGOURBNDAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EubW0gKi87IH07CiAJCTdCRTM3RjdDMjdCQjg2QjgwMDdBNkNEMyAvKiBBTkdMRVV0aWxp
dGllc0NvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNwcCAq
LzsgfTsKIAkJN0JFMzdGN0QyN0JCODZDRDAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQ0Q0MkQ4Mjcw
NTk5RUYwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllcy5jcHAgKi87IH07CiAJCTdCRTM3RjdFMjdC
Qjg2REIwMDdBNkNEMyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUEyNTQ5NzIwMDAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgKi87IH07CisJCTdCRTM3Rjg3MjdC
QkI3MDgwMDdBNkNEMyAvKiBWaWRlb0ZyYW1lQ1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRTM3Rjg2MjdCQkI2RkYwMDdBNkNEMyAvKiBWaWRlb0Zy
YW1lQ1YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkz
NkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QkZGNTlGNDI3
NTc3MjY3MDA3NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkZGNTlFRjI3NTc3MUU4MDA3
NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0
IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3NDQsNiArNTc0NCw4
IEBACiAJCUZERjA5REM5MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjA5REM3MTM5
OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCAqLzsgfTsKIAkJRkRGNkJBRjkx
MzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4
MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkRG
N0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FDMjFEQjAw
QTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9OworCQlGRTBCQ0YzNDI3QzA2
NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovOyB9OworCQlGRTBCQ0YzNTI3QzA2NjEwMDBC
RkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oICovOyB9OwogCQlGRTBEODRFOTEwNDg0
MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzZGRDE1
MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8q
IENoYW5nZVZlcnNpb25EYXRhLmggKi87IH07CiAJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAv
KiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmggKi87IH07CkBAIC0xODI5MSw2ICsxODI5Myw4IEBACiAJCUZE
RjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREY3RTlDMTEzQUMyMURC
MDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVm
ZmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1
ZmZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEJDRjMxMjdD
MDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzM2LDYgKzI5MzQwLDggQEAK
IAkJCQlCQzUzREE0NzExNDMxMzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCAqLywK
IAkJCQlCQzUzREEyRDExNDMxMjFFMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmggKi8sCiAJ
CQkJMkQyOTM4NjkyMzVGNkI2ODAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCAqLywKKwkJ
CQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCAqLywKKwkJCQlGRTBCQ0YzMTI3QzA2NjBGMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCAqLywKIAkJCQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9s
bGVyLmNwcCAqLywKIAkJCQkxNDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVy
LmggKi8sCiAJCQkJQzU4NUE2NjAxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwICovLApAQCAtMzUxODIsNiArMzUxODgsNyBAQAogCQkJCTcxNEM3QzZEMUZEQURBRjYw
MEYyQkVFMSAvKiBKU0FuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MTAyNUVERTFGOTlGMUVDMDA0QTI1MEMgLyogSlNBbmltYXRpb25UaW1lbGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE5NTZGMUMyMzMxQTY3NzAwNTdFOUQyIC8qIEpTQXBwbGVQYXlD
YW5jZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwQkNGMzUyN0MwNjYxMDAwQkZCMkRC
IC8qIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MURGNUE5OTFGN0VDOEMwMDA1OEE0NzcgLyogSlNBcHBsZVBheUNvbnRhY3RGaWVsZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTU5NkI5MzgyNURFRUYwMzAwRUQyQ0ZBIC8qIEpTQXBwbGVQYXlDb3Vw
b25Db2RlQ2hhbmdlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUVBRDU4MzI2NkVGNTNC
MDA0QjlDRjEgLyogSlNBcHBsZVBheUNvdXBvbkNvZGVEZXRhaWxzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM3MTA0LDYgKzM3MTExLDcgQEAKIAkJCQkwNzhFMDk0NDE3RDE2RTFDMDA0MjBBQTEgLyog
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzNTkx
MEIxRTdEREM3MzAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzhFMDkyQTE3RDE0RDFDMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMEJDRjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNjgxQkNFRTM3NzAwMDFFMkJDIC8q
IFJUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZFMUMwMDQy
MEFBMSAvKiBSVENWb2lkUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4
MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzIDog
cHVibGljIERPTUNsaWVudElzb1N1YnNwYWNlcyB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMoKSA9IGRlZmF1bHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMgOiBwdWJsaWMgRE9NSXNvU3Vic3BhY2VzIHsK
K3B1YmxpYzoKKyAgICBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
LmgiCiAKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KQEAgLTUwLDM2ICs1Miwx
MiBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvCiBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFj
ZUZvckltcGwoVk0mIHZtKQogewogICAgIEpTTG9ja0hvbGRlciBhcGlMb2NrZXIodm0pOwotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Ip
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKLSAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSkpOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOwotICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2U7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObzE+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yX29uUHJvbWlzZVNldHRs
ZWRCb2R5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiwgSlNG
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IqIGNhc3RlZFRoaXMpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAko
cmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01HQ091dHB1dENvbnN0cmFp
bnQuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNBdWRpb1dvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5oIgpA
QCAtOTAsNyArOTAsNyBAQCBKU0hlYXBEYXRhOjpKU0hlYXBEYXRhKEhlYXAmIGhlYXApCiAgICAg
LCBtX3J1bnRpbWVPYmplY3RTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3J1bnRpbWVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QpCiAgICAgLCBt
X3dpbmRvd1Byb3h5U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV93aW5kb3dQcm94eUhl
YXBDZWxsVHlwZSwgSlNXaW5kb3dQcm94eSkKICAgICAsIG1faWRiU2VyaWFsaXphdGlvblNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1faGVhcENlbGxUeXBlRm9ySlNJREJTZXJpYWxpemF0
aW9uR2xvYmFsT2JqZWN0LCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3QpCi0gICAgLCBt
X3N1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUlzb1N1YnNwYWNlcz4oKSkKKyAgICAsIG1fc3Vic3Bh
Y2VzKG1ha2VVbmlxdWU8RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM+KCkpCiB7CiB9CiAKQEAgLTEy
Miw3ICsxMjIsNyBAQCBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fcnVudGltZU9iamVjdFNwYWNlKQogICAgICwg
Q0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1fd2luZG93UHJveHlTcGFjZSkKICAgICAsIENMSUVO
VF9JU09fU1VCU1BBQ0VfSU5JVChtX2lkYlNlcmlhbGl6YXRpb25TcGFjZSkKLSAgICAsIG1fY2xp
ZW50U3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPigpKQorICAgICwg
bV9jbGllbnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cz4oKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4
ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzOwotY2xhc3MgRE9NSXNvU3Vic3BhY2VzOworY2xhc3MgRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXM7CitjbGFzcyBFeHRlbmRlZERPTUlzb1N1YnNwYWNlczsKIAogY2xhc3MgSlNI
ZWFwRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNIZWFwRGF0YSk7CkBAIC00NCw3
ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNIZWFwRGF0YSogZW5zdXJlSGVhcERhdGEo
SlNDOjpIZWFwJik7CiAKICAgICBMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9Ci0gICAg
RE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7
IH0KKyAgICBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcyYgc3Vic3BhY2VzKCkgeyByZXR1cm4gKm1f
c3Vic3BhY2VzLmdldCgpOyB9CiAKICAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+JiBvdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2VzOyB9
CiAKQEAgLTU1LDkgKzU1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqc3BhY2UpOwog
ICAgIH0KIAotICAgIEpTQzo6SXNvU3Vic3BhY2UqIGZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvclNwYWNlKCkgeyByZXR1cm4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1f
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNw
YWNlLCBudWxscHRyKTsgfQotCiBwcml2YXRlOgogICAgIExvY2sgbV9sb2NrOwogCkBAIC05Myw5
ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgSlNDOjpJc29TdWJzcGFjZSBtX3J1bnRpbWVPYmplY3RT
cGFjZTsKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fd2luZG93UHJveHlTcGFjZTsKICAgICBKU0M6
Oklzb1N1YnNwYWNlIG1faWRiU2VyaWFsaXphdGlvblNwYWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxKU0M6Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNw
YWNlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPERPTUlzb1N1YnNwYWNlcz4gbV9zdWJzcGFjZXM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNl
czsKICAgICBWZWN0b3I8SlNDOjpJc29TdWJzcGFjZSo+IG1fb3V0cHV0Q29uc3RyYWludFNwYWNl
czsKIH07CiAKQEAgLTE0MSwxMCArMTM3LDggQEAgcHVibGljOgogICAgIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlJiBydW50aW1lT2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX3J1bnRpbWVPYmpl
Y3RTcGFjZTsgfQogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlJiB3aW5kb3dQcm94eVNw
YWNlKCkgeyByZXR1cm4gbV93aW5kb3dQcm94eVNwYWNlOyB9CiAgICAgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIGlkYlNlcmlhbGl6YXRpb25TcGFjZSgpIHsgcmV0dXJuIG1faWRiU2VyaWFs
aXphdGlvblNwYWNlOyB9Ci0gICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIGZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkgeyByZXR1cm4gbV9maWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0RmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPiBzcGFjZSkgeyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvclNwYWNlID0gc3RkOjpleGNoYW5nZShzcGFjZSwgbnVsbHB0cik7IH0KIAotICAgIERPTUNs
aWVudElzb1N1YnNwYWNlcyYgY2xpZW50U3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fY2xpZW50U3Vi
c3BhY2VzLmdldCgpOyB9CisgICAgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMmIGNsaWVu
dFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVudFN1YnNwYWNlcy5nZXQoKTsgfQogCiBwcml2
YXRlOgogICAgIEhhc2hTZXQ8RE9NV3JhcHBlcldvcmxkKj4gbV93b3JsZFNldDsKQEAgLTE2NCw4
ICsxNTgsNTUgQEAgcHJpdmF0ZToKICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX3dp
bmRvd1Byb3h5U3BhY2U7CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UgbV9pZGJTZXJp
YWxpemF0aW9uU3BhY2U7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPERPTUNsaWVudElzb1N1YnNwYWNlcz4gbV9jbGllbnRTdWJzcGFjZXM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2Ns
aWVudFN1YnNwYWNlczsKIH07CiAKKworLy9lbnVtIGNsYXNzIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZSB7IFllcywgTm8gfTsKK2VudW0gVXNlQ3VzdG9tSGVhcENlbGxUeXBlIHsgWWVzMSwgTm8xIH07
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZSB1c2VDdXN0b21I
ZWFwQ2VsbFR5cGUsIHR5cGVuYW1lIEdldENsaWVudCwgdHlwZW5hbWUgU2V0Q2xpZW50LCB0eXBl
bmFtZSBHZXRTZXJ2ZXIsIHR5cGVuYW1lIFNldFNlcnZlcj4KK0FMV0FZU19JTkxJTkUgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSwgR2V0Q2xp
ZW50IGdldENsaWVudCwgU2V0Q2xpZW50IHNldENsaWVudCwgR2V0U2VydmVyIGdldFNlcnZlciwg
U2V0U2VydmVyIHNldFNlcnZlciwgSlNDOjpIZWFwQ2VsbFR5cGUmICgqZ2V0Q3VzdG9tSGVhcENl
bGxUeXBlKShKU0hlYXBEYXRhJikgPSBudWxscHRyKQoreworICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRv
JiBjbGllbnRTdWJzcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOworICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGdldENsaWVudChjbGllbnRTdWJzcGFjZXMpKQorICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7CisKKyAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07CisKKyAg
ICBhdXRvJiBzdWJzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKKyAgICBKU0M6Oklzb1N1
YnNwYWNlKiBzcGFjZSA9IGdldFNlcnZlcihzdWJzcGFjZXMpOworICAgIGlmICghc3BhY2UpIHsK
KyAgICAgICAgSlNDOjpIZWFwJiBoZWFwID0gdm0uaGVhcDsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEpTQzo6SXNvU3Vic3BhY2U+IHVuaXF1ZVN1YnNwYWNlOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHVzZUN1c3RvbUhlYXBDZWxsVHlwZSA9PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllczEg
fHwgc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVD4gfHwgIVQ6
Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIgKHVzZUN1c3RvbUhlYXBD
ZWxsVHlwZSA9PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllczEpCisgICAgICAgICAgICB1bmlx
dWVTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgZ2V0Q3VzdG9tSGVhcENlbGxUeXBlKGhlYXBEYXRhKSwgVCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBUPikKKyAgICAgICAgICAgICAgICB1bmlxdWVTdWJzcGFjZSA9
IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHVuaXF1ZVN1YnNwYWNlID0gbWFrZVVuaXF1ZTxKU0M6Oklzb1N1YnNw
YWNlPiBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIFQpOwor
ICAgICAgICB9CisgICAgICAgIHNwYWNlID0gdW5pcXVlU3Vic3BhY2UuZ2V0KCk7CisgICAgICAg
IHNldFNlcnZlcihzdWJzcGFjZXMsIHVuaXF1ZVN1YnNwYWNlKTsKKworSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dB
Uk5JTkdTX0VORAorICAgIH0KKworICAgIGF1dG8gdW5pcXVlQ2xpZW50U3Vic3BhY2UgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAgIGF1dG8qIGNs
aWVudFNwYWNlID0gdW5pcXVlQ2xpZW50U3Vic3BhY2UuZ2V0KCk7CisgICAgc2V0Q2xpZW50KGNs
aWVudFN1YnNwYWNlcywgdW5pcXVlQ2xpZW50U3Vic3BhY2UpOworICAgIHJldHVybiBjbGllbnRT
cGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI5
MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC00ODcxLDUwICs0ODcxLDMyIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRpb24oJGludGVy
ZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAKLSAgICBBZGRUb0ltcGxJbmNsdWRlcygi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiKTsKLSAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NSXNv
U3Vic3BhY2VzLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0NsaWVudERhdGEu
aCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPEphdmFT
Y3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIkpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpO1xuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1l
fS5nZXQoKSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKIAorICAgIG15ICR1c2VD
dXN0b21IZWFwQ2VsbDsKKyAgICBteSAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyOwogICAgIGlm
IChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NOYW1l
fSk7XG4iKTsKKyAgICAgICAgJHVzZUN1c3RvbUhlYXBDZWxsID0gIlllczEiOworICAgICAgICAk
Y3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyID0gIltdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVh
cENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX07
IH0iOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
ICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsK
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05hbWV9PilcbiIp
OwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKLSAgICB9Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VO
YW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpO1xuIik7Ci0gICAgcHVz
aChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2Rl
XCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihc
InRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIp
OwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpO1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIH1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAg
JHVzZUN1c3RvbUhlYXBDZWxsID0gIk5vMSI7CisgICAgICAgICRjdXN0b21IZWFwQ2VsbFR5cGVH
ZXR0ZXIgPSAibnVsbHB0ciI7CisgICAgfQogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTtcbiIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
ciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPCR7Y2xhc3NOYW1lfSwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjokdXNlQ3VzdG9tSGVhcENlbGw+KHZtLFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTsgfSxcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gV1RGTW92ZShzcGFjZSk7IH0sXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpOyB9LFxuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBXVEZNb3Zl
KHNwYWNlKTsgfSxcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkY3VzdG9t
SGVhcENlbGxUeXBlR2V0dGVyXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICApO1xu
Iik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVkc1Zp
c2l0Q2hpbGRyZW4pIHsKQEAgLTY4MDIsMzYgKzY3ODQsMTIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwotICAgICAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PiB8fCAhJHtpdGVyYXRvck5hbWV9OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1lfSk7
Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwi
dW5yZWFjaGFibGUtY29kZVwiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dpY2Fs
LWNvbXBhcmVcIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwor
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPCR7aXRlcmF0b3JOYW1lfSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObzE+KHZtLAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7IH0s
CisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
JHtpdGVyYXRvck5hbWV9LmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gV1RG
TW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3Bw
CShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zNjYsMzIgKzM2NiwxMyBAQCBKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoanNET01XaW5kb3dfVGVzCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yRE9NV2luZG93LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
ckRPTVdpbmRvdy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTRE9NV2luZG93LCBKU0RPTVdp
bmRvdyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93ID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0RPTVdpbmRvdzo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9N
V2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0RPTVdpbmRvdywgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
RE9NV2luZG93ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JE
T01XaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikg
LT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpT
RE9NV2luZG93OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvdzo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVk
ZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgpAQCAtMTY3LDMyICsxNjcsMTMgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzRGVkaWNhdGVkV29yawogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
ckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2Vy
dmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBl
Rm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3Nl
ZFN0YXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNF
eHBvc2VkU3Rhci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTIzMSwzNiArMjMxLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc0V4
cG9zZWRTdGFyUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRXhwb3NlZFN0YXI6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRT
dGFyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFy
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4gfHwgIUpTRXhwb3NlZFN0YXI6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFN0YXIpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvckV4cG9zZWRTdGFyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0V4
cG9zZWRTdGFyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU0V4cG9zZWRTdGFyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNF
eHBvc2VkU3Rhcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0yNDksMzYgKzI0OSwx
MyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNFeHBvc2VkVG9Xb3JrCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93PiB8
fCAhSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdp
bmRvdy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEds
b2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjYsMzIgKzE2NiwxMyBAQCBKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIoanNQYWludFdvcmtsZXRHCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUsIEpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclBh
aW50V29ya2xldEdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRH
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xl
dEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJl
dHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOyB9
CisgICAgKTsKIH0KIAogdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NiwzMiArMTY2LDEzIEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihqc1NlcnZpY2VXb3JrZXIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUs
IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBD
ZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFs
bUdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93
UmVhbG1HbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNTIsMzIgKzE1MiwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNTaGFkb3dSZWFsbUdsCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxT
Y29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2hhZG93UmVhbG1HbG9iYWxTY29wZSwg
SlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JT
aGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xv
YmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxt
R2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1NoYWRvd1Jl
YWxtR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFk
b3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2Jh
bFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2Vy
dmVyLm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOyB9CisgICAgKTsK
IH0KIAogdm9pZCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0xNTAsMzIgKzE1MCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNTaGFyZWRXb3JrZXJHCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1NoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hl
YXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUsIEpTU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1NoYXJlZFdvcmtlckds
b2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9o
ZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAog
dm9pZCBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJ
KHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkg
QEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtNDMzLDM2ICs0
MzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3RpbwogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0KCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4gfHwgIUpTVGVzdENFUmVhY3Rpb25zOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucz4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rpb25zKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VS
ZWFjdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0
aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENFUmVhY3Rpb25z
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RDRVJlYWN0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENFUmVh
Y3Rpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI1
OSwzNiArMjU5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RDRVJlYWN0aW8K
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllcj4gfHwgIUpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7
CiB9CiAKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJh
Y2VyLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKQEAgLTUwOCwzNiArNTA4LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RDYWxsVHJhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dENhbGxUcmFjZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlcj4gfHwgIUpTVGVz
dENhbGxUcmFjZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFj
ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENhbGxU
cmFjZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENh
bGxUcmFjZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDYWxsVHJhY2VyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RDYWxsVHJhY2VyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q2FsbFRyYWNlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQg
SlNUZXN0Q2FsbFRyYWNlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE3MSwzNiArMTcxLDEzIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RDbGFzc1dpdGgKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+IHx8ICFKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTc4NCwzNiArNzg0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RDb25kaXRpb24KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4gfHwgIUpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RD
b25kaXRpb25hbEluY2x1ZGVzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRp
dGlvbmFsbHlSZWFkV3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmNwcAkocmV2
aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwx
MCArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9t
aXNlUHJveHkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC02MDYs
MzYgKzYwNiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9TRVRURVIoc2V0SlNUZXN0Q29uZGl0CiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlv
bmFsbHlSZWFkV3JpdGU+IHx8ICFKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlPikKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDb25kaXRpb25hbGx5
UmVhZFdyaXRlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RDb25kaXRpb25hbGx5UmVhZFdyaXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGw8SlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5
UmVhZFdyaXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RE9NSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBACiAj
aW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJET01KSVRBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5j
bHVkZSAiRE9NSklUSURMQ29udmVydC5oIgogI2luY2x1ZGUgIkRPTUpJVElETFR5cGUuaCIKICNp
bmNsdWRlICJET01KSVRJRExUeXBlRmlsdGVyLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTEyNDcsMzYg
KzEyNDcsMTMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKGpzVGVzdERPTUpJVFBybwogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RE9NSklUOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RE
T01KSVQ+IHx8ICFKU1Rlc3RET01KSVQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERPTUpJVD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0RE9NSklUKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RET01KSVQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERPTUpJVDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdERPTUpJVCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERP
TUpJVC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERPTUpJVCwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERPTUpJVCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RET01KSVQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RE9NSklUOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T04uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTgwMywzNiArODAzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERl
ZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4g
fHwgIUpTVGVzdERlZmF1bHRUb0pTT046Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT04+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdERlZmF1bHRUb0pTT04pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT04pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3REZWZhdWx0VG9KU09OOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVm
YXVsdFRvSlNPTjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0
ZXJlZEJ5RXhwb3NlZC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjY1LDM2ICsyNjUsMTMgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RE
ZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09ORmls
dGVyZWRCeUV4cG9zZWQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09ORmls
dGVyZWRCeUV4cG9zZWQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmls
dGVyZWRCeUV4cG9zZWQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
ZGlyZWN0SW5oZXJpdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTU3LDM2ICsxNTcsMTMgQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4gfHwgIUpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZT4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Ug
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTI4NywzNiArMjg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJp
dDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQ+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXRGaW5hbC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMyNywzNiArMzI3LDEzIEBAIEpTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5oZXJpdEZpbmFsLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
RmluYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0RmluYWwpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hh
cmVkU3ludGhldGljQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50
aGV0aWNBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0MSwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9TRVRURVIoc2V0SlNUZXN0RGVsZWdhCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdh
dGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+IHx8ICFKU1Rl
c3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlPikKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWxlZ2F0ZVRvU2hh
cmVkU3ludGhldGljQXR0cmlidXRlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlKTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJp
YnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVsZWdhdGVUb1No
YXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpOworICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJp
YnV0ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0
ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlbGVn
YXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0
ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0
aWNBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3REb21haW5TZWN1cml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERv
bWFpblNlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtMzE1LDM2ICszMTUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdERvbWFpblNlYwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RG9tYWlu
U2VjdXJpdHk6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REb21haW5TZWN1cml0eS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REb21haW5TZWN1cml0eT4g
fHwgIUpTVGVzdERvbWFpblNlY3VyaXR5OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3REb21haW5TZWN1cml0eT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0RG9tYWluU2VjdXJpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdERvbWFpblNlY3VyaXR5KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdERvbWFpblNlY3VyaXR5Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RG9tYWluU2Vj
dXJpdHkgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1
cml0eS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERvbWFpblNlY3Vy
aXR5LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJp
dHkuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3Vy
aXR5ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdERvbWFpblNlY3VyaXR5OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcu
Y3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNDU0LDM2
ICs0NTQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEVuYWJsZWRCeQogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNl
dHRpbmcuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJs
ZWRCeVNldHRpbmcuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPiB8fCAhSlNUZXN0
RW5hYmxlZEJ5U2V0dGluZzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVk
QnlTZXR0aW5nID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxl
ZEJ5U2V0dGluZy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEVuYWJs
ZWRCeVNldHRpbmcsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFi
bGVkQnlTZXR0aW5nLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RW5hYmxlZEJ5U2V0dGluZyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkRm9yQ29udGV4dC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTE4MSwzNiArMTgxLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRF
Uihqc1Rlc3RFbmFibGVkRm8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQ+IHx8ICFKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4
dDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4
dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMzE4LDM2ICszMTgsMTMgQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV2ZW50Q29ucwogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yPiB8fCAhSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50
Q29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3IsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1
Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI1NywzNiArMjU3LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RFdmVudFRhcmcKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50VGFyZ2V0OjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RXZlbnRUYXJnZXQ+IHx8ICFKU1Rlc3RFdmVudFRhcmdldDo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0RXZlbnRUYXJnZXQ+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudFRhcmdldCk7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RFdmVudFRhcmdldDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFy
Z2V0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFdmVudFRhcmdldCwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZl
bnRUYXJnZXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldCA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdl
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RXhjZXB0aW9uLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MTgyLDM2ICsxODIsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEV4Y2VwdGlv
bgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXhjZXB0aW9uOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RFeGNlcHRpb24+IHx8ICFKU1Rlc3RFeGNlcHRpb246Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV4Y2VwdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdEV4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEV4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9v
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoanNUZXN0R2VuZXJhdGVBCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9v
dC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdD4gfHwgIUpTVGVzdEdlbmVy
YXRlQWRkT3BhcXVlUm9vdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xOTIsMzYgKzE5MiwxMyBAQCBKU0NfREVG
SU5FX0NVU1RPTV9HRVRURVIoanNUZXN0R2VuZXJhdGVJCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+IHx8ICFKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGw8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAj
aW5jbHVkZSAiSlNUZXN0R2xvYmFsT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNpbmNsdWRlICJE
T01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtMTgyNSwzMiArMTgyNSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0R2xvYmFsT2JqCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RHbG9i
YWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RHbG9iYWxPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTVGVzdEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0R2xvYmFsT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RHbG9iYWxPYmplY3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RHbG9iYWxPYmplY3QsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9i
amVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1
cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xvYmFsT2JqZWN0OyB9CisgICAgKTsK
IH0KIAogdm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTI3MSwzNiArMjcxLDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yNzEs
MzYgKzI3MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW5kZXhlZFNlCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTMwMywzNiArMzAzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
PiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSw5
IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMTEwMSwzNiArMTEwMSwx
MiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpT
dWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICAgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7Ci0gICAgICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNl
SXRlcmF0b3I+IHx8ICFUZXN0SW50ZXJmYWNlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBUZXN0SW50ZXJmYWNlSXRlcmF0b3I+KQotICAgICAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdEludGVyZmFjZUl0
ZXJhdG9yKTsKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0
ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEludGVyZmFj
ZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
ICAgIH0KLQotICAgICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2VJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxUZXN0SW50ZXJmYWNlSXRlcmF0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFj
ZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gV1RG
TW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTIwNCwzNiArMTE4MCwx
MyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SW50ZXJmYWNlCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEludGVyZmFjZT4gfHwgIUpTVGVzdEludGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0SW50ZXJmYWNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50
ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0SW50ZXJmYWNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdElu
dGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTgyLDM2ICsxODIsMTMgQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEludGVyZmFjZQogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZT4gfHwgIUpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHJl
dmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJdGVyYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RJdGVyYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5j
bHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0xOTYsMzYgKzE5NiwxMiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFj
Y2Vzczo6Q29uY3VycmVudGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICAgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
ICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJs
ZUl0ZXJhdG9yLmdldCgpOwotICAgICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+IHx8
ICFUZXN0SXRlcmFibGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IFRlc3RJdGVyYWJsZUl0ZXJhdG9yPikKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgVGVzdEl0ZXJhYmxlSXRlcmF0b3IpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdEl0ZXJhYmxlSXRlcmF0b3IpOwotICAgICAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJdGVyYWJsZUl0ZXJhdG9yOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIH0KLQotICAgICAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3Iu
Z2V0KCk7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdEl0ZXJhYmxlSXRlcmF0
b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJ
dGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOyB9LAorICAg
ICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICAp
OwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCkBAIC0yOTksMzYgKzI3NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0SXRlcmFibGVQCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJ
dGVyYWJsZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RJdGVyYWJsZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPiB8fCAhSlNUZXN0SXRlcmFibGU6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEl0ZXJhYmxlPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SXRlcmFibGUpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0SXRlcmFibGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJs
ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SXRlcmFibGUsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEl0ZXJhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SXRlcmFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SXRlcmFibGU6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5oIgpA
QCAtMjI1LDM2ICsyMjUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEpTQnVp
bHRpbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpT
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIK
QEAgLTIyNywzNiArMjI3LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RMZWdh
Y3lGYWMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVn
YWN5RmFjdG9yeUZ1bmN0aW9uPiB8fCAhSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeUZhY3Rv
cnlGdW5jdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdh
Y3lGYWN0b3J5RnVuY3Rpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5
RmFjdG9yeUZ1bmN0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVn
YWN5Tm9JbnRlcmZhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBA
IC0zMzAsMzYgKzMzMCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TGVnYWN5
Tm9JCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0PiB8fCAhSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmpl
Y3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNl
T2JqZWN0PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9i
amVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJl
dmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCkBAIC0yNDQsMzYgKzI0NCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0
TGVnYWN5T3ZlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOworICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGw8SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucywgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zNjEsMzYgKzM2MSwxMyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TWFwTGlrZVByCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+
IHx8ICFKU1Rlc3RNYXBMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RN
YXBMaWtlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RN
YXBMaWtlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RN
YXBMaWtlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE1hcExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RN
YXBMaWtlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TWFwTGlrZSwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2Uu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE1hcExpa2U6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zNzUsMzYgKzM3
NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TWFwTGlrZVdpCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMg
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTMzOSwzNiArMzM5LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c1Rlc3ROYW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMzksMzYgKzMzOSwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRBbmRJCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzk2
LDM2ICszOTYsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkQW5kSQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgot
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0y
NDEsMzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWREZWxl
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmll
ci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjQxLDM2
ICsyNDEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkRGVsZQogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9u
IDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTI2NSwzNiArMjY1LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsK
IH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0yNTcsMzYgKzI1NywxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoanNUZXN0TmFtZWREZWxlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJ
KHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CkBAIC0yMTUsMzYgKzIxNSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFt
ZWRHZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlckNh
bGxXaXRoOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGg+IHx8ICFKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRl
ckNhbGxXaXRoKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGguZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MjE1LDM2ICsyMTUsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkR2V0
dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMjQxLDM2ICsyNDEsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdE5hbWVkR2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKQEAgLTI5NSwzNiArMjk1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RO
YW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJh
Y3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI5NSwzNiArMjk1LDEzIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24p
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBp
ZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQot
Ci0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5j
bHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKQEAgLTMyNiwzNiArMzI2LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RO
YW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgp
OwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNp
b24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0
cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM3MywzNiAr
MzczLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKIAogSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNp
b24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTQyMywzNiArNDIzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI3MiwzNiArMjcyLDEz
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI5
MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMu
aCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCkBAIC0zNTYsMzYgKzM1NiwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cz4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI5
MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKQEAgLTMzMywzNiArMzMzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVC
dWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
c3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q2FsbGFibGUuaCIKQEAgLTI3NSwzNiArMjc1LDEzIEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihqc1Rlc3ROYW1lc3BhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZXNwYWNlT2JqZWN0PiB8fCAhSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVzcGFjZU9iamVjdCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3ROYW1lc3BhY2VPYmplY3QsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lc3BhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0Lmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9u
IDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpT
VGVzdE5vZGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCkBAIC00MDIsMzYgKzQwMiwxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVu
dGx5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICAg
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICAgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQoKTsKLSAgICAg
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIFRlc3ROb2RlSXRlcmF0b3I+IHx8ICFUZXN0Tm9kZUl0ZXJhdG9yOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdE5vZGVJdGVyYXRvcj4pCi0gICAgICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRlc3ROb2RlSXRlcmF0b3IpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJdGVy
YXRvcik7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3Ig
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0Tm9kZUl0ZXJhdG9yOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgICAgIH0KLQotICAg
ICAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdl
dCgpOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPFRlc3ROb2RlSXRlcmF0b3IsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdl
dCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVy
YXRvciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTUwNSwz
NiArNDgxLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROb2RlUHJvdG8KIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5vZGU6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9kZT4g
fHwgIUpTVGVzdE5vZGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5vZGU+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5vZGUpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3ROb2RlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROb2RlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Tm9kZTo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxNCArMjIs
MTQgQEAKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCkBAIC05MDYyLDM2ICs5MDYy
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RPYmpQcm90b3QKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9iajo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPiB8fCAhSlNUZXN0
T2JqOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPYmo+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE9iaik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T2JqKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0T2JqID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RPYmo6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmogPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RPYmosIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RPYmogPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T2JqLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0T2JqID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTIyOSwzNiArMjI5LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RPcGVyYXRpb24KIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+IHx8
ICFKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbCk7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbCwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RPcGVyYXRpb25Db25kaXRpb25hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjkwMTkz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKQEAgLTMwMCwzNiArMzAwLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3RPdmVybG9hZGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gfHwgIUpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTIzNywzNiArMjM3LDEzIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RPdmVybG9hZGUKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgp
OwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4gfHwgIUpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBsdWdpbkludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI5
MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQ
bHVnaW5JbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0yMzksMzYgKzIzOSwxMyBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UGx1Z2luSW50CiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdFBsdWdpbkludGVyZmFjZT4gfHwgIUpTVGVzdFBsdWdpbkludGVyZmFj
ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RQbHVnaW5JbnRl
cmZhY2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFBs
dWdpbkludGVyZmFjZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdpbklu
dGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UGx1Z2luSW50
ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UGx1Z2luSW50ZXJmYWNlLCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBs
dWdpbkludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiRE9NUHJvbWlzZVByb3h5LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMjk4LDM2ICsyOTgsMTMgQEAgSlNDX0RFRklORV9DVVNU
T01fR0VUVEVSKGpzVGVzdFByb21pc2VSZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ+IHx8ICFKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25s
eU1hcExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCkBAIC0zMDAsMzYgKzMwMCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0UmVhZE9ubHlNCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZWFk
T25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0g
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5TWFw
TGlrZT4gfHwgIUpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0UmVhZE9ubHlNYXBMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0UmVhZE9ubHlNYXBMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBM
aWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFJlYWRPbmx5TWFwTGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RSZWFkT25seU1hcExpa2U6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RSZWFkT25seVNldExpa2UuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5U2V0
TGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTI3OSwzNiArMjc5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RSZWFkT25seVMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5
U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlTZXRMaWtl
PiB8fCAhSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RSZWFkT25seVNldExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seVNldExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RS
ZWFkT25seVNldExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RS
ZWFkT25seVNldExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RS
ZWFkT25seVNldExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RS
ZWFkT25seVNldExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2Ug
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0UmVhZE9ubHlTZXRMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIK
KyAgICApOwogfQogCiB2b2lkIEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNjYsMzYgKzE2NiwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UmVwb3J0RXh0CiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdD4gfHwg
IUpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0
cmFNZW1vcnlDb3N0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlD
b3N0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKQEAgLTM0NCwzNiArMzQ0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RT
ZXJpYWxpemUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9
IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
PiB8fCAhSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNldExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0TGlrZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTMzNywzNiArMzM3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTZXRM
aWtlUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExpa2U6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgp
OwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0U2V0TGlrZT4gfHwgIUpTVGVzdFNldExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXRMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXRM
aWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3RTZXRMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U2V0
TGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExp
a2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5
cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTM0OSwzNiArMzQ5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RTZXRMaWtlV2kKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucz4gfHwgIUpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFNl
dExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTE4
NywzNiArMTg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RTdHJpbmdpZmllcjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXI+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllcik7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJp
bmdpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3RTdHJpbmdpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTE4NywzNiArMTg3LDEzIEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
biA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMjA0LDM2ICsy
MDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbik7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVk
T3BlcmF0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVy
dFN0cmluZ3MuaCIKQEAgLTIwNCwzNiArMjA0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50
ZWRBcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBs
ZW1lbnRlZEFzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRT
dHJpbmdzLmgiCkBAIC0xODcsMzYgKzE4NywxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmcuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZz4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMDMsMzYgKzIwMywx
MyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjIyLDM2ICsyMjIs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRh
Z2dlZFdyYXBwZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RUYWdnZWRXcmFwcGVyLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCkBAIC0xNjUsMzYgKzE2NSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0
VGFnZ2VkV3JhCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RUYWdnZWRXcmFw
cGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
VGFnZ2VkV3JhcHBlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdyYXBwZXI+IHx8ICFKU1Rl
c3RUYWdnZWRXcmFwcGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUYWdn
ZWRXcmFwcGVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RUYWdnZWRXcmFwcGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RUYWdnZWRXcmFwcGVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
VGFnZ2VkV3JhcHBlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0VGFn
Z2VkV3JhcHBlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0VGFnZ2VkV3JhcHBlciwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdy
YXBwZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFRhZ2dlZFdyYXBw
ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFR5cGVkZWZzLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNzc1LDM2ICs3NzUsMTMgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFR5cGVkZWZzUAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0VHlwZWRlZnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcz4gfHwgIUpT
VGVzdFR5cGVkZWZzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUeXBlZGVm
cz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0VHlwZWRl
ZnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFR5cGVk
ZWZzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFR5cGVkZWZzOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0VHlwZWRlZnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RU
eXBlZGVmcy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFR5cGVkZWZz
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBl
ZGVmcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFR5cGVkZWZzOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
V29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3Bl
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMjQ2LDMyICsyNDYsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzV29ya2Vy
R2xvYmFsUwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNXb3JrZXJHbG9iYWxTY29w
ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNj
b3BlLCBKU1dvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JX
b3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNXb3Jr
ZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckds
b2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYg
eyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZTsgfQor
ICAgICk7CiB9CiAKIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xv
YmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNXb3JrbGV0R2xvYmFsU2NvcGUuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0x
NjAsMzIgKzE2MCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNXb3JrbGV0R2xvYmFs
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2Jh
bFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRH
bG9iYWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNjb3Bl
LCBKU1dvcmtsZXRHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29y
a2xldEdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dvcmts
ZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1dvcmtsZXRHbG9iYWxTY29wZSwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29y
a2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2Vs
bFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNj
b3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQo=
</data>
<flag name="commit-queue"
          id="479708"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452621</attachid>
            <date>2022-02-18 21:06:32 -0800</date>
            <delta_ts>2022-02-18 22:40:15 -0800</delta_ts>
            <desc>EWS test 2</desc>
            <filename>bug-236868-test2.patch</filename>
            <type>text/plain</type>
            <size>326938</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlLWxhbmRpbmddIFByb3ZpZGUg
YSBXZWJDb3JlIHN1YnNwYWNlSW1wbEZvciB0ZW1wbGF0ZSB0byBtYWtlIGNvZGUgbW9yZSByZWFk
YWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Njg2OAorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTE3MDA5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhlIHByZS1leGlzdGluZyBjb2RlIGlzIGRp
ZmZpY3VsdCB0byBmb2xsb3csIGVzcGVjaWFsbHkgaW4gQ29kZUdlbmVyYXRvckpTLnBtLgorICAg
ICAgICBUaGlzIGNoYW5nZSBhbHNvIGNvbnNvbGlkYXRlcyB0aGUgZnJhbWV3b3JrIGltcGxlbWVu
dGF0aW9uIG9mIHN1YnNwYWNlRm9ySW1wbCBpbgorICAgICAgICBvbmUgcGxhY2UgcmF0aGVyIHRo
YW4gc2NhdHRlcmVkIGFjcm9zcyAzIGxvY2F0aW9ucy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2ll
ciB0bworICAgICAgICBjaGFuZ2UgdGhpcyBjb2RlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAg
QWxzbyBpbnRyb2R1Y2VkIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2UgYW5kIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzIGNsYXNzZXMKKyAgICAgICAgYW5kIG1vdmVkIHRoZSBGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Igc3Vic3BhY2VzIGluIHRoZXJlLiAgVGhpcyBtYWtlcwor
ICAgICAgICB0aGUgY29kZSBiZWhhdmUgbW9yZSBjb25zaXN0ZW50bHkgZm9yIEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcidzCisgICAgICAgIElzb1N1YnNwYWNlIGFzIGZvciBvdGhl
ciBJc29TdWJzcGFjZXMuCisKKyAgICAgICAgQWxzbyByZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVz
dWx0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hlYXBEYXRhOjpzdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OmlkYlNlcmlhbGl6YXRpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZN
Q2xpZW50RGF0YTo6Y2xpZW50U3Vic3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpmaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hl
YXBEYXRhOjpzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJs
ZURlZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1No
YWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFs
bUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERl
ZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFy
Z2V0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlr
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50
cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVn
aW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUYWdnZWRXcmFwcGVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKwogMjAyMi0wMi0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxODguCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjAsMTEgKzI0MjAsMTEgQEAKIAkJN0JCNjgw
QkEyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkI2ODBCODI1QkExQkU0MDAyQjg3Mzgg
LyogR3JhcGhpY3NDaGVja3NNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUgLyogR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkREQTM0
QzI3NUEwMTMxMDAzODY1OUUgLyogUHJvY2Vzc0lkZW50aXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTM0OTI3NUEwMTMwMDAzODY1OUUgLyog
UHJvY2Vzc0lkZW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJN0JFMzdGODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JC
QjZGRjAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTM3RjdBMjdCQjg2QUIwMDdBNkNEMyAvKiBHcmFw
aGljc0NvbnRleHRHTENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JEREEzMUMyNzRGOURBNDAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EubW0gKi87IH07CiAJCTdCRTM3RjdDMjdCQjg2QjgwMDdBNkNEMyAvKiBBTkdMRVV0aWxp
dGllc0NvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNwcCAq
LzsgfTsKIAkJN0JFMzdGN0QyN0JCODZDRDAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQ0Q0MkQ4Mjcw
NTk5RUYwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllcy5jcHAgKi87IH07CiAJCTdCRTM3RjdFMjdC
Qjg2REIwMDdBNkNEMyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUEyNTQ5NzIwMDAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgKi87IH07CisJCTdCRTM3Rjg3MjdC
QkI3MDgwMDdBNkNEMyAvKiBWaWRlb0ZyYW1lQ1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRTM3Rjg2MjdCQkI2RkYwMDdBNkNEMyAvKiBWaWRlb0Zy
YW1lQ1YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkz
NkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QkZGNTlGNDI3
NTc3MjY3MDA3NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkZGNTlFRjI3NTc3MUU4MDA3
NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0
IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3NDQsNiArNTc0NCw4
IEBACiAJCUZERjA5REM5MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjA5REM3MTM5
OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCAqLzsgfTsKIAkJRkRGNkJBRjkx
MzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4
MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkRG
N0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FDMjFEQjAw
QTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9OworCQlGRTBCQ0YzNDI3QzA2
NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovOyB9OworCQlGRTBCQ0YzNTI3QzA2NjEwMDBC
RkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oICovOyB9OwogCQlGRTBEODRFOTEwNDg0
MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzZGRDE1
MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8q
IENoYW5nZVZlcnNpb25EYXRhLmggKi87IH07CiAJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAv
KiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmggKi87IH07CkBAIC0xODI5MSw2ICsxODI5Myw4IEBACiAJCUZE
RjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREY3RTlDMTEzQUMyMURC
MDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVm
ZmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1
ZmZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEJDRjMxMjdD
MDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzM2LDYgKzI5MzQwLDggQEAK
IAkJCQlCQzUzREE0NzExNDMxMzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCAqLywK
IAkJCQlCQzUzREEyRDExNDMxMjFFMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmggKi8sCiAJ
CQkJMkQyOTM4NjkyMzVGNkI2ODAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCAqLywKKwkJ
CQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCAqLywKKwkJCQlGRTBCQ0YzMTI3QzA2NjBGMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCAqLywKIAkJCQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9s
bGVyLmNwcCAqLywKIAkJCQkxNDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVy
LmggKi8sCiAJCQkJQzU4NUE2NjAxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwICovLApAQCAtMzUxODIsNiArMzUxODgsNyBAQAogCQkJCTcxNEM3QzZEMUZEQURBRjYw
MEYyQkVFMSAvKiBKU0FuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MTAyNUVERTFGOTlGMUVDMDA0QTI1MEMgLyogSlNBbmltYXRpb25UaW1lbGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE5NTZGMUMyMzMxQTY3NzAwNTdFOUQyIC8qIEpTQXBwbGVQYXlD
YW5jZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwQkNGMzUyN0MwNjYxMDAwQkZCMkRC
IC8qIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MURGNUE5OTFGN0VDOEMwMDA1OEE0NzcgLyogSlNBcHBsZVBheUNvbnRhY3RGaWVsZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTU5NkI5MzgyNURFRUYwMzAwRUQyQ0ZBIC8qIEpTQXBwbGVQYXlDb3Vw
b25Db2RlQ2hhbmdlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUVBRDU4MzI2NkVGNTNC
MDA0QjlDRjEgLyogSlNBcHBsZVBheUNvdXBvbkNvZGVEZXRhaWxzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM3MTA0LDYgKzM3MTExLDcgQEAKIAkJCQkwNzhFMDk0NDE3RDE2RTFDMDA0MjBBQTEgLyog
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzNTkx
MEIxRTdEREM3MzAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzhFMDkyQTE3RDE0RDFDMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMEJDRjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNjgxQkNFRTM3NzAwMDFFMkJDIC8q
IFJUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZFMUMwMDQy
MEFBMSAvKiBSVENWb2lkUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4
MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzIDog
cHVibGljIERPTUNsaWVudElzb1N1YnNwYWNlcyB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMoKSA9IGRlZmF1bHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMgOiBwdWJsaWMgRE9NSXNvU3Vic3BhY2VzIHsK
K3B1YmxpYzoKKyAgICBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
LmgiCiAKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KQEAgLTUwLDM2ICs1Miwx
MiBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvCiBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFj
ZUZvckltcGwoVk0mIHZtKQogewogICAgIEpTTG9ja0hvbGRlciBhcGlMb2NrZXIodm0pOwotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Ip
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKLSAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSkpOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOwotICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2U7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
ciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Jfb25Qcm9taXNlU2V0dGxl
ZEJvZHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqLCBKU0Zp
bGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciogY2FzdGVkVGhpcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUdDT3V0cHV0Q29uc3RyYWlu
dC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmgiCkBA
IC05MCw3ICs5MCw3IEBAIEpTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVhcCkKICAgICAs
IG1fcnVudGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fcnVudGltZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkKICAgICAsIG1f
d2luZG93UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRvd1Byb3h5SGVh
cENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5KQogICAgICwgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNlcmlhbGl6YXRp
b25HbG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkKLSAgICAsIG1f
c3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9NSXNvU3Vic3BhY2VzPigpKQorICAgICwgbV9zdWJzcGFj
ZXMobWFrZVVuaXF1ZTxFeHRlbmRlZERPTUlzb1N1YnNwYWNlcz4oKSkKIHsKIH0KIApAQCAtMTIy
LDcgKzEyMiw3IEBAIEpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYgdm0pCiAgICAg
LCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lT2JqZWN0U3BhY2UpCiAgICAgLCBD
TElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV93aW5kb3dQcm94eVNwYWNlKQogICAgICwgQ0xJRU5U
X0lTT19TVUJTUEFDRV9JTklUKG1faWRiU2VyaWFsaXphdGlvblNwYWNlKQotICAgICwgbV9jbGll
bnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkpCisgICAgLCBt
X2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
PigpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDgg
KzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01DbGllbnRJc29TdWJz
cGFjZXM7Ci1jbGFzcyBET01Jc29TdWJzcGFjZXM7CitjbGFzcyBFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlczsKK2NsYXNzIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzOwogCiBjbGFzcyBKU0hl
YXBEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0hlYXBEYXRhKTsKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBlbnN1cmVIZWFwRGF0YShK
U0M6OkhlYXAmKTsKIAogICAgIExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KLSAgICBE
T01Jc29TdWJzcGFjZXMmIHN1YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNlcy5nZXQoKTsg
fQorICAgIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJldHVybiAqbV9z
dWJzcGFjZXMuZ2V0KCk7IH0KIAogICAgIFZlY3RvcjxKU0M6Oklzb1N1YnNwYWNlKj4mIG91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFjZXM7IH0K
IApAQCAtNTUsOSArNTUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmdW5jKCpzcGFjZSk7CiAg
ICAgfQogCi0gICAgSlNDOjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRv
clNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9m
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3Bh
Y2UsIG51bGxwdHIpOyB9Ci0KIHByaXZhdGU6CiAgICAgTG9jayBtX2xvY2s7CiAKQEAgLTkzLDkg
KzkwLDggQEAgcHJpdmF0ZToKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGltZU9iamVjdFNw
YWNlOwogICAgIEpTQzo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwogICAgIEpTQzo6
SXNvU3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEpTQzo6SXNvU3Vic3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3Bh
Y2U7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NSXNvU3Vic3BhY2VzPiBtX3N1YnNwYWNlczsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM+IG1fc3Vic3BhY2Vz
OwogICAgIFZlY3RvcjxKU0M6Oklzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2Vz
OwogfTsKIApAQCAtMTQxLDEwICsxMzcsOCBAQCBwdWJsaWM6CiAgICAgSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVudGltZU9iamVj
dFNwYWNlOyB9CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHdpbmRvd1Byb3h5U3Bh
Y2UoKSB7IHJldHVybiBtX3dpbmRvd1Byb3h5U3BhY2U7IH0KICAgICBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNlKCkgeyByZXR1cm4gbV9pZGJTZXJpYWxp
emF0aW9uU3BhY2U7IH0KLSAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogZmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJl
Y3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQogCi0gICAgRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzJiBjbGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJz
cGFjZXMuZ2V0KCk7IH0KKyAgICBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcyYgY2xpZW50
U3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fY2xpZW50U3Vic3BhY2VzLmdldCgpOyB9CiAKIHByaXZh
dGU6CiAgICAgSGFzaFNldDxET01XcmFwcGVyV29ybGQqPiBtX3dvcmxkU2V0OwpAQCAtMTY0LDgg
KzE1OCw1NCBAQCBwcml2YXRlOgogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1fd2lu
ZG93UHJveHlTcGFjZTsKICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBtX2lkYlNlcmlh
bGl6YXRpb25TcGFjZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1YnNwYWNlczsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xp
ZW50U3Vic3BhY2VzOwogfTsKIAorCitlbnVtIGNsYXNzIFVzZUN1c3RvbUhlYXBDZWxsVHlwZSB7
IFllcywgTm8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
IHVzZUN1c3RvbUhlYXBDZWxsVHlwZSwgdHlwZW5hbWUgR2V0Q2xpZW50LCB0eXBlbmFtZSBTZXRD
bGllbnQsIHR5cGVuYW1lIEdldFNlcnZlciwgdHlwZW5hbWUgU2V0U2VydmVyPgorQUxXQVlTX0lO
TElORSBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtLCBHZXRDbGllbnQgZ2V0Q2xpZW50LCBTZXRDbGllbnQgc2V0Q2xpZW50LCBHZXRTZXJ2ZXIg
Z2V0U2VydmVyLCBTZXRTZXJ2ZXIgc2V0U2VydmVyLCBKU0M6OkhlYXBDZWxsVHlwZSYgKCpnZXRD
dXN0b21IZWFwQ2VsbFR5cGUpKEpTSGVhcERhdGEmKSA9IG51bGxwdHIpCit7CisgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OworICAgIGF1dG8mIGNsaWVudFN1YnNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gZ2V0Q2xpZW50KGNsaWVudFN1YnNwYWNl
cykpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKKworICAgIGF1dG8mIHN1YnNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOworICAg
IEpTQzo6SXNvU3Vic3BhY2UqIHNwYWNlID0gZ2V0U2VydmVyKHN1YnNwYWNlcyk7CisgICAgaWYg
KCFzcGFjZSkgeworICAgICAgICBKU0M6OkhlYXAmIGhlYXAgPSB2bS5oZWFwOworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gdW5pcXVlU3Vic3BhY2U7CisgICAgICAg
IHN0YXRpY19hc3NlcnQodXNlQ3VzdG9tSGVhcENlbGxUeXBlID09IFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6WWVzIHx8IHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IFQ+IHx8ICFUOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3RleHByICh1c2VD
dXN0b21IZWFwQ2VsbFR5cGUgPT0gVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXMpCisgICAgICAg
ICAgICB1bmlxdWVTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgZ2V0Q3VzdG9tSGVhcENlbGxUeXBlKGhlYXBEYXRhKSwgVCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUPikKKyAgICAgICAgICAgICAgICB1bmlxdWVT
dWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHVuaXF1ZVN1YnNwYWNlID0gbWFrZVVuaXF1ZTxKU0M6
Oklzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIFQpOworICAgICAgICB9CisgICAgICAgIHNwYWNlID0gdW5pcXVlU3Vic3BhY2UuZ2V0KCk7
CisgICAgICAgIHNldFNlcnZlcihzdWJzcGFjZXMsIHVuaXF1ZVN1YnNwYWNlKTsKKworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAor
SUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGF1dG8gdW5pcXVlQ2xpZW50U3Vic3Bh
Y2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOworICAg
IGF1dG8qIGNsaWVudFNwYWNlID0gdW5pcXVlQ2xpZW50U3Vic3BhY2UuZ2V0KCk7CisgICAgc2V0
Q2xpZW50KGNsaWVudFN1YnNwYWNlcywgdW5pcXVlQ2xpZW50U3Vic3BhY2UpOworICAgIHJldHVy
biBjbGllbnRTcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00ODcxLDUwICs0ODcxLDM5IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJsZURlZmluaXRp
b24oJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAKLSAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiKTsKLSAgICBBZGRUb0ltcGxJbmNsdWRl
cygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2NsYXNzTmFtZX06
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpO1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRl
cmZhY2VOYW1lfS5nZXQoKSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4iKTsKIAotICAg
IGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0sICR7Y2xhc3NO
YW1lfSk7XG4iKTsKKyAgICBteSAkaXNHbG9iYWwgPSBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJm
YWNlKTsKKyAgICBteSAkdXNlQ3VzdG9tSGVhcENlbGw7CisgICAgbXkgJGNvbW1hOworIyAgICBt
eSAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyOworIyAgICBpZiAoSXNET01HbG9iYWxPYmplY3Qo
JGludGVyZmFjZSkpIHsKKyAgICBpZiAoJGlzR2xvYmFsKSB7CisgICAgICAgICR1c2VDdXN0b21I
ZWFwQ2VsbCA9ICJZZXMiOworICAgICAgICAkY29tbWEgPSAiLCI7CisjICAgICAgICAkY3VzdG9t
SGVhcENlbGxUeXBlR2V0dGVyID0gIltdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxU
eXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX07IH0iOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsICR7Y2xh
c3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05hbWV9PilcbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpO1xuIik7Ci0gICAgcHVzaChAaW1w
bENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1jb2RlXCIpXG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJTihcInRhdXRv
bG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpO1xuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgJHVzZUN1
c3RvbUhlYXBDZWxsID0gIk5vIjsKKyAgICAgICAgJGNvbW1hID0gIiI7CisjICAgICAgICAkY3Vz
dG9tSGVhcENlbGxUeXBlR2V0dGVyID0gIm51bGxwdHIiOworICAgIH0KIAotICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZh
Y2VOYW1lfSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDwke2NsYXNzTmFtZX0sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6JHVzZUN1c3RvbUhlYXBDZWxsPih2bSxcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7IH0sXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IFdURk1v
dmUoc3BhY2UpOyB9LFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1l
fS5nZXQoKTsgfSxcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2ludGVyZmFj
ZU5hbWV9ID0gV1RGTW92ZShzcGFjZSk7IH0kY29tbWFcbiIpOworICAgIGlmICgkaXNHbG9iYWwp
IHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIp
IC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3Ik
e2NsYXNzTmFtZX07IH1cbiIpOworICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAp
O1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCiAgICAgaWYgKCRuZWVk
c1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTY4MDIsMzYgKzY3OTEsMTIgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1
cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOwotICAg
ICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PiB8fCAhJHtpdGVyYXRvck5hbWV9OjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PikKLSAgICAgICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7aXRlcmF0b3JOYW1l
fSk7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KFwidW5yZWFjaGFibGUtY29kZVwiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKFwidGF1dG9sb2dp
Y2FsLWNvbXBhcmVcIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAke2l0ZXJhdG9yTmFtZX06OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAg
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgp
OworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPCR7aXRlcmF0b3JOYW1lfSwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsg
fSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBX
VEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5j
cHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTM2NiwzMiArMzY2LDEzIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd19UZXMKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JET01XaW5kb3cuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yRE9NV2luZG93LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3csIEpTRE9N
V2luZG93KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRE9NV2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JE
T01XaW5kb3cgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTRE9NV2luZG93LCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JET01XaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
ckRPTVdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVy
KSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9y
SlNET01XaW5kb3c7IH0KKyAgICApOwogfQogCiB2b2lkIEpTRE9NV2luZG93OjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNs
dWRlICJKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjcsMzIgKzE2NywxMyBAQCBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNEZWRpY2F0ZWRXb3JrCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUs
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
ZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5
cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFN0YXIuY3BwCShyZXZpc2lvbiAy
OTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBv
c2VkU3Rhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U0V4cG9zZWRTdGFyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgpAQCAtMjMxLDM2ICsyMzEsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
RXhwb3NlZFN0YXJQcgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNFeHBvc2VkU3Rh
cjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3Nl
ZFN0YXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0
YXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRTdGFyPiB8fCAhSlNFeHBvc2VkU3Rhcjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkU3Rhcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rhcik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkU3Rhcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
RXhwb3NlZFN0YXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3Rhci5nZXQoKTsKKyAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPEpTRXhwb3NlZFN0YXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvckV4cG9zZWRTdGFyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U0V4cG9zZWRTdGFyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAJ
KHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTI0OSwzNiArMjQ5
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc0V4cG9zZWRUb1dvcmsKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+
IHx8ICFKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvdzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
ckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTkzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NiwzMiArMTY2LDEzIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1BhaW50V29ya2xldEcKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNj
b3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSwg
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xl
dEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdv
cmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsg
cmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7
IH0KKyAgICApOwogfQogCiB2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTY2LDMyICsxNjYsMTMgQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzU2VydmljZVdvcmtlcgogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGw8SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVz
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVh
cENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1Jl
YWxtR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAy
OTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFk
b3dSZWFsbUdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE1MiwzMiArMTUyLDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NoYWRvd1JlYWxtR2wKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2Jh
bFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3Bl
LCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1H
bG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVh
bG1HbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhZG93
UmVhbG1HbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNo
YWRvd1JlYWxtR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xv
YmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBz
ZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGU7IH0KKyAgICAp
OwogfQogCiB2b2lkIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJl
ZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTE1MCwzMiArMTUwLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1NoYXJlZFdvcmtlckcKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTU2hh
cmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1f
aGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgSlNTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhcmVkV29ya2VyR2xvYmFs
U2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5t
X2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQog
CiB2b2lkIEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMs
OSBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCkBAIC00MzMsMzYg
KzQzMywxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Q0VSZWFjdGlvCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDRVJlYWN0aW9uczo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnM6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPikKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0aW9ucyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnMpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0Q0VSZWFjdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RD
RVJlYWN0aW9ucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVh
Y3Rpb25zLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0Q0VSZWFjdGlv
bnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdENFUmVhY3Rpb25zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q0VS
ZWFjdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJ
KHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsOCBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAi
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MjU5LDM2ICsyNTksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3Rp
bwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyPiB8fCAhSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxU
cmFjZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RDYWxsVHJhY2VyLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgpAQCAtNTA4LDM2ICs1MDgsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGpzVGVzdENhbGxUcmFjZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0Q2FsbFRyYWNlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyPiB8fCAhSlNU
ZXN0Q2FsbFRyYWNlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRy
YWNlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2Fs
bFRyYWNlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
Q2FsbFRyYWNlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENhbGxUcmFjZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdENhbGxUcmFjZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDYWxsVHJhY2VyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNl
ciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9p
ZCBKU1Rlc3RDYWxsVHJhY2VyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTcxLDM2ICsxNzEsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdENsYXNzV2l0aAogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtNzg0LDM2ICs3ODQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdENvbmRpdGlvbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25h
bEluY2x1ZGVzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDEwICsyMiwxMCBAQAogI2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVBy
b21pc2VQcm94eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTYw
NiwzNiArNjA2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRKU1Rlc3RDb25kaXQK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3Jp
dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RD
b25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0
aW9uYWxseVJlYWRXcml0ZT4gfHwgIUpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7
CiB9CiAKIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJ
KHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAK
ICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNp
bmNsdWRlICJET01KSVRJRExDb252ZXJ0LmgiCiAjaW5jbHVkZSAiRE9NSklUSURMVHlwZS5oIgog
I2luY2x1ZGUgIkRPTUpJVElETFR5cGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTI0Nywz
NiArMTI0NywxMyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04oanNUZXN0RE9NSklUUHJvCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RET01KSVQ6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dERPTUpJVD4gfHwgIUpTVGVzdERPTUpJVDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RE9NSklUPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3RET01KSVQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdERPTUpJVCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RE9NSklUID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RE9NSklULmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RE9NSklULCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RE9NSklUID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RET01KSVQ6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT04uaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtODAzLDM2ICs4MDMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
RGVmYXVsdFRvSlNPTjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09O
PiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0RGVmYXVsdFRvSlNPTj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdERlZmF1bHRUb0pTT046OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT04sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RE
ZWZhdWx0VG9KU09OOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZp
bHRlcmVkQnlFeHBvc2VkLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhw
b3NlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNjUsMzYgKzI2NSwxMyBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVm
YXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1
bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVs
dFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05G
aWx0ZXJlZEJ5RXhwb3NlZCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisg
ICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09O
SW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRh
bmNlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNTcsMzYgKzE1NywxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPiB8fCAhSlNUZXN0RGVmYXVs
dFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlPikKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5j
ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05J
bmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMjg3LDM2ICsyODcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5h
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzI3LDM2ICszMjcsMTMgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0Rmlu
YWwuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbD4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZp
bmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwzNiArMjQxLDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRKU1Rlc3REZWxlZ2EKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxl
Z2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZT4gfHwgIUpT
VGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+KQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0
cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWxlZ2F0ZVRv
U2hhcmVkU3ludGhldGljQXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVU
b1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0
cmlidXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVU
b1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVn
YXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVs
ZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlbGVn
YXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRo
ZXRpY0F0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERvbWFpblNlY3VyaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAy
OTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RG9tYWluU2VjdXJpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC0zMTUsMzYgKzMxNSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0RG9tYWluU2VjCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REb21h
aW5TZWN1cml0eTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5
PiB8fCAhSlNUZXN0RG9tYWluU2VjdXJpdHk6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdERvbWFpblNlY3VyaXR5PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3REb21haW5TZWN1cml0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0RG9tYWluU2VjdXJpdHkpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0RG9tYWluU2VjdXJpdHk6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5T
ZWN1cml0eSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNl
Y3VyaXR5LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RG9tYWluU2Vj
dXJpdHksIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1
cml0eS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2Vj
dXJpdHkgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0RG9tYWluU2VjdXJpdHk6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zy5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRCeVNldHRpbmcuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC00NTQs
MzYgKzQ1NCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RW5hYmxlZEJ5CiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5
U2V0dGluZy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5h
YmxlZEJ5U2V0dGluZy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+IHx8ICFKU1Rl
c3RFbmFibGVkQnlTZXR0aW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RF
bmFibGVkQnlTZXR0aW5nPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJs
ZWRCeVNldHRpbmcgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFi
bGVkQnlTZXR0aW5nLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RW5h
YmxlZEJ5U2V0dGluZywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVu
YWJsZWRCeVNldHRpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5n
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RFbmFibGVkQnlTZXR0aW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJs
ZWRGb3JDb250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMTgxLDM2ICsxODEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzVGVzdEVuYWJsZWRGbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dD4gfHwgIUpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4pCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JD
b250ZXh0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRl
eHQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dCA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250
ZXh0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0zMTgsMzYgKzMxOCwxMyBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RXZlbnRDb25zCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+IHx8ICFKU1Rlc3RFdmVudENvbnN0cnVj
dG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZl
bnRDb25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvciwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0
cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAko
cmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdEV2ZW50VGFyZ2V0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjU3LDM2ICsyNTcs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEV2ZW50VGFyZwogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXZlbnRUYXJnZXQ6OnN1YnNwYWNlRm9ySW1wbChK
U0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RFdmVudFRhcmdldD4gfHwgIUpTVGVzdEV2ZW50VGFyZ2V0OjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldD4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50VGFyZ2V0KTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdEV2ZW50VGFyZ2V0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRU
YXJnZXQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdl
dC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEV2ZW50VGFyZ2V0LCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RF
dmVudFRhcmdldC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFy
Z2V0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0RXhjZXB0
aW9uCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFeGNlcHRpb246OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24u
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEV4Y2VwdGlvbj4gfHwgIUpTVGVzdEV4Y2VwdGlvbjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEV4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNUZXN0RXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RXhjZXB0aW9uLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0RXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVS
b290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE4MiwzNiArMTgyLDEzIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUEKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVS
b290LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290PiB8fCAhSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290KTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJv
b3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAkocmV2aXNpb24gMjkwMTkzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE5MiwzNiArMTkyLDEzIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUkKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4gfHwgIUpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAK
ICNpbmNsdWRlICJKU1Rlc3RHbG9iYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUg
IkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC0xODI1LDMyICsxODI1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RHbG9iYWxPYmoKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEds
b2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAg
SGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RHbG9iYWxPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdEdsb2JhbE9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEdsb2JhbE9iamVjdCwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFs
T2JqZWN0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJl
dHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1Rlc3RHbG9iYWxPYmplY3Q7IH0KKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdEdsb2JhbE9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMjcxLDM2ICsyNzEsMTMg
QEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEluZGV4ZWRTZQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewot
ICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTI3
MSwzNiArMjcxLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgpAQCAtMzAzLDM2ICszMDMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGpzVGVzdEluZGV4ZWRTZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1
LDkgQEAKICNpbmNsdWRlICJKU1Rlc3RJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkVsZW1lbnRJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0xMTAxLDM2ICsxMTAx
LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6
OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQo
KSkKLSAgICAgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsKLSAgICAgICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZh
Y2VJdGVyYXRvcj4gfHwgIVRlc3RJbnRlcmZhY2VJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4pCi0gICAgICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNl
SXRlcmF0b3IpOwotICAgICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
SXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUZXN0SW50ZXJm
YWNlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdElu
dGVyZmFjZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPFRlc3RJbnRlcmZhY2VJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJm
YWNlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBX
VEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xMjA0LDM2ICsxMTgw
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RJbnRlcmZhY2UKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0g
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0SW50ZXJmYWNlPiB8fCAhSlNUZXN0SW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SW50ZXJmYWNlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJ
bnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZh
Y2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
SW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW50ZXJmYWNlCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlPiB8fCAhSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAko
cmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdEl0ZXJhYmxlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKQEAgLTE5NiwzNiArMTk2LDEyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNl
QWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICAgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJh
YmxlSXRlcmF0b3IuZ2V0KCk7Ci0gICAgICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SXRlcmFibGVJdGVyYXRvcj4g
fHwgIVRlc3RJdGVyYWJsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+KQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBUZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAg
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdEl0ZXJhYmxlSXRlcmF0b3I6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRv
ci5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxUZXN0SXRlcmFibGVJdGVy
YXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJs
ZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3Ig
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0KCk7IH0sCisg
ICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAg
ICk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKQEAgLTI5OSwzNiArMjc1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RJdGVyYWJsZVAKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0SXRlcmFibGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEl0ZXJhYmxlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SXRlcmFibGU+IHx8ICFKU1Rlc3RJdGVyYWJs
ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SXRlcmFibGU+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEl0ZXJhYmxlKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RJdGVyYWJsZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJh
YmxlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0
KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJdGVyYWJsZSwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SXRlcmFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJdGVyYWJsZTo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgi
CkBAIC0yMjUsMzYgKzIyNSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SlNC
dWlsdGluCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAi
SlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5o
IgpAQCAtMjI3LDM2ICsyMjcsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdExl
Z2FjeUZhYwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TGVnYWN5RmFjdG9y
eUZ1bmN0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RM
ZWdhY3lGYWN0b3J5RnVuY3Rpb24+IHx8ICFKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExl
Z2FjeUZhY3RvcnlGdW5jdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdh
Y3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJKU1Rlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
QEAgLTMzMCwzNiArMzMwLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RMZWdh
Y3lOb0kKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+IHx8ICFKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9i
amVjdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZh
Y2VPYmplY3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCk7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNl
T2JqZWN0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Qg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFj
ZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAko
cmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTI0NCwzNiArMjQ0LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RMZWdhY3lPdmUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4gfHwgIUpTVGVzdExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0
dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RNYXBMaWtlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTM2MSwzNiArMzYxLDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RNYXBMaWtlUHIKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE1hcExpa2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlr
ZT4gfHwgIUpTVGVzdE1hcExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE1hcExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVz
dE1hcExpa2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dE1hcExpa2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlID0gc3Rk
Ojp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TWFwTGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE1hcExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RNYXBMaWtl
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlr
ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZTo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM3NSwzNiAr
Mzc1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RNYXBMaWtlV2kKIAogSlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsy
Miw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMzM5LDM2ICszMzksMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdE5hbWVkQW5kSQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJh
Y3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMzOSwzNiArMzM5LDEzIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZt
LmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0z
OTYsMzYgKzM5NiwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRBbmRJ
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
Ci0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAg
LTI0MSwzNiArMjQxLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZERl
bGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEs
MzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWREZWxlCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBp
ZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdl
dCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNp
b24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMjY1LDM2ICsyNjUs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkRGVsZQogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIg
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKQEAgLTI1NywzNiArMjU3LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dF
VFRFUihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5k
ZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKQEAgLTIxNSwzNiArMjE1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RO
YW1lZEdldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGg6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aD4gfHwgIUpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGgpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdl
dHRlckNhbGxXaXRoOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGguZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEdldHRlckNh
bGxXaXRoLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
bnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
OTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4
IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC0yMTUsMzYgKzIxNSwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRH
ZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0TmFtZWRHZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFK
U1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2
aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgpAQCAtMjk1LDM2ICsyOTUsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRv
JiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0
YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMo
KTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0
cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjk1LDM2ICsyOTUsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNp
bmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtMzI2LDM2ICszMjYsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVz
dE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisg
ICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzczLDM2
ICszNzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtNDIzLDM2ICs0MjMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4pCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcik7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjcyLDM2ICsyNzIs
MTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElu
czo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8
SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAg
ICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24g
MjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKQEAgLTM1NiwzNiArMzU2LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24g
MjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAj
aW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgpAQCAtMzMzLDM2ICszMzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dEluczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElu
cyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lc3BhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDYWxsYWJsZS5oIgpAQCAtMjc1LDM2ICsyNzUsMTMgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVzcGFjZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lc3BhY2VPYmplY3Q+IHx8ICFKU1Rlc3ROYW1lc3BhY2VPYmplY3Q6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVzcGFjZU9iamVjdD4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Qp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVzcGFjZU9iamVjdDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdE5hbWVzcGFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVzcGFjZU9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3Qu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNp
b24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAi
SlNUZXN0Tm9kZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTQwMiwzNiArNDAyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJy
ZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
ICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOwotICAg
ICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgVGVzdE5vZGVJdGVyYXRvcj4gfHwgIVRlc3ROb2RlSXRlcmF0b3I6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0Tm9kZUl0ZXJhdG9yPikKLSAgICAgICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdE5vZGVJdGVyYXRvcik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBUZXN0Tm9kZUl0
ZXJhdG9yKTsKLSAgICAgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRv
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3ROb2RlSXRlcmF0b3I6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0g
ICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3Iu
Z2V0KCk7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8VGVzdE5vZGVJdGVyYXRvciwg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3Iu
Z2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0
ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNTA1
LDM2ICs0ODEsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5vZGVQcm90bwog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFj
ZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROb2Rl
PiB8fCAhSlNUZXN0Tm9kZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9k
ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdE5vZGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5vZGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROb2Rl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE0ICsy
MiwxNCBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAi
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKQEAgLTkwNjIsMzYgKzkw
NjIsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9ialByb3RvdAogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T2JqLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPYmo+IHx8ICFKU1Rl
c3RPYmo6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9iaj4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T2JqKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPYmopOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RPYmogPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE9iajo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iaiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE9iaiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iaiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmou
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RPYmogPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRp
b25Db25kaXRpb25hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNs
dWRlICJKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMjI5LDM2ICsyMjks
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE9wZXJhdGlvbgogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25k
aXRpb25hbC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4g
fHwgIUpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvci5oIgpAQCAtMzAwLDM2ICszMDAsMTMgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzVGVzdE92ZXJsb2FkZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB8fCAhSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRl
ICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgpAQCAtMjM3LDM2ICsyMzcsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE92ZXJsb2FkZQogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiB8fCAhSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNpb24g
MjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTIzOSwzNiArMjM5LDEz
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RQbHVnaW5JbnQKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNl
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlPiB8fCAhSlNUZXN0UGx1Z2luSW50ZXJm
YWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFBsdWdpbklu
dGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
UGx1Z2luSW50ZXJmYWNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2lu
SW50ZXJmYWNlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQbHVnaW5J
bnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2UsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UGx1Z2luSW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNs
dWRlICJET01Qcm9taXNlUHJveHkuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0yOTgsMzYgKzI5OCwxMyBAQCBKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoanNUZXN0UHJvbWlzZVJlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudD4gfHwgIUpTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCk7Ci0gICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRP
bmx5TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTMwMCwzNiArMzAwLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RSZWFkT25seU0KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJl
YWRPbmx5TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlN
YXBMaWtlPiB8fCAhSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5TWFwTGlrZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZWFkT25seU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RSZWFkT25seU1hcExpa2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1Rlc3RSZWFkT25seU1hcExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1h
cExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6YW5hbHl6ZUhl
YXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seVNldExpa2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlT
ZXRMaWtlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgpAQCAtMjc5LDM2ICsyNzksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdFJlYWRPbmx5UwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9u
bHlTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seVNldExp
a2U+IHx8ICFKU1Rlc3RSZWFkT25seVNldExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlTZXRMaWtlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seVNldExpa2UpOwotICAgICAgICBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dFJlYWRPbmx5U2V0TGlrZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlr
ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RSZWFkT25seVNldExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE2NiwzNiArMTY2LDEzIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RSZXBvcnRFeHQKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PiB8
fCAhSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlD
b3N0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlD
b3N0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3QsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9y
PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtMzQ0LDM2ICszNDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVz
dFNlcmlhbGl6ZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U+IHx8ICFKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2V0TGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2UuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtl
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMzM3LDM2ICszMzcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNl
dExpa2VQcgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZTo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2Uu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RTZXRMaWtlPiB8fCAhSlNUZXN0U2V0TGlrZTo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFNldExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNl
dExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdFNldExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTZXRMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RT
ZXRMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgpAQCAtMzQ5LDM2ICszNDksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdFNldExpa2VXaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0
KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2Nr
KCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElz
b1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3Zl
cnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zPiB8fCAhSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0
aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllci5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAt
MTg3LDM2ICsxODcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lm
aQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
ci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllcj4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0U3RyaW5naWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0
cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdFN0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTMg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byog
Y2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24pOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yMDQsMzYg
KzIwNCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVk
T3BlcmF0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlv
bjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCShyZXZpc2lvbiAy
OTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252
ZXJ0U3RyaW5ncy5oIgpAQCAtMjA0LDM2ICsyMDQsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERh
dGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewot
ICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXM+IHx8ICFKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50
ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBcy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjkw
MTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVy
dFN0cmluZ3MuaCIKQEAgLTE4NywzNiArMTg3LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmcuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZt
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIwMywzNiArMjAz
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5n
ZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgot
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMjIsMzYgKzIy
MiwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOwor
ICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9
CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VGFnZ2VkV3JhcHBlci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFRhZ2dlZFdyYXBwZXIuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKQEAgLTE2NSwzNiArMTY1LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rl
c3RUYWdnZWRXcmEKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFRhZ2dlZFdy
YXBwZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RUYWdnZWRXcmFwcGVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0VGFnZ2VkV3JhcHBlcj4gfHwgIUpT
VGVzdFRhZ2dlZFdyYXBwZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRh
Z2dlZFdyYXBwZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdFRhZ2dlZFdyYXBwZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdFRhZ2dlZFdyYXBwZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RUYWdnZWRXcmFwcGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RU
YWdnZWRXcmFwcGVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RUYWdnZWRXcmFwcGVyLCBVc2VDdXN0b21I
ZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2Vk
V3JhcHBlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0VGFnZ2VkV3Jh
cHBlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0VHlwZWRlZnMuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC03NzUsMzYgKzc3NSwxMyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0VHlwZWRlZnNQCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMg
PSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFR5cGVkZWZzPiB8fCAh
SlNUZXN0VHlwZWRlZnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFR5cGVk
ZWZzPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RUeXBl
ZGVmcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0VHlw
ZWRlZnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0VHlwZWRlZnM6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RUeXBlZGVmcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFR5cGVkZWZzLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0VHlwZWRl
ZnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5
cGVkZWZzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0VHlwZWRlZnM6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2Nv
cGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCkBAIC0yNDYsMzIgKzI0NiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNXb3Jr
ZXJHbG9iYWxTCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1dvcmtlckdsb2JhbFNj
b3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3Jr
ZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JX
b3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFs
U2NvcGUsIEpTV29ya2VyR2xvYmFsU2NvcGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
cldvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7
CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1dvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2Vy
R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBl
JiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlOyB9
CisgICAgKTsKIH0KIAogdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRH
bG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1dvcmtsZXRHbG9iYWxTY29wZS5oIgog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAg
LTE2MCwzMiArMTYwLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1dvcmtsZXRHbG9i
YWwKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTV29ya2xldEdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xv
YmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xl
dEdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2Nv
cGUsIEpTV29ya2xldEdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JX
b3JrbGV0R2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29y
a2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTV29ya2xldEdsb2JhbFNjb3BlLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JX
b3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBD
ZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFs
U2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlOjphbmFseXpl
SGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCg==
</data>
<flag name="commit-queue"
          id="479727"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452622</attachid>
            <date>2022-02-18 21:08:33 -0800</date>
            <delta_ts>2022-02-18 22:48:33 -0800</delta_ts>
            <desc>EWS test 3</desc>
            <filename>bug-236868-test3.patch</filename>
            <type>text/plain</type>
            <size>326965</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlLWxhbmRpbmddIFByb3ZpZGUg
YSBXZWJDb3JlIHN1YnNwYWNlSW1wbEZvciB0ZW1wbGF0ZSB0byBtYWtlIGNvZGUgbW9yZSByZWFk
YWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Njg2OAorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTE3MDA5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhlIHByZS1leGlzdGluZyBjb2RlIGlzIGRp
ZmZpY3VsdCB0byBmb2xsb3csIGVzcGVjaWFsbHkgaW4gQ29kZUdlbmVyYXRvckpTLnBtLgorICAg
ICAgICBUaGlzIGNoYW5nZSBhbHNvIGNvbnNvbGlkYXRlcyB0aGUgZnJhbWV3b3JrIGltcGxlbWVu
dGF0aW9uIG9mIHN1YnNwYWNlRm9ySW1wbCBpbgorICAgICAgICBvbmUgcGxhY2UgcmF0aGVyIHRo
YW4gc2NhdHRlcmVkIGFjcm9zcyAzIGxvY2F0aW9ucy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2ll
ciB0bworICAgICAgICBjaGFuZ2UgdGhpcyBjb2RlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAg
QWxzbyBpbnRyb2R1Y2VkIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2UgYW5kIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzIGNsYXNzZXMKKyAgICAgICAgYW5kIG1vdmVkIHRoZSBGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Igc3Vic3BhY2VzIGluIHRoZXJlLiAgVGhpcyBtYWtlcwor
ICAgICAgICB0aGUgY29kZSBiZWhhdmUgbW9yZSBjb25zaXN0ZW50bHkgZm9yIEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcidzCisgICAgICAgIElzb1N1YnNwYWNlIGFzIGZvciBvdGhl
ciBJc29TdWJzcGFjZXMuCisKKyAgICAgICAgQWxzbyByZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVz
dWx0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hlYXBEYXRhOjpzdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OmlkYlNlcmlhbGl6YXRpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZN
Q2xpZW50RGF0YTo6Y2xpZW50U3Vic3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpmaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hl
YXBEYXRhOjpzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJs
ZURlZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1No
YWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFs
bUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERl
ZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFy
Z2V0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlr
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50
cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVn
aW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUYWdnZWRXcmFwcGVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKwogMjAyMi0wMi0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxODguCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjAsMTEgKzI0MjAsMTEgQEAKIAkJN0JCNjgw
QkEyNUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkI2ODBCODI1QkExQkU0MDAyQjg3Mzgg
LyogR3JhcGhpY3NDaGVja3NNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3QkREQTMxRjI3NEZBMDIxMDAzODY1OUUgLyogR3JhcGhpY3NDb250
ZXh0R0xDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0JEREEzMUQyNzRGOURBNTAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkREQTM0
QzI3NUEwMTMxMDAzODY1OUUgLyogUHJvY2Vzc0lkZW50aXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkREQTM0OTI3NUEwMTMwMDAzODY1OUUgLyog
UHJvY2Vzc0lkZW50aXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJN0JFMzdGODcyN0JCQjcwODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JC
QjZGRjAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTM3RjdBMjdCQjg2QUIwMDdBNkNEMyAvKiBHcmFw
aGljc0NvbnRleHRHTENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JEREEzMUMyNzRGOURBNDAwMzg2NTlFIC8qIEdyYXBoaWNzQ29udGV4dEdM
Q29jb2EubW0gKi87IH07CiAJCTdCRTM3RjdDMjdCQjg2QjgwMDdBNkNEMyAvKiBBTkdMRVV0aWxp
dGllc0NvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNwcCAq
LzsgfTsKIAkJN0JFMzdGN0QyN0JCODZDRDAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQ0Q0MkQ4Mjcw
NTk5RUYwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllcy5jcHAgKi87IH07CiAJCTdCRTM3RjdFMjdC
Qjg2REIwMDdBNkNEMyAvKiBHcmFwaGljc0NvbnRleHRHTENWQ29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxMDMzOUEyNTQ5NzIwMDAwQzhD
MUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgKi87IH07CisJCTdCRTM3Rjg3MjdC
QkI3MDgwMDdBNkNEMyAvKiBWaWRlb0ZyYW1lQ1YuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRTM3Rjg2MjdCQkI2RkYwMDdBNkNEMyAvKiBWaWRlb0Zy
YW1lQ1YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkz
NkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3QkZGNTlGNDI3
NTc3MjY3MDA3NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkZGNTlFRjI3NTc3MUU4MDA3
NzNEMzkgLyogRGlzcGxheUNvbmZpZ3VyYXRpb25Nb25pdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0
IC8qIENvbG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU3NDQsNiArNTc0NCw4
IEBACiAJCUZERjA5REM5MTM5OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjA5REM3MTM5
OUI2MjIwMDY4OEU1QiAvKiBKU0JpcXVhZEZpbHRlck5vZGUuaCAqLzsgfTsKIAkJRkRGNkJBRjkx
MzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4
MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkRG
N0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGN0U5QzIxM0FDMjFEQjAw
QTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oICovOyB9OworCQlGRTBCQ0YzNDI3QzA2
NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovOyB9OworCQlGRTBCQ0YzNTI3QzA2NjEwMDBC
RkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAv
KiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oICovOyB9OwogCQlGRTBEODRFOTEwNDg0
MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMEQ4NEU4MTA0ODQzNDgwMDFBMTc5RSAvKiBXZWJFdmVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFMzZGRDE1
MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8q
IENoYW5nZVZlcnNpb25EYXRhLmggKi87IH07CiAJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAv
KiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmggKi87IH07CkBAIC0xODI5MSw2ICsxODI5Myw4IEBACiAJCUZE
RjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREY3RTlDMTEzQUMyMURC
MDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9CdWZmZXJDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZERjdFOUMyMTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVm
ZmVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdWRpb0J1
ZmZlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMEJDRjMxMjdD
MDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMEQ4NEVBMTA0ODQzNkUwMDFBMTc5RSAvKiBXZWJFdmVudC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhbmdlVmVyc2lvbkRh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzM2LDYgKzI5MzQwLDggQEAK
IAkJCQlCQzUzREE0NzExNDMxMzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCAqLywK
IAkJCQlCQzUzREEyRDExNDMxMjFFMDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmggKi8sCiAJ
CQkJMkQyOTM4NjkyMzVGNkI2ODAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCAqLywKKwkJ
CQlGRTBCQ0YzMzI3QzA2NjEwMDBCRkIyREIgLyogRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCAqLywKKwkJCQlGRTBCQ0YzMTI3QzA2NjBGMDBCRkIyREIgLyogRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCAqLywKIAkJCQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9s
bGVyLmNwcCAqLywKIAkJCQkxNDMyRTg0NjBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVy
LmggKi8sCiAJCQkJQzU4NUE2NjAxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwICovLApAQCAtMzUxODIsNiArMzUxODgsNyBAQAogCQkJCTcxNEM3QzZEMUZEQURBRjYw
MEYyQkVFMSAvKiBKU0FuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MTAyNUVERTFGOTlGMUVDMDA0QTI1MEMgLyogSlNBbmltYXRpb25UaW1lbGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE5NTZGMUMyMzMxQTY3NzAwNTdFOUQyIC8qIEpTQXBwbGVQYXlD
YW5jZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUwQkNGMzUyN0MwNjYxMDAwQkZCMkRC
IC8qIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MURGNUE5OTFGN0VDOEMwMDA1OEE0NzcgLyogSlNBcHBsZVBheUNvbnRhY3RGaWVsZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTU5NkI5MzgyNURFRUYwMzAwRUQyQ0ZBIC8qIEpTQXBwbGVQYXlDb3Vw
b25Db2RlQ2hhbmdlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUVBRDU4MzI2NkVGNTNC
MDA0QjlDRjEgLyogSlNBcHBsZVBheUNvdXBvbkNvZGVEZXRhaWxzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM3MTA0LDYgKzM3MTExLDcgQEAKIAkJCQkwNzhFMDk0NDE3RDE2RTFDMDA0MjBBQTEgLyog
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzNTkx
MEIxRTdEREM3MzAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzhFMDkyQTE3RDE0RDFDMDA0MjBBQTEgLyogUlRDU3RhdHNSZXBvcnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFMEJDRjM0MjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNjgxQkNFRTM3NzAwMDFFMkJDIC8q
IFJUQ1RyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQ3MTdEMTZFMUMwMDQy
MEFBMSAvKiBSVENWb2lkUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgyNEFCQTMxQUU4
MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzIDog
cHVibGljIERPTUNsaWVudElzb1N1YnNwYWNlcyB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMoKSA9IGRlZmF1bHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPiBtX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMgOiBwdWJsaWMgRE9NSXNvU3Vic3BhY2VzIHsK
K3B1YmxpYzoKKyAgICBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRs
ZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9y
LmgiCiAKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KQEAgLTUwLDM2ICs1Miwx
MiBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBKU0ZpbGVTeXN0ZW1EaXJlY3RvCiBHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpzdWJzcGFj
ZUZvckltcGwoVk0mIHZtKQogewogICAgIEpTTG9ja0hvbGRlciBhcGlMb2NrZXIodm0pOwotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnREYXRhLmZpbGVTeXN0
ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IGhlYXBEYXRhLmZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4gfHwgIUpTRmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcj4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Ip
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yKTsKLSAgICAgICAgaGVhcERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSkpOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGF1dG8qIGNsaWVudFNwYWNlID0gbmV3IEdDQ2xp
ZW50OjpJc29TdWJzcGFjZSgqc3BhY2UpOwotICAgIGNsaWVudERhdGEuc2V0RmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2Uoc3RkOjp1bmlxdWVfcHRyPEdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oY2xpZW50U3BhY2UpKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2U7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Jfb25Qcm9t
aXNlU2V0dGxlZEJvZHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvciogY2FzdGVkVGhpcykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKIAot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUdDT3V0cHV0
Q29uc3RyYWludC5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0F1ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3JC
YXNlLmgiCkBAIC05MCw3ICs5MCw3IEBAIEpTSGVhcERhdGE6OkpTSGVhcERhdGEoSGVhcCYgaGVh
cCkKICAgICAsIG1fcnVudGltZU9iamVjdFNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1f
cnVudGltZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdCkK
ICAgICAsIG1fd2luZG93UHJveHlTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX3dpbmRv
d1Byb3h5SGVhcENlbGxUeXBlLCBKU1dpbmRvd1Byb3h5KQogICAgICwgbV9pZGJTZXJpYWxpemF0
aW9uU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9oZWFwQ2VsbFR5cGVGb3JKU0lEQlNl
cmlhbGl6YXRpb25HbG9iYWxPYmplY3QsIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdCkK
LSAgICAsIG1fc3Vic3BhY2VzKG1ha2VVbmlxdWU8RE9NSXNvU3Vic3BhY2VzPigpKQorICAgICwg
bV9zdWJzcGFjZXMobWFrZVVuaXF1ZTxFeHRlbmRlZERPTUlzb1N1YnNwYWNlcz4oKSkKIHsKIH0K
IApAQCAtMTIyLDcgKzEyMiw3IEBAIEpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YShWTSYg
dm0pCiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9ydW50aW1lT2JqZWN0U3BhY2Up
CiAgICAgLCBDTElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV93aW5kb3dQcm94eVNwYWNlKQogICAg
ICwgQ0xJRU5UX0lTT19TVUJTUEFDRV9JTklUKG1faWRiU2VyaWFsaXphdGlvblNwYWNlKQotICAg
ICwgbV9jbGllbnRTdWJzcGFjZXMobWFrZVVuaXF1ZTxET01DbGllbnRJc29TdWJzcGFjZXM+KCkp
CisgICAgLCBtX2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVuZGVkRE9NQ2xpZW50SXNv
U3Vic3BhY2VzPigpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01DbGll
bnRJc29TdWJzcGFjZXM7Ci1jbGFzcyBET01Jc29TdWJzcGFjZXM7CitjbGFzcyBFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlczsKK2NsYXNzIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzOwogCiBj
bGFzcyBKU0hlYXBEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0hlYXBEYXRhKTsK
QEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0hlYXBEYXRhKiBlbnN1cmVI
ZWFwRGF0YShKU0M6OkhlYXAmKTsKIAogICAgIExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7
IH0KLSAgICBET01Jc29TdWJzcGFjZXMmIHN1YnNwYWNlcygpIHsgcmV0dXJuICptX3N1YnNwYWNl
cy5nZXQoKTsgfQorICAgIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzJiBzdWJzcGFjZXMoKSB7IHJl
dHVybiAqbV9zdWJzcGFjZXMuZ2V0KCk7IH0KIAogICAgIFZlY3RvcjxKU0M6Oklzb1N1YnNwYWNl
Kj4mIG91dHB1dENvbnN0cmFpbnRTcGFjZXMoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRT
cGFjZXM7IH0KIApAQCAtNTUsOSArNTUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmdW5jKCpz
cGFjZSk7CiAgICAgfQogCi0gICAgSlNDOjpJc29TdWJzcGFjZSogZmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvclNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gc3Bh
Y2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhj
aGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9Ci0KIHByaXZhdGU6CiAgICAgTG9jayBtX2xvY2s7CiAK
QEAgLTkzLDkgKzkwLDggQEAgcHJpdmF0ZToKICAgICBKU0M6Oklzb1N1YnNwYWNlIG1fcnVudGlt
ZU9iamVjdFNwYWNlOwogICAgIEpTQzo6SXNvU3Vic3BhY2UgbV93aW5kb3dQcm94eVNwYWNlOwog
ICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9pZGJTZXJpYWxpemF0aW9uU3BhY2U7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEpTQzo6SXNvU3Vic3BhY2U+IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2U7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NSXNvU3Vic3BhY2VzPiBtX3N1
YnNwYWNlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5kZWRET01Jc29TdWJzcGFjZXM+IG1f
c3Vic3BhY2VzOwogICAgIFZlY3RvcjxKU0M6Oklzb1N1YnNwYWNlKj4gbV9vdXRwdXRDb25zdHJh
aW50U3BhY2VzOwogfTsKIApAQCAtMTQxLDEwICsxMzcsOCBAQCBwdWJsaWM6CiAgICAgSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UmIHJ1bnRpbWVPYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fcnVu
dGltZU9iamVjdFNwYWNlOyB9CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UmIHdpbmRv
d1Byb3h5U3BhY2UoKSB7IHJldHVybiBtX3dpbmRvd1Byb3h5U3BhY2U7IH0KICAgICBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSYgaWRiU2VyaWFsaXphdGlvblNwYWNlKCkgeyByZXR1cm4gbV9p
ZGJTZXJpYWxpemF0aW9uU3BhY2U7IH0KLSAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
ZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSB7IHJldHVybiBtX2ZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRG
aWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+IHNwYWNlKSB7IG1fZmlsZVN5c3RlbURpcmVjdG9yeUhh
bmRsZUl0ZXJhdG9yU3BhY2UgPSBzdGQ6OmV4Y2hhbmdlKHNwYWNlLCBudWxscHRyKTsgfQogCi0g
ICAgRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBjbGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9j
bGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KKyAgICBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cyYgY2xpZW50U3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fY2xpZW50U3Vic3BhY2VzLmdldCgpOyB9
CiAKIHByaXZhdGU6CiAgICAgSGFzaFNldDxET01XcmFwcGVyV29ybGQqPiBtX3dvcmxkU2V0OwpA
QCAtMTY0LDggKzE1OCw1NCBAQCBwcml2YXRlOgogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlIG1fd2luZG93UHJveHlTcGFjZTsKICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSBt
X2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFj
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RE9NQ2xpZW50SXNvU3Vic3BhY2VzPiBtX2NsaWVudFN1
YnNwYWNlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXM+IG1fY2xpZW50U3Vic3BhY2VzOwogfTsKIAorCitlbnVtIGNsYXNzIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZSB7IFllcywgTm8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlIHVzZUN1c3RvbUhlYXBDZWxsVHlwZSwgdHlwZW5hbWUgR2V0Q2xpZW50LCB0eXBl
bmFtZSBTZXRDbGllbnQsIHR5cGVuYW1lIEdldFNlcnZlciwgdHlwZW5hbWUgU2V0U2VydmVyPgor
QUxXQVlTX0lOTElORSBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtLCBHZXRDbGllbnQgZ2V0Q2xpZW50LCBTZXRDbGllbnQgc2V0Q2xpZW50LCBH
ZXRTZXJ2ZXIgZ2V0U2VydmVyLCBTZXRTZXJ2ZXIgc2V0U2VydmVyLCBKU0M6OkhlYXBDZWxsVHlw
ZSYgKCpnZXRDdXN0b21IZWFwQ2VsbFR5cGUpKEpTSGVhcERhdGEmKSA9IG51bGxwdHIpCit7Cisg
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOworICAgIGF1dG8mIGNsaWVudFN1YnNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gZ2V0Q2xpZW50KGNsaWVu
dFN1YnNwYWNlcykpCisgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKKworICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOworICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKKworICAgIGF1dG8mIHN1YnNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOworICAgIEpTQzo6SXNvU3Vic3BhY2UqIHNwYWNlID0gZ2V0U2VydmVyKHN1YnNwYWNlcyk7
CisgICAgaWYgKCFzcGFjZSkgeworICAgICAgICBKU0M6OkhlYXAmIGhlYXAgPSB2bS5oZWFwOwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gdW5pcXVlU3Vic3BhY2U7
CisgICAgICAgIHN0YXRpY19hc3NlcnQodXNlQ3VzdG9tSGVhcENlbGxUeXBlID09IFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzIHx8IHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIFQ+IHx8ICFUOjpuZWVkc0Rlc3RydWN0aW9uKTsKKyAgICAgICAgaWYgY29uc3Rl
eHByICh1c2VDdXN0b21IZWFwQ2VsbFR5cGUgPT0gVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXMp
CisgICAgICAgICAgICB1bmlxdWVTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFj
ZT4gSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZ2V0Q3VzdG9tSGVhcENlbGxUeXBlKGhlYXBEYXRh
KSwgVCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUPikKKyAgICAgICAgICAgICAg
ICB1bmlxdWVTdWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVuaXF1ZVN1YnNwYWNlID0gbWFrZVVu
aXF1ZTxKU0M6Oklzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIFQpOworICAgICAgICB9CisgICAgICAgIHNwYWNlID0gdW5pcXVlU3Vic3Bh
Y2UuZ2V0KCk7CisgICAgICAgIHNldFNlcnZlcihzdWJzcGFjZXMsIHVuaXF1ZVN1YnNwYWNlKTsK
KworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKKyAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIH0KKworICAgIGF1dG8gdW5pcXVlQ2xp
ZW50U3Vic3BhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOworICAgIGF1dG8qIGNsaWVudFNwYWNlID0gdW5pcXVlQ2xpZW50U3Vic3BhY2UuZ2V0KCk7
CisgICAgc2V0Q2xpZW50KGNsaWVudFN1YnNwYWNlcywgdW5pcXVlQ2xpZW50U3Vic3BhY2UpOwor
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00ODcxLDUwICs0ODcxLDM5
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgCiAgICAgR2VuZXJhdGVJdGVyYWJs
ZURlZmluaXRpb24oJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAKLSAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiKTsKLSAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRE9NSXNvU3Vic3BhY2VzLmgiKTsKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIldl
YkNvcmVKU0NsaWVudERhdGEuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlw
dENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4iKTsKICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1Nsb3RWaXNpdG9yTWFjcm9zLmg+Iik7CiAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4iKTsK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiAke2Ns
YXNzTmFtZX06OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSlcbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpO1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xp
ZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0
KCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNwYWNlKSB7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7XG4i
KTsKIAotICAgIGlmIChJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSkgewotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX0s
ICR7Y2xhc3NOYW1lfSk7XG4iKTsKKyAgICBteSAkaXNHbG9iYWwgPSBJc0RPTUdsb2JhbE9iamVj
dCgkaW50ZXJmYWNlKTsKKyAgICBteSAkdXNlQ3VzdG9tSGVhcENlbGw7CisgICAgbXkgJGNvbW1h
OworIyAgICBteSAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyOworIyAgICBpZiAoSXNET01HbG9i
YWxPYmplY3QoJGludGVyZmFjZSkpIHsKKyAgICBpZiAoJGlzR2xvYmFsKSB7CisgICAgICAgICR1
c2VDdXN0b21IZWFwQ2VsbCA9ICJZZXMiOworICAgICAgICAkY29tbWEgPSAiLCI7CisjICAgICAg
ICAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyID0gIltdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6
SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFt
ZX07IH0iOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVjdGlvbik7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFzc05hbWV9Pilc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKLSAgICB9Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZh
Y2VOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpO1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1j
b2RlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19CRUdJ
TihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJhaW50cztc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpO1xuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsKLSAgICBwdXNo
KEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIH1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAg
ICAgJHVzZUN1c3RvbUhlYXBDZWxsID0gIk5vIjsKKyAgICAgICAgJGNvbW1hID0gIiI7CisjICAg
ICAgICAkY3VzdG9tSGVhcENlbGxUeXBlR2V0dGVyID0gIm51bGxwdHIiOworICAgIH0KIAotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
JHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1w
bDwke2NsYXNzTmFtZX0sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6JHVzZUN1c3RvbUhlYXBDZWxs
Pih2bSxcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0u
Z2V0KCk7IH0sXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpbnRl
cmZhY2VOYW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9LFxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTsgfSxcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9ID0gV1RGTW92ZShzcGFjZSk7IH0kY29tbWFcbiIpOwor
ICAgIGlmICgkaXNHbG9iYWwpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIu
bV9oZWFwQ2VsbFR5cGVGb3Ike2NsYXNzTmFtZX07IH1cbiIpOworICAgIH0KKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICApO1xuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIp
OwogCiAgICAgaWYgKCRuZWVkc1Zpc2l0Q2hpbGRyZW4pIHsKQEAgLTY4MDIsMzYgKzY3OTEsMTIg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vi
c3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICAgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRv
ck5hbWV9LmdldCgpOwotICAgICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5hbWV9PiB8fCAhJHtpdGVy
YXRvck5hbWV9OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtpdGVyYXRvck5h
bWV9PikKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgJHtpdGVy
YXRvck5hbWV9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsICR7aXRlcmF0b3JOYW1lfSk7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvciR7
aXRlcmF0b3JOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKFwidW5yZWFjaGFibGUtY29kZVwiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKFwidGF1dG9sb2dpY2FsLWNvbXBhcmVcIikKLSAgICAgICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSAk
e2l0ZXJhdG9yTmFtZX06OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICB2b2lk
ICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtp
dGVyYXRvck5hbWV9ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtp
dGVyYXRvck5hbWV9LmdldCgpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJ
bXBsPCR7aXRlcmF0b3JOYW1lfSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAg
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvciR7aXRlcmF0b3JOYW1lfS5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvciR7aXRlcmF0b3JO
YW1lfSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7IH0sCisg
ICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICApOwog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTM2
NiwzMiArMzY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc0RPTVdpbmRvd19UZXMK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRE9NV2luZG93OjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENl
bGxUeXBlRm9ySlNET01XaW5kb3csIEpTRE9NV2luZG93KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JET01XaW5kb3cgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRE9N
V2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cgPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTRE9NV2luZG93LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9N
V2luZG93LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JET01XaW5kb3cuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1
cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNET01XaW5kb3c7IH0KKyAgICApOwogfQogCiB2
b2lkIEpTRE9NV2luZG93OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjcsMzIg
KzE2NywxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNEZWRpY2F0ZWRXb3JrCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0g
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7
IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFN0YXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU0V4cG9zZWRTdGFyLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjMxLDM2ICsyMzEsMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzRXhwb3NlZFN0YXJQcgogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNFeHBvc2VkU3Rhcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewot
ICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRTdGFyPiB8
fCAhSlNFeHBvc2VkU3Rhcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2Vk
U3Rhcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2Vk
U3Rhcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNFeHBvc2Vk
U3Rhcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRXhwb3NlZFN0YXI6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
ckV4cG9zZWRTdGFyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2Vk
U3Rhci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTRXhwb3NlZFN0YXIsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRTdGFyLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRTdGFyLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBu
dWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU0V4cG9zZWRTdGFyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJ
bnRlcmZhY2UuaCIKQEAgLTI0OSwzNiArMjQ5LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc0V4cG9zZWRUb1dvcmsKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVu
dERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3Bh
Y2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHx8ICFKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dzo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3c+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3cuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTE2NiwzMiArMTY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1BhaW50V29y
a2xldEcKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBh
aW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9y
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSwgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZSk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZl
cikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZv
ckpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpA
QCAtMTY2LDMyICsxNjYsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzU2VydmljZVdv
cmtlcgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVG
b3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgp
OworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9o
ZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAK
IHZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYWRvd1JlYWxt
R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTU2hhZG93UmVhbG1HbG9iYWxT
Y29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTE1MiwzMiArMTUyLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1No
YWRvd1JlYWxtR2wKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTU2hhZG93UmVhbG1H
bG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNw
YWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0g
aGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1f
c3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBl
Rm9ySlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLCBKU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JT
aGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFkb3dSZWFsbUdsb2JhbFNj
b3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpT
Qzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYWRv
d1JlYWxtR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTU2hhZG93UmVhbG1HbG9i
YWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNp
b24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
U2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4
IEBACiAjaW5jbHVkZSAiSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE1MCwzMiArMTUw
LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1NoYXJlZFdvcmtlckcKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2Jh
bFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZSwgSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clNoYXJlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFw
Q2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTU2hhcmVkV29ya2Vy
R2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpTU2hhcmVkV29ya2VyR2xvYmFsU2Nv
cGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJFbGVtZW50SW5saW5lcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCkBAIC00MzMsMzYgKzQzMywxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0Q0VSZWFjdGlvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RDRVJlYWN0aW9uczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zPiB8fCAh
SlNUZXN0Q0VSZWFjdGlvbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENF
UmVhY3Rpb25zPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RDRVJlYWN0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0Q0VSZWFjdGlvbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJl
YWN0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q0VSZWFjdGlv
bnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0Q0VSZWFjdGlvbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVh
Y3Rpb25zID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0Q0VSZWFjdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q0VSZWFjdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjU5LDM2ICsyNTksMTMgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdENFUmVhY3RpbwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPiB8fCAhSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcik7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RD
YWxsVHJhY2VyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJK
U0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNTA4LDM2ICs1
MDgsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENhbGxUcmFjZQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q2FsbFRyYWNlcjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RDYWxsVHJhY2VyPiB8fCAhSlNUZXN0Q2FsbFRyYWNlcjo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2FsbFRyYWNlcik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2FsbFRyYWNlcik7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdENhbGxUcmFjZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENhbGxUcmFjZXIsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q2FsbFRyYWNlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDYWxsVHJhY2VyOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgpAQCAtMTcxLDM2ICsxNzEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dENsYXNzV2l0aAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4g
fHwgIUpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNzg0LDM2ICs3ODQs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdENvbmRpdGlvbgogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPiB8fCAh
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGUuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1ZGUgIkpTVGVz
dENvbmRpdGlvbmFsbHlSZWFkV3JpdGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTYwNiwzNiArNjA2LDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX1NFVFRFUihzZXRKU1Rlc3RDb25kaXQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT4gfHwgIUpTVGVzdENv
bmRpdGlvbmFsbHlSZWFkV3JpdGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dENvbmRpdGlvbmFsbHlSZWFkV3JpdGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFk
V3JpdGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAKICNpbmNsdWRlICJKU1Rlc3RET01KSVQuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRPTUpJVEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJET01KSVRJRExDb252ZXJ0LmgiCiAj
aW5jbHVkZSAiRE9NSklUSURMVHlwZS5oIgogI2luY2x1ZGUgIkRPTUpJVElETFR5cGVGaWx0ZXIu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgpAQCAtMTI0NywzNiArMTI0NywxMyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04oanNUZXN0RE9NSklUUHJvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RET01KSVQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RET01KSVQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERPTUpJVC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERPTUpJVD4gfHwgIUpTVGVzdERPTUpJVDo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPikKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RET01KSVQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERPTUpJVCk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0RE9NSklUOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklUID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0RE9NSklULCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RE9NSklULmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RE9NSklUID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERPTUpJVCA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RE
T01KSVQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZh
dWx0VG9KU09OLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9K
U09OLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgIkpTVGVz
dERlZmF1bHRUb0pTT04uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtODAzLDM2ICs4MDMs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTjo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xp
ZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkg
fTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1
YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTj4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNP
Tik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBzdGQ6
OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT046OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdERlZmF1bHRUb0pTT04sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RGVmYXVsdFRvSlNPTiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBv
c2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmNwcAkocmV2aXNpb24g
MjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9z
ZWQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
LmgiCkBAIC0yNjUsMzYgKzI2NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0
RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJl
ZEJ5RXhwb3NlZC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZD4gfHwgIUpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZDo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9K
U09ORmlsdGVyZWRCeUV4cG9zZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVk
QnlFeHBvc2VkOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlF
eHBvc2VkID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8
SlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZCA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZhdWx0
VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pT
T05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCkBAIC0xNTcsMzYgKzE1NywxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0
RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5k
aXJlY3RJbmhlcml0YW5jZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJl
Y3RJbmhlcml0YW5jZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOworICAg
IHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJp
dGFuY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9K
U09OSW5kaXJlY3RJbmhlcml0YW5jZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNP
TkluZGlyZWN0SW5oZXJpdGFuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0
cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFu
Y2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkocmV2aXNpb24g
MjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjg3LDM2ICsyODcs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRUbwogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09O
SW5oZXJpdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluaGVyaXQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4g
fHwgIUpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IFdU
Rk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MzI3LDM2ICszMjcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdERlZmF1bHRU
bwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlZmF1bHRUb0pTT05Jbmhl
cml0RmluYWw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFs
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTklu
aGVyaXRGaW5hbC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdERlZmF1
bHRUb0pTT05Jbmhlcml0RmluYWwsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0
VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXRGaW5hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0
dHJpYnV0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgog
I2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTI0MSwzNiArMjQxLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX1NFVFRFUihzZXRK
U1Rlc3REZWxlZ2EKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERlbGVnYXRl
VG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRl
LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0
YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAg
ICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRv
U2hhcmVkU3ludGhldGljQXR0cmlidXRlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVsZWdhdGVUb1NoYXJl
ZFN5bnRoZXRpY0F0dHJpYnV0ZT4gfHwgIUpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlbGVnYXRlVG9T
aGFyZWRTeW50aGV0aWNBdHRyaWJ1dGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdERlbGVnYXRlVG9TaGFy
ZWRTeW50aGV0aWNBdHRyaWJ1dGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RE
ZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1
YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAg
IHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50
aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RE
ZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQg
SlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9t
YWluU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zMTUsMzYgKzMxNSwxMyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RG9tYWluU2VjCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REb21haW5TZWN1cml0eTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PiB8fCAhSlNUZXN0RG9tYWluU2VjdXJpdHk6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERvbWFpblNlY3VyaXR5PikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REb21haW5TZWN1cml0eSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RG9tYWluU2Vj
dXJpdHkpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RG9tYWluU2VjdXJpdHk6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOworICAgIHJldHVybiBzdWJz
cGFjZUZvckltcGw8SlNUZXN0RG9tYWluU2VjdXJpdHksIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERvbWFpblNlY3VyaXR5ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5Lmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RG9tYWluU2VjdXJpdHk6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dEVuYWJsZWRCeVNldHRpbmcuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVk
ZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC00NTQsMzYgKzQ1NCwxMyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0RW5hYmxlZEJ5CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEVuYWJsZWRCeVNldHRpbmc+IHx8ICFKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkQnlTZXR0
aW5nKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpOworICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGw8SlNUZXN0RW5hYmxlZEJ5U2V0dGluZywgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJs
ZWRCeVNldHRpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEVu
YWJsZWRCeVNldHRpbmc6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkocmV2
aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTgxLDM2ICsxODEs
MTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEVuYWJsZWRGbwogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnN1YnNwYWNlRm9y
SW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2Vz
ID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3Bh
Y2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4
dC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0g
ICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxlZEZv
ckNvbnRleHQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dD4gfHwgIUpTVGVzdEVu
YWJsZWRGb3JDb250ZXh0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFw
Q2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEZvckNvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5h
YmxlZEZvckNvbnRleHQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RF
bmFibGVkRm9yQ29udGV4dC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RW5hYmxlZEZvckNvbnRleHQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9y
Q29udGV4dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNp
bmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCkBAIC0zMTgsMzYgKzMxOCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0
RXZlbnRDb25zCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3I+IHx8ICFKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEV2ZW50Q29uc3RydWN0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGw8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVu
dENvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisg
ICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEV2ZW50VGFyZ2V0
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMjU3LDM2ICsyNTcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdEV2ZW50VGFyZwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0RXZl
bnRUYXJnZXQ6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RFdmVudFRhcmdldC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRhcmdldD4gfHwgIUpTVGVz
dEV2ZW50VGFyZ2V0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RFdmVudFRh
cmdldD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZl
bnRUYXJnZXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dEV2ZW50VGFyZ2V0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJn
ZXQgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEV2ZW50VGFyZ2V0Ojp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VG
b3JJbXBsPEpTVGVzdEV2ZW50VGFyZ2V0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RXZlbnRUYXJnZXQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdl
dCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dEV2ZW50VGFyZ2V0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkocmV2
aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoanNUZXN0RXhjZXB0aW9uCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV4Y2VwdGlvbj4gfHwg
IUpTVGVzdEV4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXhj
ZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RF
eGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dEV4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RXhjZXB0aW9uOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0RXhjZXB0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhj
ZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbiA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RF
eGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE4
MiwzNiArMTgyLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5lcmF0ZUEK
IAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9v
dDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdl
bmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVB
ZGRPcGFxdWVSb290PiB8fCAhSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290OjpuZWVkc0Rlc3Ry
dWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVl
Um9vdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2Vu
ZXJhdGVBZGRPcGFxdWVSb290ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFk
ZE9wYXF1ZVJvb3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5l
cmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRP
cGFxdWVSb290LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290ID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTE5MiwzNiArMTkyLDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RHZW5l
cmF0ZUkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
YXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBp
ZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZT4gfHwgIUpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
Z2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RHbG9iYWxPYmplY3Qu
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRP
TVByb21pc2VQcm94eS5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0xODI1LDMyICsxODI1LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RHbG9iYWxPYmoKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEdsb2JhbE9iamVjdDo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOwot
ICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRh
Lm1faGVhcENlbGxUeXBlRm9ySlNUZXN0R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdsb2JhbE9iamVjdDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEdsb2JhbE9iamVjdC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpT
VGVzdEdsb2JhbE9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RHbG9iYWxPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0R2xv
YmFsT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIp
IC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JK
U1Rlc3RHbG9iYWxPYmplY3Q7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEdsb2JhbE9iamVj
dDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAko
cmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3Ry
aW5ncy5oIgpAQCAtMjcxLDM2ICsyNzEsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
VGVzdEluZGV4ZWRTZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNw
YWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpT
RE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTI3MSwzNiArMjcxLDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3RJbmRleGVkU2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJu
IHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24sIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4
IEBACiAjaW5jbHVkZSAiSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzAzLDM2ICsz
MDMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEluZGV4ZWRTZQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDkgQEAKICNpbmNsdWRlICJKU1Rlc3RJbnRlcmZh
Y2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkVsZW1lbnRJbmxpbmVzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC0xMTAxLDM2ICsxMTAxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgICAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICAgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvci5nZXQoKTsK
LSAgICAgICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJdGVyYXRvcj4gfHwgIVRlc3RJbnRlcmZhY2VJ
dGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJbnRlcmZhY2VJ
dGVyYXRvcj4pCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRl
c3RJbnRlcmZhY2VJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBUZXN0SW50ZXJmYWNlSXRlcmF0b3IpOwotICAgICAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBUZXN0SW50ZXJmYWNlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOwor
ICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPFRlc3RJbnRlcmZhY2VJdGVyYXRvciwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRv
ci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0SW50ZXJmYWNlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICApOwog
ICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCkBAIC0xMjA0LDM2ICsxMTgwLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RJbnRlcmZhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdElu
dGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlPiB8fCAhSlNUZXN0SW50ZXJm
YWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2U+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RJbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbnRlcmZhY2Us
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50
ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdEludGVyZmFjZTo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUu
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CkBAIC0xODIsMzYgKzE4MiwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW50
ZXJmYWNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPiB8fCAhSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZv
ckltcGw8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVy
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEl0ZXJhYmxlLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2Uu
aCIKQEAgLTE5NiwzNiArMTk2LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIGNvbnN0
ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVy
YWJsZUl0ZXJhdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICAgICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0KCk7Ci0gICAgICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBUZXN0SXRlcmFibGVJdGVyYXRvcj4gfHwgIVRlc3RJdGVyYWJsZUl0ZXJhdG9yOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEl0ZXJhYmxlSXRlcmF0b3I+KQotICAg
ICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0SXRlcmFibGVJdGVy
YXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBU
ZXN0SXRlcmFibGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RJdGVyYWJsZUl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
VGVzdEl0ZXJhYmxlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxUZXN0SXRlcmFibGVJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0
ZXJhYmxlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9
IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTI5OSwzNiArMjc1
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RJdGVyYWJsZVAKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
SXRlcmFibGU+IHx8ICFKU1Rlc3RJdGVyYWJsZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0SXRlcmFibGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdEl0ZXJhYmxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RJdGVyYWJsZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEl0
ZXJhYmxlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0
YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RJdGVyYWJsZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1w
bDxKU1Rlc3RJdGVyYWJsZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dEl0ZXJhYmxlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBXVEZNb3ZlKHNw
YWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZSA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJ
dGVyYWJsZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsy
MSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCkBAIC0yMjUsMzYgKzIyNSwxMyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0SlNCdWlsdGluCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVl
X3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNo
YWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUi
KQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOworICAgIHJldHVy
biBzdWJzcGFjZUZvckltcGw8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7
CiB9CiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1
ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgpAQCAtMjI3LDM2ICsyMjcsMTMgQEAgSlNDX0RF
RklORV9DVVNUT01fR0VUVEVSKGpzVGVzdExlZ2FjeUZhYwogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5
RnVuY3Rpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24+IHx8ICFKU1Rl
c3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24pOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IG1ha2VVbmlx
dWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5nZXQo
KTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
biwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlG
dW5jdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24uZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5Tm9J
bnRlcmZhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDgg
KzI1LDggQEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTMzMCwzNiArMzMwLDEzIEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihqc1Rlc3RMZWdhY3lOb0kKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Qu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50
ZXJmYWNlT2JqZWN0LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+IHx8
ICFKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50
ZXJmYWNlT2JqZWN0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdh
Y3lOb0ludGVyZmFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5
Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9i
amVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJh
Y3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0NCwzNiArMjQ0LDEzIEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RMZWdhY3lPdmUKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4g
fHwgIUpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dElucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVC
dWlsdElucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlLmNwcAkocmV2aXNpb24gMjkwMTkz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExp
a2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTM2MSwzNiArMzYxLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RNYXBMaWtlUHIKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE1hcExp
a2U6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RN
YXBMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBM
aWtlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZT4gfHwgIUpTVGVzdE1hcExpa2U6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2U+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2UpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RNYXBMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3RNYXBMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2Ug
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQg
SlNUZXN0TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKQEAgLTM3NSwzNiArMzc1LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihqc1Rlc3RNYXBMaWtlV2kKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVz
dE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVy
cmlkZGVuT3BlcmF0aW9ucz4gfHwgIUpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlv
bnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJh
dGlvbnMpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RN
YXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7CisgICAg
cmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRo
T3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJp
ZGRlbk9wZXJhdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
YnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzM5LDM2ICszMzksMTMg
QEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkQW5kSQogCiBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vi
c3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKQEAgLTMzOSwzNiArMzM5LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RO
YW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOwotICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHx8ICFKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24g
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zOTYsMzYgKzM5NiwxMyBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oanNUZXN0TmFtZWRBbmRJCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZv
aWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAg
IGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5k
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9
Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOworICAgIHJl
dHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwzNiArMjQxLDEzIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiB8
fCAhSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIK
KyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0MSwxMyBAQCBKU0NfREVGSU5FX0NVU1RP
TV9HRVRURVIoanNUZXN0TmFtZWREZWxlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAg
IEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
biA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmICht
eVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0g
ICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAg
ICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvcklt
cGw8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMu
aCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgpAQCAtMjY1LDM2ICsyNjUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdE5hbWVkRGVsZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4gfHwgIUpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpT
RE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI1NywzNiArMjU3
LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZERlbGUKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHx8ICFKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIxNSwzNiArMjE1LDEzIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEdldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxX
aXRoLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD4gfHwgIUpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgpOwotICAgICAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5h
bHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMTUsMzYgKzIxNSwxMyBAQCBKU0NfREVGSU5F
X0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRHZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiB8fCAh
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDEsMzYgKzI0
MSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRHZXR0CiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFj
dE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjk1LDM2ICsyOTUsMTMgQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVh
cERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBE
YXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cj4gfHwgIUpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFw
cGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0g
ICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwog
fQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIy
LDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgpAQCAtMjk1LDM2ICsyOTUsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNw
YWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB8fCAh
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsK
IH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzI2LDM2ICszMjYsMTMgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBq
c0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRD
b25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKKyAg
ICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgpAQCAtMzczLDM2ICszNzMsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmVlZHNEZXN0
cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcik7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtNDIzLDM2ICs0MjMsMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICBy
ZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxs
cHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMjcyLDM2ICsyNzIsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFi
bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKQEAgLTM1NiwzNiArMzU2
LDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZFNldHQKIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMgPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtMzMzLDM2ICszMzMsMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFw
RGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1
dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFj
ZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
QW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVn
YWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNw
YWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lc3BhY2VPYmplY3QuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDYWxsYWJsZS5oIgpAQCAtMjc1
LDM2ICsyNzUsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVzcGFjZQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZXNwYWNlT2JqZWN0OjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNl
T2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
c3BhY2VPYmplY3QuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lc3BhY2VPYmplY3Q+IHx8ICFKU1Rlc3RO
YW1lc3BhY2VPYmplY3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVz
cGFjZU9iamVjdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNU
ZXN0TmFtZXNwYWNlT2JqZWN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lc3BhY2VPYmplY3QpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lc3BhY2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE5hbWVzcGFjZU9iamVjdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVj
dCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVj
dC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVzcGFjZU9iamVj
dCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVj
dC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VP
YmplY3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTQwMiwzNiAr
NDAyLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBK
U0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgICAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgICAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICAgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0Tm9kZUl0ZXJhdG9yLmdldCgpOwotICAgICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdE5vZGVJdGVyYXRvcj4g
fHwgIVRlc3ROb2RlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBU
ZXN0Tm9kZUl0ZXJhdG9yPikKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgVGVzdE5vZGVJdGVyYXRvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5j
ZWxsSGVhcENlbGxUeXBlLCBUZXN0Tm9kZUl0ZXJhdG9yKTsKLSAgICAgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IFRlc3ROb2RlSXRlcmF0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICAgICAgfQotCi0gICAgICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8VGVzdE5vZGVJdGVyYXRvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
Tm9kZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0
KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KKyAg
ICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNTA1LDM2ICs0ODEsMTMgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGpzVGVzdE5vZGVQcm90bwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0Tm9kZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5vZGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5vZGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROb2RlPiB8fCAhSlNUZXN0Tm9kZTo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Tm9kZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhl
YXBDZWxsVHlwZSwgSlNUZXN0Tm9kZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE5vZGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5vZGU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROb2RlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Tm9kZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5vZGUs
IFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
KSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0Tm9kZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisg
ICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROb2RlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjkwMTkzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDE0ICsyMiwxNCBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
UHJvbWlzZVByb3h5LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRE9NV3Jh
cHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRl
ICJKU0Jsb2IuaCIKQEAgLTkwNjIsMzYgKzkwNjIsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGpzVGVzdE9ialByb3RvdAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
T2JqOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
T2JqLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RPYmo+IHx8ICFKU1Rlc3RPYmo6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE9iaj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0T2JqKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RPYmopOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmogPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE9iajo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE9iaiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE9iaiwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iai5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE9iaiA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmouZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPYmogPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRp
b25hbC5jcHAJKHJldmlzaW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgpAQCAtMjI5LDM2ICsyMjksMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGpzVGVzdE9wZXJhdGlvbgogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWw6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbD4gfHwgIUpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25h
bD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+
KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAo
Km15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWwgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RPcGVyYXRpb25Db25kaXRpb25hbCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVyYXRpb25D
b25kaXRpb25hbC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgpAQCAtMzAwLDM2ICsz
MDAsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE92ZXJsb2FkZQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAg
ICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4pCi0gICAgICAg
ICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFw
LmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAg
ICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCku
YXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lv
biAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFj
ZS5oIgpAQCAtMjM3LDM2ICsyMzcsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dE92ZXJsb2FkZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Uu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlPiB8fCAhSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1
Z2luSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RQbHVnaW5JbnRlcmZhY2Uu
aCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29T
dWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaCIKQEAgLTIzOSwzNiArMjM5LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihq
c1Rlc3RQbHVnaW5JbnQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFBsdWdp
bkludGVyZmFjZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
LSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwot
ICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdFBsdWdpbkludGVyZmFjZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVh
cERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UGx1Z2luSW50ZXJm
YWNlPiB8fCAhSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFBsdWdpbkludGVyZmFjZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UGx1Z2luSW50ZXJmYWNlKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RQbHVnaW5JbnRlcmZhY2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZh
Y2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJmYWNlLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0UGx1Z2luSW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxw
dHIKKyAgICApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHJldmlzaW9uIDI5MDE5MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5j
bHVkZSAiSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0yOTgs
MzYgKzI5OCwxMyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0UHJvbWlzZVJlCiAK
IEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0g
ICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudD4gfHwgIUpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50PikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudCk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJvbWlz
ZVJlamVjdGlvbkV2ZW50LmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCShy
ZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UmVhZE9ubHlNYXBMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlYWRPbmx5TWFwTGlrZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMwMCwzNiArMzAwLDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RSZWFkT25seU0KIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtl
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlPiB8fCAhSlNUZXN0UmVhZE9ubHlNYXBM
aWtlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlYWRPbmx5
TWFwTGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
UmVhZE9ubHlNYXBMaWtlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9u
bHlNYXBMaWtlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RSZWFkT25s
eU1hcExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7Cisg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RSZWFkT25seU1hcExpa2UsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UmVhZE9ubHlNYXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlNYXBMaWtlID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dFJlYWRPbmx5TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RSZWFkT25seVNldExpa2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBA
CiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjc5LDM2ICsyNzksMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFJlYWRPbmx5UwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlTZXRMaWtlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3RSZWFkT25seVNldExpa2U+IHx8ICFKU1Rlc3RSZWFkT25seVNldExpa2U6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVhZE9ubHlTZXRM
aWtlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFk
T25seVNldExpa2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNl
dExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRh
dXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFJlYWRPbmx5U2V0
TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZSA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsKKyAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFJlYWRPbmx5U2V0TGlrZSwgVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFk
T25seVNldExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExpa2UgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0UmVh
ZE9ubHlTZXRMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKQEAgLTE2NiwzNiArMTY2LDEzIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rl
c3RSZXBvcnRFeHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygp
OwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0PiB8fCAhSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3Q+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlw
ZSwgSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50
U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbDxKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1v
cnlDb3N0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAgICApOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzQ0LDM2ICszNDQsMTMgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNlcmlhbGl6ZQogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IHx8ICFKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsK
KyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
ICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNldExpa2Uu
Y3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01B
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzM3LDM2ICszMzcsMTMgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNldExpa2VQcgogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewot
ICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5j
bGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRT
cGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAg
IExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlPiB8fCAhSlNU
ZXN0U2V0TGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2V0TGlrZT4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZSk7
Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2U6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
ZXRMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZS5n
ZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNldExpa2UsIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JUZXN0U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBudWxscHRy
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTZXRMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyOTAx
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzQ5LDM2ICszNDksMTMgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFNldExpa2VXaQogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB8fCAhSlNUZXN0U2V0TGlrZVdp
dGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNv
U3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29k
ZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAg
ICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9LAor
ICAgICAgICBudWxscHRyCisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJy
aWRkZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJK
U1Rlc3RTdHJpbmdpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTMgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0U3RyaW5naWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewot
ICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmll
cj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RTdHJpbmdpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSwgSlNUZXN0U3RyaW5naWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2Vs
bFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0
cmluZ2lmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNp
dE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAg
ICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1J
R05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsKKyAgICByZXR1
cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51
bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHJldmlzaW9u
IDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3Ry
aW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsK
LSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRT
dWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bj4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6
SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1
dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAg
aGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24g
PSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJl
dHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24uY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllck5hbWVk
T3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnZlcnRTdHJpbmdzLmgiCkBAIC0yMDQsMzYgKzIwNCwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGll
bnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9
OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vi
c3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+IHx8ICFK
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPikKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdldCgpOworICAgIHJldHVybiBzdWJzcGFj
ZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
IG51bGxwdHIKKyAgICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXMuY3BwCShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMjA0LDM2ICsyMDQs
MTMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMu
Z2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+IHx8ICFK
U1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVk
QXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBcyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsKKyAgICByZXR1cm4g
c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcywg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0
byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBcyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTE4NywzNiArMTg3LDEz
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Zzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPiB8fCAhSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpuZWVkc0Rlc3RydWN0aW9uKTsK
LSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5n
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmc6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmcgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7CisgICAgcmV0dXJuIHN1
YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmcgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIG51bGxwdHIKKyAg
ICApOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNw
cAkocmV2aXNpb24gMjkwMTkzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKQEAgLTIwMywzNiArMjAzLDEzIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkK
IHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4o
dm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGll
bnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0
ZT4gfHwgIUpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0
cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERh
dGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklO
R1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgor
ICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3Bw
CShyZXZpc2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0yMjIsMzYgKzIyMiwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUpOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOworICAgIHJldHVybiBzdWJzcGFjZUZvckltcGw8SlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RUYWdnZWRXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHAJKHJldmlzaW9uIDI5
MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
YWdnZWRXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTVGVzdFRhZ2dlZFdyYXBwZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE2NSwzNiArMTY1LDEzIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RUYWdnZWRXcmEKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdFRhZ2dlZFdyYXBwZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOwotICAg
IGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0VGFnZ2VkV3JhcHBlcj4gfHwgIUpTVGVzdFRhZ2dlZFdyYXBwZXI6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFRhZ2dlZFdyYXBwZXI+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFRhZ2dlZFdyYXBwZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFRhZ2dlZFdyYXBwZXIpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gc3RkOjp1bmlxdWVf
cHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hh
YmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIp
Ci0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RUYWdnZWRXcmFwcGVyOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0VGFnZ2VkV3JhcHBlciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFRhZ2dlZFdyYXBwZXIuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3RUYWdnZWRXcmFwcGVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
VGFnZ2VkV3JhcHBlci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBwZXIgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRh
Z2dlZFdyYXBwZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7
CiB9CiAKIHZvaWQgSlNUZXN0VGFnZ2VkV3JhcHBlcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZp
c2lvbiAyOTAxOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5j
bHVkZSAiSlNUZXN0VHlwZWRlZnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBA
IC03NzUsMzYgKzc3NSwxMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0VHlwZWRl
ZnNQCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RUeXBlZGVmczo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFR5cGVkZWZzPiB8fCAhSlNUZXN0VHlwZWRlZnM6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdFR5cGVkZWZzPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RUeXBlZGVmcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0VHlwZWRlZnMpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RUeXBlZGVmcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0VHlwZWRlZnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOworICAgIHJldHVybiBz
dWJzcGFjZUZvckltcGw8SlNUZXN0VHlwZWRlZnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RUeXBlZGVmcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZz
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlw
ZWRlZnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgbnVsbHB0cgorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0VHlwZWRlZnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlz
aW9uIDI5MDE5MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1dvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNDYsMzIgKzI0NiwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNXb3JrZXJHbG9iYWxTCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hl
YXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGUsIEpTV29ya2VyR2xvYmFsU2NvcGUpOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbDxK
U1dvcmtlckdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
V29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3Bl
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvcldv
cmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
ZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5
cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1dvcmtlckds
b2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3Jr
bGV0R2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRH
bG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRl
ICJKU1dvcmtsZXRHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2MCwzMiArMTYwLDEzIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1dvcmtsZXRHbG9iYWwKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAgICAgIHJldHVy
biBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0
YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8m
IHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9
IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlmICgh
c3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVhcENl
bGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGUsIEpTV29ya2xldEdsb2JhbFNjb3BlKTsKLSAg
ICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29u
c3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05P
UkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
PEpTV29ya2xldEdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFs
U2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVh
cENlbGxUeXBlRm9ySlNXb3JrbGV0R2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpT
V29ya2xldEdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452626</attachid>
            <date>2022-02-18 22:07:47 -0800</date>
            <delta_ts>2022-02-19 00:32:35 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-236868.patch</filename>
            <type>text/plain</type>
            <size>325956</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAyMi0wMi0xOCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlLWxhbmRpbmddIFByb3ZpZGUg
YSBXZWJDb3JlIHN1YnNwYWNlSW1wbEZvciB0ZW1wbGF0ZSB0byBtYWtlIGNvZGUgbW9yZSByZWFk
YWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Njg2OAorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTE3MDA5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhlIHByZS1leGlzdGluZyBjb2RlIGlzIGRp
ZmZpY3VsdCB0byBmb2xsb3csIGVzcGVjaWFsbHkgaW4gQ29kZUdlbmVyYXRvckpTLnBtLgorICAg
ICAgICBUaGlzIGNoYW5nZSBhbHNvIGNvbnNvbGlkYXRlcyB0aGUgZnJhbWV3b3JrIGltcGxlbWVu
dGF0aW9uIG9mIHN1YnNwYWNlRm9ySW1wbCBpbgorICAgICAgICBvbmUgcGxhY2UgcmF0aGVyIHRo
YW4gc2NhdHRlcmVkIGFjcm9zcyAzIGxvY2F0aW9ucy4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2ll
ciB0bworICAgICAgICBjaGFuZ2UgdGhpcyBjb2RlIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAg
QWxzbyBpbnRyb2R1Y2VkIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2UgYW5kIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzIGNsYXNzZXMKKyAgICAgICAgYW5kIG1vdmVkIHRoZSBGaWxlU3lzdGVt
RGlyZWN0b3J5SGFuZGxlSXRlcmF0b3Igc3Vic3BhY2VzIGluIHRoZXJlLiAgVGhpcyBtYWtlcwor
ICAgICAgICB0aGUgY29kZSBiZWhhdmUgbW9yZSBjb25zaXN0ZW50bHkgZm9yIEZpbGVTeXN0ZW1E
aXJlY3RvcnlIYW5kbGVJdGVyYXRvcidzCisgICAgICAgIElzb1N1YnNwYWNlIGFzIGZvciBvdGhl
ciBJc29TdWJzcGFjZXMuCisKKyAgICAgICAgQWxzbyByZWJhc2VkIGJpbmRpbmdzIHRlc3QgcmVz
dWx0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVy
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJ
dGVyYXRvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGVhcERhdGE6OkpTSGVhcERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpKU0hlYXBEYXRhOjpzdWJzcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OmlkYlNlcmlhbGl6YXRpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZN
Q2xpZW50RGF0YTo6Y2xpZW50U3Vic3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnNwYWNl
Rm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0hlYXBEYXRhOjpmaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hl
YXBEYXRhOjpzZXRGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6ZmlsZVN5c3RlbURpcmVjdG9y
eUhhbmRsZUl0ZXJhdG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6OnNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJdGVyYWJs
ZURlZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFN0YXI6
OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpz
dWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1No
YWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTaGFkb3dSZWFs
bUdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbFRyYWNlcjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
RE9NSklUOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERl
ZmF1bHRUb0pTT046OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERl
ZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5o
ZXJpdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdDo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGlj
QXR0cmlidXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdERlbGVnYXRlVG9TaGFyZWRT
eW50aGV0aWNBdHRyaWJ1dGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERvbWFpblNlY3VyaXR5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpzdWJzcGFj
ZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFy
Z2V0OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9u
OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290OjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnN1YnNwYWNlRm9ySW1wbCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHbG9iYWxPYmplY3Q6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6c3Vi
c3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uX2VudHJpZXNDYWxsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbl9lbnRyaWVzQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEl0ZXJhYmxlOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6
c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlr
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNYXBMaWtlOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNYXBMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1hcExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6c3Vic3BhY2VGb3JJ
bXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpzdWJzcGFjZUZvckltcGwp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVzcGFjZU9iamVjdDo6c3Vic3Bh
Y2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25fZW50
cmllc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvcklt
cGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFBsdWdpbkludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQbHVn
aW5JbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seU1hcExpa2U6OnN1YnNwYWNlRm9ySW1w
bCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0
TGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNw
YWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
cG9ydEV4dHJhTWVtb3J5Q29zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RSZXBvcnRF
eHRyYU1lbW9yeUNvc3Q6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1
YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNldExpa2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2V0TGlrZTo6c3Vic3BhY2VG
b3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBs
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZzo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlOjpzdWJz
cGFjZUZvckltcGwpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
dHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VGFnZ2VkV3JhcHBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUYWdnZWRXcmFwcGVyOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmczo6c3Vic3BhY2VGb3JJbXBsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJ
bXBsKToKKwogMjAyMi0wMi0xOCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBIb29rIHVwIFB1c2hNYW5hZ2VyIHRvIHBlcm1pc3Npb24gc3RhdGUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQyMCwxMSArMjQyMCwxMSBAQAogCQk3QkI2ODBCQTI1
QkExQkU0MDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjY4MEI4MjVCQTFCRTQwMDJCODczOCAvKiBH
cmFwaGljc0NoZWNrc01hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCRERBMzFGMjc0RkEwMjEwMDM4NjU5RSAvKiBHcmFwaGljc0NvbnRleHRH
TENvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkREQTMxRDI3NEY5REE1MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2NvYS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRERBMzRDMjc1
QTAxMzEwMDM4NjU5RSAvKiBQcm9jZXNzSWRlbnRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRERBMzQ5Mjc1QTAxMzAwMDM4NjU5RSAvKiBQcm9j
ZXNzSWRlbnRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3QkUzN0Y4NzI3QkJCNzA4MDA3QTZDRDMgLyogVmlkZW9GcmFtZUNWLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkUzN0Y4NjI3QkJCNkZG
MDA3QTZDRDMgLyogVmlkZW9GcmFtZUNWLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JFMzdGN0EyN0JCODZBQjAwN0E2Q0QzIC8qIEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QkREQTMxQzI3NEY5REE0MDAzODY1OUUgLyogR3JhcGhpY3NDb250ZXh0R0xDb2Nv
YS5tbSAqLzsgfTsKIAkJN0JFMzdGN0MyN0JCODZCODAwN0E2Q0QzIC8qIEFOR0xFVXRpbGl0aWVz
Q29jb2EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0JDRDQyREEyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwICovOyB9
OwogCQk3QkUzN0Y3RDI3QkI4NkNEMDA3QTZDRDMgLyogQU5HTEVVdGlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDRDQyRDgyNzA1OTlF
RjAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzLmNwcCAqLzsgfTsKIAkJN0JFMzdGN0UyN0JCODZE
QjAwN0E2Q0QzIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1ZDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjEwMzM5QTI1NDk3MjAwMDBDOEMxQUMg
LyogR3JhcGhpY3NDb250ZXh0R0xDVkNvY29hLmNwcCAqLzsgfTsKKwkJN0JFMzdGODcyN0JCQjcw
ODAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVDVi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0JFMzdGODYyN0JCQjZGRjAwN0E2Q0QzIC8qIFZpZGVvRnJhbWVD
Vi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdC
RTc0MjczODFGQTkwNkZCQjRGMEYyQyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2Rjgx
OEUyRjk5IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggKi87IH07CiAJCTdCRkY1OUY0Mjc1Nzcy
NjcwMDc3M0QzOSAvKiBEaXNwbGF5Q29uZmlndXJhdGlvbk1vbml0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRkY1OUVGMjc1NzcxRTgwMDc3M0Qz
OSAvKiBEaXNwbGF5Q29uZmlndXJhdGlvbk1vbml0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyog
Q29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTc0NCw2ICs1NzQ0LDggQEAK
IAkJRkRGMDlEQzkxMzk5QjYyMjAwNjg4RTVCIC8qIEpTQmlxdWFkRmlsdGVyTm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGMDlEQzcxMzk5QjYy
MjAwNjg4RTVCIC8qIEpTQmlxdWFkRmlsdGVyTm9kZS5oICovOyB9OwogCQlGREY2QkFGOTEzNEE0
Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERjZCQUY3MTM0QTRDOTgwMDgy
MjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovOyB9OwogCQlGREY3RTlD
NDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREY3RTlDMjEzQUMyMURCMDBBNTFF
QUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggKi87IH07CisJCUZFMEJDRjM0MjdDMDY2MTAw
MEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwQkNGMzEyN0MwNjYwRjAwQkZCMkRCIC8qIEV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggKi87IH07CisJCUZFMEJDRjM1MjdDMDY2MTAwMEJGQjJE
QiAvKiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwQkNGMzMyN0MwNjYxMDAwQkZCMkRCIC8qIEV4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmggKi87IH07CiAJCUZFMEQ4NEU5MTA0ODQzNDgw
MDFBMTc5RSAvKiBXZWJFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUwRDg0RTgxMDQ4NDM0ODAwMUExNzlFIC8qIFdlYkV2ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzNkZEMTUxNkM3
ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEgLyogQ2hh
bmdlVmVyc2lvbkRhdGEuaCAqLzsgfTsKIAkJRkUzNkZEMTcxNkM3ODI2NTAwRjg4N0MxIC8qIFNR
TFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rp
b25TdGF0ZU1hY2hpbmUuaCAqLzsgfTsKQEAgLTE4MjkxLDYgKzE4MjkzLDggQEAKIAkJRkRGNkJB
RjcxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZERjdFOUMxMTNBQzIxREIwMEE1
MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkRGN0U5QzIxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJD
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVy
Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUwQkNGMzEyN0MwNjYw
RjAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTBEODRFODEwNDg0MzQ4MDAxQTE3OUUgLyogV2ViRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUwRDg0RUExMDQ4NDM2RTAwMUExNzlFIC8qIFdlYkV2ZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFuZ2VWZXJzaW9uRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkzMzYsNiArMjkzNDAsOCBAQAogCQkJ
CUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuY3BwICovLAogCQkJ
CUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFwcGVyV29ybGQuaCAqLywKIAkJCQky
RDI5Mzg2OTIzNUY2QjY4MDBDN0YzQjIgLyogRXhjZXB0aW9uRGV0YWlscy5oICovLAorCQkJCUZF
MEJDRjMzMjdDMDY2MTAwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
ICovLAorCQkJCUZFMEJDRjMxMjdDMDY2MEYwMEJGQjJEQiAvKiBFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oICovLAogCQkJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTE0MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCAq
LywKIAkJCQlDNTg1QTY2MDExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5j
cHAgKi8sCkBAIC0zNTE4Miw2ICszNTE4OCw3IEBACiAJCQkJNzE0QzdDNkQxRkRBREFGNjAwRjJC
RUUxIC8qIEpTQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcxMDI1RURFMUY5OUYxRUMwMDRBMjUwQyAvKiBKU0FuaW1hdGlvblRpbWVsaW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMTk1NkYxQzIzMzFBNjc3MDA1N0U5RDIgLyogSlNBcHBsZVBheUNhbmNl
bEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTBCQ0YzNTI3QzA2NjEwMDBCRkIyREIgLyog
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExREY1
QTk5MUY3RUM4QzAwMDU4QTQ3NyAvKiBKU0FwcGxlUGF5Q29udGFjdEZpZWxkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5NTk2QjkzODI1REVFRjAzMDBFRDJDRkEgLyogSlNBcHBsZVBheUNvdXBvbkNv
ZGVDaGFuZ2VkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1RUFENTgzMjY2RUY1M0IwMDRC
OUNGMSAvKiBKU0FwcGxlUGF5Q291cG9uQ29kZURldGFpbHMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzcxMDQsNiArMzcxMTEsNyBAQAogCQkJCTA3OEUwOTQ0MTdEMTZFMUMwMDQyMEFBMSAvKiBSVENT
ZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTM1OTEwQjFF
N0REQzczMDBGMzA2MzAgLyogUlRDU2lnbmFsaW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA3OEUwOTJBMTdEMTREMUMwMDQyMEFBMSAvKiBSVENTdGF0c1JlcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkUwQkNGMzQyN0MwNjYxMDAwQkZCMkRCIC8qIEV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM2ODFCQ0VFMzc3MDAwMUUyQkMgLyogUlRD
VHJhY2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDcxN0QxNkUxQzAwNDIwQUEx
IC8qIFJUQ1ZvaWRSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1ODI0QUJBMzFBRTgxMTE2
MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4
dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMgOiBwdWJs
aWMgRE9NQ2xpZW50SXNvU3Vic3BhY2VzIHsKK3B1YmxpYzoKKyAgICBFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcygpID0gZGVmYXVsdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2U+IG1fY2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0b3J5
SGFuZGxlSXRlcmF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9FeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0V4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBFeHRlbmRlZERPTUlzb1N1YnNwYWNlcyA6IHB1YmxpYyBET01Jc29TdWJzcGFjZXMgeworcHVi
bGljOgorICAgIEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzKCkgPSBkZWZhdWx0OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBtX3N1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVj
dG9yeUhhbmRsZUl0ZXJhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3IuaCIK
IAorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgpAQCAtNTAsMzYgKzUyLDEyIEBA
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIEpTRmlsZVN5c3RlbURpcmVjdG8KIEdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3I6OnN1YnNwYWNlRm9y
SW1wbChWTSYgdm0pCiB7CiAgICAgSlNMb2NrSG9sZGVyIGFwaUxvY2tlcih2bSk7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudERhdGEuZmlsZVN5c3RlbURp
cmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNl
OwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gaGVhcERhdGEuZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yPiB8fCAhSlNGaWxlU3lzdGVtRGly
ZWN0b3J5SGFuZGxlSXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRmls
ZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3IpOwotICAgICAgICBoZWFwRGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KSk7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15
VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9
IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgYXV0byogY2xpZW50U3BhY2UgPSBuZXcgR0NDbGllbnQ6
Oklzb1N1YnNwYWNlKCpzcGFjZSk7Ci0gICAgY2xpZW50RGF0YS5zZXRGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3JTcGFjZShzdGQ6OnVuaXF1ZV9wdHI8R0NDbGllbnQ6Oklzb1N1YnNw
YWNlPihjbGllbnRTcGFjZSkpOwotICAgIHJldHVybiBjbGllbnRTcGFjZTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJh
dG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JGaWxlU3lzdGVtRGlyZWN0
b3J5SGFuZGxlSXRlcmF0b3IuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3Rv
cnlIYW5kbGVJdGVyYXRvciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvckZpbGVTeXN0ZW1EaXJlY3RvcnlI
YW5kbGVJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYm
IHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvcl9vblByb21pc2VT
ZXR0bGVkQm9keShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSos
IEpTRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yKiBjYXN0ZWRUaGlzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NR0NPdXRwdXRDb25z
dHJhaW50LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNw
YWNlcy5oIgogI2luY2x1ZGUgIkpTQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2Uu
aCIKQEAgLTkwLDcgKzkwLDcgQEAgSlNIZWFwRGF0YTo6SlNIZWFwRGF0YShIZWFwJiBoZWFwKQog
ICAgICwgbV9ydW50aW1lT2JqZWN0U3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgbV9ydW50
aW1lT2JqZWN0SGVhcENlbGxUeXBlLCBKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0KQogICAg
ICwgbV93aW5kb3dQcm94eVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIG1fd2luZG93UHJv
eHlIZWFwQ2VsbFR5cGUsIEpTV2luZG93UHJveHkpCiAgICAgLCBtX2lkYlNlcmlhbGl6YXRpb25T
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBtX2hlYXBDZWxsVHlwZUZvckpTSURCU2VyaWFs
aXphdGlvbkdsb2JhbE9iamVjdCwgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0KQotICAg
ICwgbV9zdWJzcGFjZXMobWFrZVVuaXF1ZTxET01Jc29TdWJzcGFjZXM+KCkpCisgICAgLCBtX3N1
YnNwYWNlcyhtYWtlVW5pcXVlPEV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzPigpKQogewogfQogCkBA
IC0xMjIsNyArMTIyLDcgQEAgSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkK
ICAgICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3J1bnRpbWVPYmplY3RTcGFjZSkKICAg
ICAsIENMSUVOVF9JU09fU1VCU1BBQ0VfSU5JVChtX3dpbmRvd1Byb3h5U3BhY2UpCiAgICAgLCBD
TElFTlRfSVNPX1NVQlNQQUNFX0lOSVQobV9pZGJTZXJpYWxpemF0aW9uU3BhY2UpCi0gICAgLCBt
X2NsaWVudFN1YnNwYWNlcyhtYWtlVW5pcXVlPERPTUNsaWVudElzb1N1YnNwYWNlcz4oKSkKKyAg
ICAsIG1fY2xpZW50U3Vic3BhY2VzKG1ha2VVbmlxdWU8RXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXM+KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKU0NsaWVudERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTUNsaWVudElz
b1N1YnNwYWNlczsKLWNsYXNzIERPTUlzb1N1YnNwYWNlczsKK2NsYXNzIEV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzOworY2xhc3MgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXM7CiAKIGNsYXNz
IEpTSGVhcERhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTSGVhcERhdGEpOwpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTSGVhcERhdGEqIGVuc3VyZUhlYXBE
YXRhKEpTQzo6SGVhcCYpOwogCiAgICAgTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQot
ICAgIERPTUlzb1N1YnNwYWNlcyYgc3Vic3BhY2VzKCkgeyByZXR1cm4gKm1fc3Vic3BhY2VzLmdl
dCgpOyB9CisgICAgRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMmIHN1YnNwYWNlcygpIHsgcmV0dXJu
ICptX3N1YnNwYWNlcy5nZXQoKTsgfQogCiAgICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiYg
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpIHsgcmV0dXJuIG1fb3V0cHV0Q29uc3RyYWludFNwYWNl
czsgfQogCkBAIC01NSw5ICs1NSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKnNwYWNl
KTsKICAgICB9CiAKLSAgICBKU0M6Oklzb1N1YnNwYWNlKiBmaWxlU3lzdGVtRGlyZWN0b3J5SGFu
ZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZUl0
ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5k
bGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiBzcGFjZSkg
eyBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlID0gc3RkOjpleGNoYW5n
ZShzcGFjZSwgbnVsbHB0cik7IH0KLQogcHJpdmF0ZToKICAgICBMb2NrIG1fbG9jazsKIApAQCAt
OTMsOSArOTAsOCBAQCBwcml2YXRlOgogICAgIEpTQzo6SXNvU3Vic3BhY2UgbV9ydW50aW1lT2Jq
ZWN0U3BhY2U7CiAgICAgSlNDOjpJc29TdWJzcGFjZSBtX3dpbmRvd1Byb3h5U3BhY2U7CiAgICAg
SlNDOjpJc29TdWJzcGFjZSBtX2lkYlNlcmlhbGl6YXRpb25TcGFjZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SlNDOjpJc29TdWJzcGFjZT4gbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0
b3JTcGFjZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxET01Jc29TdWJzcGFjZXM+IG1fc3Vic3Bh
Y2VzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbmRlZERPTUlzb1N1YnNwYWNlcz4gbV9zdWJz
cGFjZXM7CiAgICAgVmVjdG9yPEpTQzo6SXNvU3Vic3BhY2UqPiBtX291dHB1dENvbnN0cmFpbnRT
cGFjZXM7CiB9OwogCkBAIC0xNDEsMTAgKzEzNyw4IEBAIHB1YmxpYzoKICAgICBKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZSYgcnVudGltZU9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9ydW50aW1l
T2JqZWN0U3BhY2U7IH0KICAgICBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSYgd2luZG93UHJv
eHlTcGFjZSgpIHsgcmV0dXJuIG1fd2luZG93UHJveHlTcGFjZTsgfQogICAgIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlJiBpZGJTZXJpYWxpemF0aW9uU3BhY2UoKSB7IHJldHVybiBtX2lkYlNl
cmlhbGl6YXRpb25TcGFjZTsgfQotICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBmaWxl
U3lzdGVtRGlyZWN0b3J5SGFuZGxlSXRlcmF0b3JTcGFjZSgpIHsgcmV0dXJuIG1fZmlsZVN5c3Rl
bURpcmVjdG9yeUhhbmRsZUl0ZXJhdG9yU3BhY2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZpbGVT
eXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlKHN0ZDo6dW5pcXVlX3B0cjxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4gc3BhY2UpIHsgbV9maWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxl
SXRlcmF0b3JTcGFjZSA9IHN0ZDo6ZXhjaGFuZ2Uoc3BhY2UsIG51bGxwdHIpOyB9CiAKLSAgICBE
T01DbGllbnRJc29TdWJzcGFjZXMmIGNsaWVudFN1YnNwYWNlcygpIHsgcmV0dXJuICptX2NsaWVu
dFN1YnNwYWNlcy5nZXQoKTsgfQorICAgIEV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzJiBj
bGllbnRTdWJzcGFjZXMoKSB7IHJldHVybiAqbV9jbGllbnRTdWJzcGFjZXMuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKICAgICBIYXNoU2V0PERPTVdyYXBwZXJXb3JsZCo+IG1fd29ybGRTZXQ7CkBAIC0x
NjQsOCArMTU4LDU0IEBAIHByaXZhdGU6CiAgICAgSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Ug
bV93aW5kb3dQcm94eVNwYWNlOwogICAgIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlIG1faWRi
U2VyaWFsaXphdGlvblNwYWNlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPiBtX2ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVJdGVyYXRvclNwYWNlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxET01DbGllbnRJc29TdWJzcGFjZXM+IG1fY2xpZW50U3Vic3Bh
Y2VzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcz4g
bV9jbGllbnRTdWJzcGFjZXM7CiB9OwogCisKK2VudW0gY2xhc3MgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlIHsgWWVzLCBObyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGUgdXNlQ3VzdG9tSGVhcENlbGxUeXBlLCB0eXBlbmFtZSBHZXRDbGllbnQsIHR5cGVuYW1l
IFNldENsaWVudCwgdHlwZW5hbWUgR2V0U2VydmVyLCB0eXBlbmFtZSBTZXRTZXJ2ZXI+CitBTFdB
WVNfSU5MSU5FIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0sIEdldENsaWVudCBnZXRDbGllbnQsIFNldENsaWVudCBzZXRDbGllbnQsIEdldFNl
cnZlciBnZXRTZXJ2ZXIsIFNldFNlcnZlciBzZXRTZXJ2ZXIsIEpTQzo6SGVhcENlbGxUeXBlJiAo
KmdldEN1c3RvbUhlYXBDZWxsVHlwZSkoSlNIZWFwRGF0YSYpID0gbnVsbHB0cikKK3sKKyAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7CisgICAgYXV0byYgY2xpZW50U3Vic3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKKyAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBnZXRDbGllbnQoY2xpZW50U3Vi
c3BhY2VzKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOworCisgICAgYXV0byYgaGVhcERh
dGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRh
LmxvY2soKSB9OworCisgICAgYXV0byYgc3Vic3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
CisgICAgSlNDOjpJc29TdWJzcGFjZSogc3BhY2UgPSBnZXRTZXJ2ZXIoc3Vic3BhY2VzKTsKKyAg
ICBpZiAoIXNwYWNlKSB7CisgICAgICAgIEpTQzo6SGVhcCYgaGVhcCA9IHZtLmhlYXA7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6Oklzb1N1YnNwYWNlPiB1bmlxdWVTdWJzcGFjZTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydCh1c2VDdXN0b21IZWFwQ2VsbFR5cGUgPT0gVXNlQ3VzdG9tSGVh
cENlbGxUeXBlOjpZZXMgfHwgc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgVD4gfHwgIVQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgICAgICBpZiBjb25zdGV4cHIg
KHVzZUN1c3RvbUhlYXBDZWxsVHlwZSA9PSBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6OlllcykKKyAg
ICAgICAgICAgIHVuaXF1ZVN1YnNwYWNlID0gbWFrZVVuaXF1ZTxKU0M6Oklzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBnZXRDdXN0b21IZWFwQ2VsbFR5cGUoaGVhcERhdGEpLCBU
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIFQ+KQorICAgICAgICAgICAgICAgIHVu
aXF1ZVN1YnNwYWNlID0gbWFrZVVuaXF1ZTxKU0M6Oklzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgVCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdW5pcXVlU3Vic3BhY2UgPSBtYWtlVW5pcXVl
PEpTQzo6SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgVCk7CisgICAgICAgIH0KKyAgICAgICAgc3BhY2UgPSB1bmlxdWVTdWJzcGFjZS5n
ZXQoKTsKKyAgICAgICAgc2V0U2VydmVyKHN1YnNwYWNlcywgdW5pcXVlU3Vic3BhY2UpOworCitJ
R05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgICAgIHZvaWQgKCpteVZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBUOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOworICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQorICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1Nf
RU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgfQorCisgICAgYXV0byB1bmlxdWVDbGllbnRT
dWJzcGFjZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
CisgICAgYXV0byogY2xpZW50U3BhY2UgPSB1bmlxdWVDbGllbnRTdWJzcGFjZS5nZXQoKTsKKyAg
ICBzZXRDbGllbnQoY2xpZW50U3Vic3BhY2VzLCB1bmlxdWVDbGllbnRTdWJzcGFjZSk7CisgICAg
cmV0dXJuIGNsaWVudFNwYWNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQ4NzEsNTAgKzQ4NzEsMjMgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAKICAgICBHZW5lcmF0ZUl0ZXJhYmxlRGVm
aW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJsZTsKIAotICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJET01DbGllbnRJc29TdWJzcGFjZXMuaCIpOwotICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJET01Jc29TdWJzcGFjZXMuaCIpOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIik7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29y
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPiIpOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUvU2xvdFZpc2l0b3JNYWNyb3MuaD4iKTsKICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPiIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqICR7Y2xhc3NO
YW1lfTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKVxuIik7CiAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7XG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ik
e2ludGVyZmFjZU5hbWV9LmdldCgpKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
KTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAi
XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfS5nZXQoKTtc
biIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc3BhY2UpIHtcbiIpOwotICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDtcbiIpOwog
Ci0gICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfSwgJHtj
bGFzc05hbWV9KTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsICR7Y2xhc3NOYW1lfT4gfHwgISR7Y2xhc3NOYW1lfTo6bmVlZHNEZXN0cnVj
dGlvbik7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgJHtjbGFz
c05hbWV9PilcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCAke2NsYXNzTmFtZX0pO1xuIik7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsICR7Y2xhc3NOYW1lfSk7XG4iKTsKLSAg
ICB9Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
JHtpbnRlcmZhY2VOYW1lfSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpO1xu
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJl
YWNoYWJsZS1jb2RlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJO
SU5HU19CRUdJTihcInRhdXRvbG9naWNhbC1jb21wYXJlXCIpXG4iKTsKLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7Y2xhc3NOYW1lfTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cztcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzO1xuIik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
O1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICJJR05PUkVfV0FSTklOR1NfRU5EXG4iKTsK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIklHTk9SRV9XQVJOSU5HU19FTkRcbiIpOwotICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4i
KTsKLQotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2ludGVyZmFjZU5hbWV9LmdldCgp
O1xuIik7CisgICAgbXkgJGlzR2xvYmFsID0gSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSk7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9y
SW1wbDwke2NsYXNzTmFtZX0sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6IiAuICgkaXNHbG9iYWwg
PyAiWWVzIiA6ICJObyIpIC4gIj4odm0sXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3Ike2ludGVyZmFjZU5hbWV9LmdldCgpOyB9LFxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0gPSBXVEZNb3ZlKHNwYWNlKTsgfSxcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVy
biBzcGFjZXMubV9zdWJzcGFjZUZvciR7aW50ZXJmYWNlTmFtZX0uZ2V0KCk7IH0sXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpbnRlcmZhY2VOYW1lfSA9IFdURk1vdmUoc3Bh
Y2UpOyB9IiAuICgkaXNHbG9iYWwgPyAiLCIgOiAiIikgLiAiXG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUm
IHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvciR7Y2xhc3NOYW1lfTsgfVxuIikgaWYg
JGlzR2xvYmFsOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICk7XG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbikg
ewpAQCAtNjgwMiwzNiArNjc3NSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiBjb25z
dGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICAgICAgYXV0byYgY2xp
ZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICAgICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJh
dG9yTmFtZX0uZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICAg
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgICAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICAgICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7Ci0gICAgICAgIGlmICghc3BhY2Up
IHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCAke2l0
ZXJhdG9yTmFtZX0+IHx8ICEke2l0ZXJhdG9yTmFtZX06Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LCAke2l0ZXJhdG9yTmFtZX0+KQotICAgICAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCAke2l0ZXJhdG9yTmFtZX0pOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgJHtpdGVyYXRvck5hbWV9KTsKLSAgICAgICAgICAg
IHNwYWNlcy5tX3N1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ1bnJlYWNoYWJsZS1j
b2RlXCIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oXCJ0YXV0b2xvZ2ljYWwtY29tcGFyZVwiKQot
ICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9ICR7aXRlcmF0b3JOYW1lfTo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91
dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VO
RAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICB9Ci0KLSAgICAgICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0gPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3Ike2l0ZXJhdG9yTmFtZX0uZ2V0KCk7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8JHtpdGVyYXRvck5hbWV9LCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9LmdldCgpOyB9LAorICAg
ICAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yJHtpdGVyYXRvck5hbWV9ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRl
cmF0b3JOYW1lfS5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvciR7aXRlcmF0b3JOYW1lfSA9IFdURk1vdmUo
c3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmNwcAkocmV2
aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1
ZGUgIkpTRE9NV2luZG93LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZS5oIgpAQCAtMzY2LDMyICszNjYsMTMgQEAgSlNDX0RFRklORV9DVVNUT01f
R0VUVEVSKGpzRE9NV2luZG93X1RlcwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNE
T01XaW5kb3c6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0g
ICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAg
ICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
ckRPTVdpbmRvdy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01X
aW5kb3cuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdywgSlNET01XaW5kb3cp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdyA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNET01XaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckRPTVdpbmRv
dyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAg
cmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNET01XaW5kb3csIFVzZUN1c3Rv
bUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvckRPTVdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdy5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yRE9NV2luZG93ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2
ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJldHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVG
b3JKU0RPTVdpbmRvdzsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNET01XaW5kb3c6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBAQAogI2lu
Y2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE2NywzMiArMTY3LDEzIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc0RlZGljYXRlZFdvcmsKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXBEYXRhLm1faGVhcENlbGxUeXBlRm9ySlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZSwgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
ckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9y
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5t
X2hlYXBDZWxsVHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7IH0KKyAgICApOwog
fQogCiB2b2lkIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRTdGFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkU3Rhci5jcHAJ
KHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRTdGFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTRXhwb3NlZFN0YXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yMzEsMzYgKzIzMSwxMiBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNFeHBvc2VkU3RhclByCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U0V4cG9zZWRTdGFyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JFeHBvc2VkU3Rhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JFeHBvc2VkU3Rhci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTRXhwb3NlZFN0YXI+IHx8ICFKU0V4cG9zZWRTdGFy
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRTdGFyPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU0V4cG9zZWRTdGFyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU0V4cG9zZWRTdGFyKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkU3RhciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNFeHBvc2VkU3Rhcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRTdGFyLmdldCgpOworICAg
IHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNFeHBvc2VkU3RhciwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvckV4cG9zZWRTdGFyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFN0YXIuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvckV4cG9zZWRTdGFyID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lk
IEpTRXhwb3NlZFN0YXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNw
cAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgpAQCAtMjQ5LDM2ICsy
NDksMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzRXhwb3NlZFRvV29yawogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50
U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xp
ZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dz4gfHwgIUpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3cgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5n
ZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gV1RGTW92ZShzcGFjZSk7IH0K
KyAgICApOwogfQogCiB2b2lkIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
LSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTY2LDMyICsxNjYsMTMgQEAgSlNDX0RFRklORV9D
VVNUT01fR0VUVEVSKGpzUGFpbnRXb3JrbGV0RwogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0
YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQot
ICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNl
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0
KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLCBKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdv
cmtsZXRHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclBhaW50V29ya2xldEds
b2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpZZXM+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclBhaW50V29ya2xldEdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JQYWludFdv
cmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29ya2xldEdsb2JhbFNj
b3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6OkhlYXBDZWxsVHlwZSYg
eyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xNjYsMzIgKzE2NiwxMyBAQCBKU0Nf
REVGSU5FX0NVU1RPTV9HRVRURVIoanNTZXJ2aWNlV29ya2VyCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwRGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNw
YWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZv
aWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1
YnNwYWNlRm9ySW1wbDxKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikg
LT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2hhZG93UmVhbG1HbG9iYWxTY29wZS5jcHAJ
KHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NoYWRvd1JlYWxtR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTUyLDMy
ICsxNTIsMTMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzU2hhZG93UmVhbG1HbAogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JTaGFkb3dSZWFsbUds
b2JhbFNjb3BlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRv
JiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFj
ZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclNoYWRv
d1JlYWxtR2xvYmFsU2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYWRvd1JlYWxt
R2xvYmFsU2NvcGUsIEpTU2hhZG93UmVhbG1HbG9iYWxTY29wZSk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FS
TklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JT
aGFkb3dSZWFsbUdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJz
cGFjZUZvckltcGw8SlNTaGFkb3dSZWFsbUdsb2JhbFNjb3BlLCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Olllcz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yU2hhZG93UmVhbG1HbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclNoYWRvd1Jl
YWxtR2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclNoYWRvd1JlYWxtR2xvYmFsU2NvcGUgPSBX
VEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFw
Q2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTU2hhZG93UmVhbG1H
bG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNTaGFkb3dSZWFsbUdsb2JhbFNjb3Bl
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyOTAx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTUwLDMyICsxNTAsMTMgQEAg
SlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzU2hhcmVkV29ya2VyRwogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBj
bGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yU2hhcmVkV29ya2VyR2xv
YmFsU2NvcGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlLCBKU1NoYXJlZFdvcmtlckdsb2JhbFNjb3BlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFj
ZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lk
ICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRv
ciYpID0gSlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFj
ZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yU2hhcmVk
V29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclNo
YXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFj
ZUZvckltcGw8SlNTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpZZXM+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclNoYXJlZFdv
cmtlckdsb2JhbFNjb3BlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JTaGFyZWRXb3JrZXJHbG9iYWxTY29wZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc2VydmVyKSAtPiBKU0M6Okhl
YXBDZWxsVHlwZSYgeyByZXR1cm4gc2VydmVyLm1faGVhcENlbGxUeXBlRm9ySlNTaGFyZWRXb3Jr
ZXJHbG9iYWxTY29wZTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNTaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVh
Y3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw5IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkVsZW1lbnRJbmxpbmVzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKQEAgLTQzMywzNiArNDMzLDEyIEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihqc1Rlc3RDRVJlYWN0aW8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpT
VGVzdENFUmVhY3Rpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAg
ICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnM+IHx8
ICFKU1Rlc3RDRVJlYWN0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
Q0VSZWFjdGlvbnM+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpT
VGVzdENFUmVhY3Rpb25zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RDRVJlYWN0aW9ucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENF
UmVhY3Rpb25zID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RDRVJlYWN0
aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RDRVJlYWN0aW9ucywgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Q0VSZWFjdGlvbnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnMuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9ucyA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsK
IH0KIAogdm9pZCBKU1Rlc3RDRVJlYWN0aW9uczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0yNTksMzYgKzI1OSwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oanNUZXN0Q0VSZWFjdGlvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0g
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5n
ZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+IHx8ICFKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciA9IHN0ZDo6
dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2Vs
bDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25z
dHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIgPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmdldCgp
OworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyID0gV1RGTW92ZShzcGFj
ZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdENhbGxUcmFjZXIuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFj
ZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC01MDgsMzYgKzUwOCwxMiBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Q2FsbFRyYWNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlKiBKU1Rlc3RDYWxsVHJhY2VyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2FsbFRyYWNlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENhbGxUcmFj
ZXI+IHx8ICFKU1Rlc3RDYWxsVHJhY2VyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RDYWxsVHJhY2VyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LCBKU1Rlc3RDYWxsVHJhY2VyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RDYWxsVHJhY2VyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
Q2FsbFRyYWNlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q2FsbFRy
YWNlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RDYWxsVHJhY2VyLmdldCgpOworICAgIHJldHVybiBXZWJD
b3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0Q2FsbFRyYWNlciwgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RDYWxsVHJhY2VyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENhbGxUcmFjZXIuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDYWxsVHJhY2VyID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdENhbGxUcmFjZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0xNzEsMzYgKzE3MSwxMiBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0Q2xhc3NXaXRoCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsKLSAgICBpZiAo
IXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPiB8fCAhSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOworICAgIHJl
dHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcy5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCkBAIC03ODQsMzYgKzc4NCwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNU
ZXN0Q29uZGl0aW9uCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2Vz
ID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXM+IHx8ICFKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbElu
Y2x1ZGVzLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRp
b25hbEluY2x1ZGVzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gV1RGTW92ZShzcGFjZSk7
IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdy
aXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEwIEBACiAj
aW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtNjA2LDM2ICs2MDYsMTIgQEAg
SlNDX0RFRklORV9DVVNUT01fU0VUVEVSKHNldEpTVGVzdENvbmRpdAogCiBKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZSogSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsbHlSZWFk
V3JpdGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRp
dGlvbmFsbHlSZWFkV3JpdGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFw
JiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRl
PiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZT4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxs
eVJlYWRXcml0ZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFs
bHlSZWFkV3JpdGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRD
b25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdENvbmRp
dGlvbmFsbHlSZWFkV3JpdGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVh
ZFdyaXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9u
YWxseVJlYWRXcml0ZS5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBs
PEpTVGVzdENvbmRpdGlvbmFsbHlSZWFkV3JpdGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RDb25kaXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0Q29uZGl0aW9uYWxseVJlYWRXcml0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25k
aXRpb25hbGx5UmVhZFdyaXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0aW9uYWxseVJlYWRX
cml0ZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RDb25kaXRp
b25hbGx5UmVhZFdyaXRlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RE9NSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDEyICsyMiwxMiBAQAogI2luY2x1ZGUgIkpTVGVzdERPTUpJVC5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9N
SklUQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkRPTUpJVElETENvbnZlcnQu
aCIKICNpbmNsdWRlICJET01KSVRJRExUeXBlLmgiCiAjaW5jbHVkZSAiRE9NSklUSURMVHlwZUZp
bHRlci5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xMjQ3LDM2ICsxMjQ3LDEyIEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihqc1Rlc3RET01KSVRQcm8KIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdERPTUpJVDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERPTUpJVC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RE9NSklULmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYg
aGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RE9NSklUPiB8fCAhSlNUZXN0RE9NSklU
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RET01KSVQ+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERPTUpJVCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RE9NSklUKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0RE9NSklUID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RET01KSVQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7CisgICAgcmV0dXJu
IFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RET01KSVQsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RET01KSVQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RE
T01KSVQgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RE9NSklULmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RE9NSklUID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERPTUpJ
VDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT04uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT04u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiw5IEBACiAjaW5jbHVkZSAiSlNUZXN0RGVm
YXVsdFRvSlNPTi5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC04MDMsMzYgKzgwMywxMiBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZhdWx0VG9KU09OOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTi5nZXQoKTsK
LSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdERlZmF1bHRUb0pTT04+IHx8ICFKU1Rlc3REZWZhdWx0VG9KU09OOjpuZWVkc0Rl
c3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09OPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTiA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RGVmYXVsdFRvSlNPTjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENv
bnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdO
T1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT04gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFj
ZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT04uZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3REZWZhdWx0VG9KU09OID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT046OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RE
ZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNP
TkZpbHRlcmVkQnlFeHBvc2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI2NSwz
NiArMjY1LDEyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3REZWZhdWx0VG8KIAog
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVu
dERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAg
ICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAg
IGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3NlZC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkPiB8fCAhSlNUZXN0
RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5
RXhwb3NlZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQ6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3Ry
YWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBtYWtl
VW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRC
eUV4cG9zZWQuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rl
c3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09ORmlsdGVyZWRCeUV4cG9zZWQgPSBXVEZNb3Zl
KHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkLmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0RGVmYXVsdFRvSlNPTkZpbHRlcmVkQnlFeHBvc2VkID0gV1RGTW92ZShzcGFjZSk7
IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05GaWx0ZXJlZEJ5RXhwb3Nl
ZDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRU
b0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5o
ZXJpdGFuY2UuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRP
TUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTE1NywzNiArMTU3LDEy
IEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3REZWZhdWx0VG8KIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNl
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVm
YXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlLmdldCgp
OwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+IHx8ICFKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0SW5oZXJpdGFuY2U+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERlZmF1bHRUb0pTT05JbmRpcmVj
dEluaGVyaXRhbmNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSk7Ci0gICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVyaXRhbmNlID0gc3RkOjp1
bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVu
cmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29t
cGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRP
dXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAg
ICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdO
T1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdEluaGVy
aXRhbmNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluZGlyZWN0SW5oZXJpdGFuY2UuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNw
YWNlRm9ySW1wbDxKU1Rlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZSwgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05JbmRpcmVjdElu
aGVyaXRhbmNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluZGlyZWN0
SW5oZXJpdGFuY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBz
cGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5kaXJlY3RJbmhl
cml0YW5jZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REZWZh
dWx0VG9KU09OSW5kaXJlY3RJbmhlcml0YW5jZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RGVmYXVsdFRvSlNP
TkluaGVyaXQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCkBAIC0yODcsMzYgKzI4NywxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3REZWZh
dWx0VG9KU09OSW5oZXJpdDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnRE
YXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNl
cygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsKLSAgICBp
ZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdERlZmF1bHRUb0pTT05Jbmhlcml0PiB8fCAhSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0
VG9KU09OSW5oZXJpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3REZWZhdWx0VG9KU09OSW5oZXJpdCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0g
ICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZh
dWx0VG9KU09OSW5oZXJpdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+
KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dERlZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFj
ZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXQsIFVzZUN1c3RvbUhlYXBDZWxsVHlw
ZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdC5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
ZmF1bHRUb0pTT05Jbmhlcml0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVy
aXQgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdERlZmF1bHRUb0pTT05J
bmhlcml0RmluYWwuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0zMjcsMzYgKzMyNywxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0RGVmYXVsdFRvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RE
ZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbC5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRG
aW5hbC5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5o
ZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw+IHx8ICFKU1Rl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsPikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REZWZhdWx0VG9KU09O
SW5oZXJpdEZpbmFsKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVmYXVsdFRv
SlNPTkluaGVyaXRGaW5hbCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRU
b0pTT05Jbmhlcml0RmluYWwgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpz
dWJzcGFjZUZvckltcGw8SlNUZXN0RGVmYXVsdFRvSlNPTkluaGVyaXRGaW5hbCwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gV1RG
TW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWwuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3REZWZhdWx0VG9KU09OSW5oZXJpdEZpbmFsID0gV1RGTW92ZShzcGFjZSk7IH0KKyAg
ICApOwogfQogCiB2b2lkIEpTVGVzdERlZmF1bHRUb0pTT05Jbmhlcml0RmluYWw6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3lu
dGhldGljQXR0cmlidXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCIKLSNpbmNsdWRl
ICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4
dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMjQxLDM2ICsyNDEsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fU0VU
VEVSKHNldEpTVGVzdERlbGVnYQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnRE
YXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNB
dHRyaWJ1dGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERl
bGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3REZWxlZ2F0
ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlPiB8fCAhSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RGVs
ZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVsZWdhdGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RGVsZWdh
dGVUb1NoYXJlZFN5bnRoZXRpY0F0dHJpYnV0ZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1
dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmli
dXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAg
ICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1No
YXJlZFN5bnRoZXRpY0F0dHJpYnV0ZS5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdERlbGVnYXRlVG9TaGFyZWRTeW50aGV0aWNBdHRyaWJ1dGUsIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhl
dGljQXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REZWxlZ2F0ZVRvU2hhcmVk
U3ludGhldGljQXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RGVsZWdhdGVUb1NoYXJlZFN5
bnRoZXRpY0F0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3REZWxlZ2F0ZVRvU2hhcmVkU3ludGhldGljQXR0cmlidXRlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RG9tYWluU2VjdXJpdHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21h
aW5TZWN1cml0eS5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REb21haW5TZWN1cml0eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50
SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlz
b1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTMxNSwzNiArMzE1LDEyIEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3REb21haW5TZWMKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdERvbWFpblNlY3VyaXR5OjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgp
OwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0RG9tYWluU2VjdXJpdHk+IHx8ICFKU1Rlc3REb21haW5TZWN1cml0eTo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RG9tYWluU2VjdXJpdHk+KQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdERvbWFpblNlY3VyaXR5KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3REb21haW5TZWN1
cml0eSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0g
c3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVH
SU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2lj
YWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3REb21haW5TZWN1cml0eTo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0RG9tYWluU2VjdXJpdHkuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3REb21haW5TZWN1cml0eSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdERvbWFpblNlY3VyaXR5LmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0RG9tYWluU2VjdXJpdHkgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RG9tYWluU2Vj
dXJpdHkuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkg
eyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3REb21haW5TZWN1cml0eSA9IFdURk1vdmUoc3BhY2Up
OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3REb21haW5TZWN1cml0eTo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFbmFibGVkQnlTZXR0aW5nLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5
U2V0dGluZy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGUuaCIKQEAgLTQ1NCwzNiArNDU0LDEyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihq
c1Rlc3RFbmFibGVkQnkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEVuYWJs
ZWRCeVNldHRpbmc6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsK
LSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3Bh
Y2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBM
b2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBo
ZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsK
LSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5
U2V0dGluZz4gfHwgIUpTVGVzdEVuYWJsZWRCeVNldHRpbmc6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkQnlTZXR0aW5nID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nOjp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLCBVc2VDdXN0b21IZWFwQ2Vs
bFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RW5hYmxlZEJ5U2V0dGluZy5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RW5hYmxl
ZEJ5U2V0dGluZy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRCeVNldHRpbmcgPSBXVEZNb3Zl
KHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0xODEsMzYgKzE4MSwxMiBAQCBKU0NfREVGSU5FX0NV
U1RPTV9HRVRURVIoanNUZXN0RW5hYmxlZEZvCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dC5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PiB8fCAhSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6Om5l
ZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0PikKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0RW5h
YmxlZEZvckNvbnRleHQpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFbmFibGVk
Rm9yQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZp
c2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAg
ICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBj
bGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVkRm9yQ29udGV4dCA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmdl
dCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFbmFibGVk
Rm9yQ29udGV4dC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0ID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdEVuYWJsZWRGb3JDb250ZXh0LmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RW5hYmxlZEZvckNvbnRleHQgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTMxOCwzNiArMzE4LDEyIEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RFdmVudENvbnMKIAogSlNDOjpHQ0NsaWVudDo6
SXNvU3Vic3BhY2UqIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudENvbnN0cnVjdG9yLmdl
dCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gfHwgIUpTVGVzdEV2ZW50Q29uc3RydWN0
b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3IpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVu
dENvbnN0cnVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAg
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3RvciA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IuZ2V0
KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFdmVudENvbnN0
cnVjdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50Q29uc3RydWN0b3IgPSBXVEZN
b3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRDb25zdHJ1Y3Rvci5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2
ZW50Q29uc3RydWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAy
OTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVk
ZSAiSlNUZXN0RXZlbnRUYXJnZXQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgot
I2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNTcsMzYgKzI1NywxMiBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0RXZlbnRUYXJnCiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RFdmVudFRhcmdldDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgpKQotICAgICAgICByZXR1
cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERh
dGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRv
JiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEV2
ZW50VGFyZ2V0PiB8fCAhSlNUZXN0RXZlbnRUYXJnZXQ6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAg
ICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdEV2ZW50VGFyZ2V0PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3RFdmVudFRhcmdldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0RXZlbnRUYXJnZXQpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RFdmVudFRhcmdldCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0RXZlbnRUYXJnZXQ6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldCA9IG1h
a2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJu
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0LmdldCgpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0RXZlbnRUYXJnZXQsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFdmVudFRhcmdldC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEV2ZW50VGFyZ2V0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEV2
ZW50VGFyZ2V0LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXZlbnRUYXJnZXQgPSBXVEZNb3ZlKHNwYWNl
KTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE4MiwzNiArMTgyLDEyIEBA
IEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3RFeGNlcHRpb24KIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdEV4Y2VwdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERh
dGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRh
LmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEV4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOwotICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0RXhj
ZXB0aW9uPiB8fCAhSlNUZXN0RXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RFeGNlcHRpb24+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdEV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxs
VHlwZSwgSlNUZXN0RXhjZXB0aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
RXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RFeGNlcHRp
b246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RFeGNlcHRpb24sIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6
Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RFeGNl
cHRpb24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0RXhjZXB0aW9uLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0RXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dEV4Y2VwdGlvbjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5jcHAJ
KHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVSb290LmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MTgyLDM2ICsxODIsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEdlbmVyYXRl
QQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0R2VuZXJhdGVBZGRPcGFxdWVS
b290OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
R2VuZXJhdGVBZGRPcGFxdWVSb290LmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7
Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2Nr
ZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFw
RGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0
ZUFkZE9wYXF1ZVJvb3Q+IHx8ICFKU1Rlc3RHZW5lcmF0ZUFkZE9wYXF1ZVJvb3Q6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdD4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVBZGRPcGFx
dWVSb290KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRl
QWRkT3BhcXVlUm9vdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdl
bmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VG
b3JJbXBsPEpTVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdC5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEdlbmVyYXRlQWRkT3BhcXVlUm9vdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RH
ZW5lcmF0ZUFkZE9wYXF1ZVJvb3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUFkZE9wYXF1
ZVJvb3QgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3Bw
CShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFj
ZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2Vz
LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTky
LDM2ICsxOTIsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdEdlbmVyYXRlSQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAq
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBj
bGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRv
KiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
IGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2Nr
ZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1
YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlPiB8fCAhSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4pCi0gICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUg
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5nZXQoKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3Bh
Y2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0K
IAogdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEw
ICsyMiwxMCBAQAogI2luY2x1ZGUgIkpTVGVzdEdsb2JhbE9iamVjdC5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5Lmgi
CiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgog
I2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTE4MjUsMzIgKzE4MjUsMTMgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdEdsb2JhbE9iagogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0R2xvYmFsT2JqZWN0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2JqZWN0LmdldCgpKQotICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsK
LSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFj
ZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkg
ewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEubV9oZWFwQ2VsbFR5cGVG
b3JKU1Rlc3RHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0R2xvYmFsT2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAg
ICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRD
b25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5E
Ci0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFs
T2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsK
LSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0R2xvYmFsT2Jq
ZWN0LmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0R2xv
YmFsT2JqZWN0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Olllcz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2Jh
bE9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEdsb2JhbE9iamVjdCA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RHbG9iYWxPYmplY3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RHbG9iYWxPYmpl
Y3QgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNlcnZlcikgLT4gSlND
OjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hlYXBDZWxsVHlwZUZvckpTVGVzdEds
b2JhbE9iamVjdDsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0R2xvYmFsT2JqZWN0OjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgi
CkBAIC0yNzEsMzYgKzI3MSwxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0SW5k
ZXhlZFNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7
Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYg
c3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsK
LSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpz
Q2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15
VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAg
ICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAg
IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvcklt
cGw8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2
b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyOTAx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5n
cy5oIgpAQCAtMjcxLDM2ICsyNzEsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dEluZGV4ZWRTZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0g
ICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vi
c3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVu
dERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07
Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJz
cGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFw
ID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24+IHx8ICFKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Om5lZWRzRGVzdHJ1
Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENl
bGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBX
VEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMDMsMzYgKzMwMywxMiBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0SW5kZXhlZFNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4gfHwgIUpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPikKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0
cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQot
ICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpID0gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1
ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShy
ZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsOSBAQAog
I2luY2x1ZGUgIkpTVGVzdEludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRWxlbWVudElubGluZXMuaCIKKyNpbmNsdWRlICJFeHRl
bmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vi
c3BhY2VzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1
dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTExMDEsMzYgKzExMDEsMTIgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3Bh
Y2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgICAgIGF1dG8mIGhlYXBEYXRhID0g
Y2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEu
bG9jaygpIH07Ci0KLSAgICAgICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7
Ci0gICAgICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdElu
dGVyZmFjZUl0ZXJhdG9yLmdldCgpOwotICAgICAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgICAg
ICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgVGVzdEludGVyZmFjZUl0ZXJh
dG9yPiB8fCAhVGVzdEludGVyZmFjZUl0ZXJhdG9yOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgVGVzdEludGVyZmFjZUl0ZXJhdG9yPikKLSAgICAgICAgICAgICAgICBzcGFjZSA9
IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSwgVGVzdEludGVyZmFjZUl0ZXJhdG9yKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIFRlc3RJbnRlcmZhY2VJdGVyYXRv
cik7Ci0gICAgICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRv
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IFRlc3RJbnRlcmZhY2VJdGVy
YXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICBpZiAobXlW
aXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAg
ICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICB9
Ci0KLSAgICAgICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNl
SXRlcmF0b3IgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2Up
OwotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50
ZXJmYWNlSXRlcmF0b3IuZ2V0KCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZv
ckltcGw8VGVzdEludGVyZmFjZUl0ZXJhdG9yLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2
bSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yLmdldCgpOyB9LAorICAgICAgICAgICAg
W10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdEludGVyZmFjZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRl
cmZhY2VJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VJdGVyYXRvciA9
IFdURk1vdmUoc3BhY2UpOyB9CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEyMDQsMzYgKzEx
ODAsMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdEludGVyZmFjZQogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SW50ZXJmYWNlOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNs
aWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlLmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RJbnRlcmZhY2U+IHx8ICFKU1Rlc3RJbnRlcmZhY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdEludGVyZmFjZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0SW50ZXJmYWNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RJbnRlcmZhY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RJbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dEludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZSA9IG1ha2VVbmlxdWU8
SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdEludGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdEludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2UuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RJbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0SW50ZXJmYWNlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXpl
ciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTE4MiwzNiArMTgyLDEyIEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihqc1Rlc3RJbnRlcmZhY2UKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3Bh
Y2UqIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU+IHx8ICFKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6bmVlZHNEZXN0cnVj
dGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+KQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBK
U1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gc3RkOjp1bmlxdWVfcHRyPElz
b1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNv
ZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlID0gbWFrZVVuaXF1ZTxKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuZ2V0KCk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEl0ZXJhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCShyZXZpc2lvbiAyOTAxOTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
SXRlcmFibGUuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
dmVydEludGVyZmFjZS5oIgpAQCAtMTk2LDM2ICsxOTYsMTIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBjbGllbnRE
YXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAg
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gY2xp
ZW50U3BhY2U7Ci0KLSAgICAgICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRh
KCk7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgICAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICAgICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQo
KTsKLSAgICAgICAgaWYgKCFzcGFjZSkgewotICAgICAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIFRlc3RJdGVyYWJsZUl0ZXJhdG9yPiB8fCAhVGVzdEl0ZXJhYmxl
SXRlcmF0b3I6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBUZXN0SXRlcmFibGVJ
dGVyYXRvcj4pCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIFRl
c3RJdGVyYWJsZUl0ZXJhdG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIFRlc3RJdGVyYWJsZUl0ZXJhdG9yKTsKLSAgICAgICAgICAgIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
ICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBUZXN0SXRlcmFibGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganND
ZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICB9Ci0KLSAgICAgICAgY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IG1ha2VVbmlxdWU8SlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZUl0ZXJhdG9yLmdldCgpOworICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPFRlc3RJdGVyYWJsZUl0ZXJhdG9yLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlSXRlcmF0
b3IuZ2V0KCk7IH0sCisgICAgICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvciA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGVJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RJdGVyYWJsZUl0ZXJhdG9yID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICAgICAgKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQpAQCAtMjk5LDM2ICsyNzUsMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpz
VGVzdEl0ZXJhYmxlUAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0SXRlcmFi
bGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0
byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAo
YXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJ
dGVyYWJsZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRl
cmFibGUuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4gfHwgIUpTVGVzdEl0ZXJhYmxlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RJdGVyYWJsZT4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0SXRlcmFibGUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdEl0ZXJhYmxlKTsKLSAgICAgICAgc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdEl0ZXJhYmxlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2
b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAg
ICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVu
ZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAg
fQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQoKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdEl0ZXJhYmxlLCBVc2VDdXN0
b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SXRlcmFibGUuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3RJdGVyYWJsZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RJdGVyYWJsZS5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdEl0ZXJhYmxlID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdEl0ZXJhYmxlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNl
cy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01CdWlsdGluQ29uc3RydWN0b3IuaCIKQEAgLTIyNSwzNiArMjI1
LDEyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RKU0J1aWx0aW4KIAogSlNDOjpH
Q0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8m
IGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBo
ZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNl
cygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVh
cCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29m
X3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+
IHx8ICFKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+KQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3Rvcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0
KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyBy
ZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciA9IFdURk1vdmUoc3BhY2UpOyB9Cisg
ICAgKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0
aW9uLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAj
aW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0yMjcsMzYgKzIyNywxMiBAQCBK
U0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TGVnYWN5RmFjCiAKIEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lGYWN0b3J5RnVuY3Rp
b24uZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbj4gfHwg
IUpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3
IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb24pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
biA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TGVnYWN5RmFjdG9yeUZ1
bmN0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
Qzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91
dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAg
ICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9uID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFjdG9yeUZ1bmN0aW9u
LmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0TGVnYWN5
RmFjdG9yeUZ1bmN0aW9uLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAg
W10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TGVnYWN5RmFjdG9yeUZ1bmN0aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5RmFj
dG9yeUZ1bmN0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlv
bi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeUZhY3RvcnlGdW5jdGlvbiA9IFdURk1vdmUoc3Bh
Y2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lGYWN0b3J5RnVuY3Rpb246OmFu
YWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lOb0ludGVy
ZmFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAkocmV2aXNpb24g
MjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzMwLDM2ICszMzAsMTIgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGpzVGVzdExlZ2FjeU5vSQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFj
ZSogSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBj
bGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2so
KSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNv
U3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZh
Y2VPYmplY3QuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdD4gfHwgIUpT
VGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNl
T2JqZWN0KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZh
Y2VPYmplY3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeU5v
SW50ZXJmYWNlT2JqZWN0Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VP
YmplY3QgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdC5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBs
PEpTVGVzdExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5v
Pih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TGVnYWN5Tm9JbnRlcmZhY2VPYmplY3QuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RMZWdhY3lOb0ludGVyZmFjZU9iamVjdCA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RM
ZWdhY3lOb0ludGVyZmFjZU9iamVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU5vSW50ZXJm
YWNlT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdExl
Z2FjeU5vSW50ZXJmYWNlT2JqZWN0OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjQ0LDM2ICsyNDQsMTIgQEAgSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGpzVGVzdExlZ2FjeU92ZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSog
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiB8fCAhSlNUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdEluczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
TGVnYWN5T3ZlcnJpZGVCdWlsdElucz4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJz
cGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBz
dGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpK
U0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0
Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBo
ZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5n
ZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnMsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdElucyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IFdURk1vdmUo
c3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE1hcExpa2UuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlLmgiCiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
LSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAj
aW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzYxLDM2ICsz
NjEsMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE1hcExpa2VQcgogCiBKU0M6
OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TWFwTGlrZTo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFz
cGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RN
YXBMaWtlPiB8fCAhSlNUZXN0TWFwTGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TWFwTGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwg
SlNUZXN0TWFwTGlrZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElz
b1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwg
SlNUZXN0TWFwTGlrZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2Ug
PSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShK
U0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE1hcExpa2U6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAh
PSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRw
dXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQK
LUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RNYXBMaWtlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TWFwTGlrZS5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE1hcExpa2UsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RN
YXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IFdURk1vdmUoc3BhY2Up
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RNYXBMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZSA9IFdURk1vdmUoc3Bh
Y2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RNYXBMaWtlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVy
YXRpb25zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVk
RE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzc1LDM2ICszNzUs
MTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE1hcExpa2VXaQogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9u
czo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEg
PSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRv
JiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE1h
cExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7
Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zPiB8fCAhSlNUZXN0TWFw
TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucz4pCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNw
YWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0
TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBzdGQ6OnVuaXF1ZV9w
dHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFi
bGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikK
LSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBs
PEpTVGVzdE1hcExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9
IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RNYXBMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdl
dCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0TWFwTGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucyA9IFdURk1v
dmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RNYXBMaWtlV2l0aE92ZXJyaWRk
ZW5PcGVyYXRpb25zOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBA
IC0zMzksMzYgKzMzOSwxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRB
bmRJCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFj
ZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50
RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsK
LQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNw
YWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6bmVl
ZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xp
ZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgp
OworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFj
ZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2Up
OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBA
QAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgpAQCAtMzM5LDM2ICszMzksMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzVGVzdE5hbWVkQW5kSQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50
RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4gfHwgIUpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4pCi0g
ICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
cGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxI
ZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp2aXNpdE91dHB1dENvbnN0
cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxs
VmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3Ry
YWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVf
V0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVl
PEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLCBVc2VDdXN0b21IZWFw
Q2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQog
CiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjphbmFs
eXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUg
IklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM5NiwzNiArMzk2LDEyIEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihqc1Rlc3ROYW1lZEFuZEkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9
IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNl
ID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQot
ICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBs
b2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRh
LnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVj
dCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
ID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xv
Z2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCko
SlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2Up
OyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5j
cHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGll
bnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
SXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMjQxLDM2ICsyNDEsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VU
VEVSKGpzVGVzdE5hbWVkRGVsZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7
Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50
U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVh
cDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+IHx8ICFKU1Rlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4o
InRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7
Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllci5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJ
bXBsPEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQg
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGws
IEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2Vz
LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01D
bGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5o
IgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTI0MSwzNiArMjQxLDEyIEBAIEpTQ19ERUZJTkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1l
ZERlbGUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCkpCi0gICAgICAg
IHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5o
ZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAg
IGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+IHx8ICFK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+KQotICAgICAgICAg
ICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vi
c3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlz
aXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6
dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJh
aW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uID0gbWFrZVVu
aXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4o
dm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAg
KTsKIH0KIAogdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0yNjUsMzYgKzI2NSwx
MiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWREZWxlCiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGll
bnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBj
bGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2Vs
bEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlND
OjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0
cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAg
ICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+
KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAg
ICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0
byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZv
aWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjkwMTk4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgiCiAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRl
ZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3Bh
Y2VzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgpAQCAtMjU3LDM2ICsyNTcsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVz
dE5hbWVkRGVsZQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4g
fHwgIUpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpuZWVkc0Rlc3RydWN0aW9u
KTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4pCi0gICAg
ICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICAgICAgc3BhY2VzLm1f
c3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlND
ZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENv
bnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVh
cERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FS
TklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIgPSBt
YWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVy
biBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5k
ZXhlZEdldHRlci5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6
Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsgfSwKKyAg
ICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyID0gV1RGTW92ZShzcGFjZSk7IH0K
KyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjph
bmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZpc2lvbiAyOTAxOTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjE1LDM2ICsyMTUs
MTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdE5hbWVkR2V0dAogCiBKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6c3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFj
ZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRT
cGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGguZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGguZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB8fCAh
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwg
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29T
dWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAs
IGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCk7Ci0gICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggPSBzdGQ6OnVu
aXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5y
ZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21w
YXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5nZXQoKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgsIFVz
ZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7
IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCA9IFdURk1vdmUo
c3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlckNhbGxXaXRoLmdldCgpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aCA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBK
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZEdl
dHRlck5vSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRl
ICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIxNSwzNiArMjE1LDEyIEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihqc1Rlc3ROYW1lZEdldHQKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vi
c3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRh
ID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5s
b2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAg
IElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+IHx8
ICFKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+KQotICAgICAgICAgICAgc3BhY2Ug
PSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05P
UkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0
Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNl
KTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9y
SW1wbDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAg
ICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFw
QW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIK
KyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJz
dHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0MSwzNiArMjQxLDEyIEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3ROYW1lZEdldHQKIAogSlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2UqIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBh
dXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJz
cGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAg
ICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcj4gfHwgIUpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+
KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyID0gc3RkOjp1bmlxdWVfcHRy
PElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0g
ICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJh
aW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQg
IT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0
cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5E
Ci1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA9IG1ha2VVbmlxdWU8SlND
OjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIg
PSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllcjo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0yOTUsMzYgKzI5NSwxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9H
RVRURVIoanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmdldCgpKQotICAg
ICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERh
dGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0K
LSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFj
ZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFw
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVj
dGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiB8fCAhSlNUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1
YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIp
OwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0
T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAg
ICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRv
JiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFi
c3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yOTUsMzYgKzI5NSwxMiBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwot
Ci0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERh
dGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHx8ICFKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
dm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNs
b3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBl
bmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAg
IH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24gPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
Pigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmdldCgpOworICAgIHJldHVybiBXZWJDb3Jl
OjpzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiwgVXNl
Q3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uID0gV1RG
TW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFs
eXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUg
IkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBA
IC0zMjYsMzYgKzMyNiwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRT
ZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNs
aWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7
Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3Bh
Y2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3Bh
Y2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5nZXQoKTsKLSAg
ICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Qs
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwg
aGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQp
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15Vmlz
aXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAg
ICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAg
IHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zNzMsMzYgKzM3MywxMiBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKTsK
LSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3Bh
Y2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJz
cGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuZ2V0
KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyID0gV1RGTW92ZShz
cGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC00MjMsMzYgKzQyMywx
MiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0ND
bGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhl
YXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAg
YXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlci5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAg
PSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXI+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0
cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpT
Q2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRD
b25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhl
YXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwot
ICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpz
dWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ciwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuZ2V0KCk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyID0gV1RGTW92ZShzcGFjZSk7IH0K
KyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaCIK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1
YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJz
cGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCkBAIC0yNzIsMzYgKzI3MiwxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNU
ZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEu
Y2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3Bh
Y2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYg
aGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhl
YXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2Vz
KCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKLSAgICBpZiAoIXNwYWNl
KSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPikKLSAgICAgICAgICAg
IHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lP
dmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWls
dElucyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6
Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmdldCgp
OworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMu
Y3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgpAQCAtMzU2LDM2ICszNTYsMTIgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdE5hbWVkU2V0dAogCiBKU0M6OkdDQ2xpZW50OjpJc29T
dWJzcGFjZSogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVz
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBo
ZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXM+IHx8ICFKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcz4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMpOwotICAg
ICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdl
YWJsZVByb3BlcnRpZXMgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlH
Tk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1Nf
QkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRw
dXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdE5h
bWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IG1ha2VV
bmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VG
b3JJbXBsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcywg
VXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyA9IFdURk1vdmUoc3BhY2UpOyB9
LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuZ2V0KCk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMgPSBX
VEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZp
c2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNp
bmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMu
aCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCkBAIC0zMzMsMzYgKzMzMywxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0TmFtZWRTZXR0CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xp
ZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwot
ICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0g
ICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0g
ICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxv
Y2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEu
c3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5
T3ZlcnJpZGVCdWlsdElucy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAm
IGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92
PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+IHx8ICFKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
PikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5
VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6dmlzaXRPdXRw
dXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRP
dXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9
IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1
dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAot
SUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1
YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0Fu
ZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZv
ckltcGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1
dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJv
cGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
c3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyOTAxOTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZXNw
YWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUg
IkpTVGVzdE5hbWVzcGFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvck5vdENhbGxhYmxlLmgiCkBAIC0yNzUsMzYgKzI3NSwxMiBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0TmFtZXNwYWNlCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3ROYW1lc3BhY2VPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3ROYW1lc3BhY2VPYmplY3QuZ2V0KCkpCi0gICAgICAgIHJldHVybiBj
bGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgp
OwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNw
YWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdC5nZXQoKTsKLSAgICBpZiAoIXNw
YWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5h
bWVzcGFjZU9iamVjdD4gfHwgIUpTVGVzdE5hbWVzcGFjZU9iamVjdDo6bmVlZHNEZXN0cnVjdGlv
bik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0TmFtZXNwYWNlT2JqZWN0PikKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROYW1lc3BhY2VPYmplY3QpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE5hbWVzcGFjZU9iamVjdCk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IHN0ZDo6dW5p
cXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJl
YWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBh
cmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0TmFtZXNwYWNlT2JqZWN0Ojp2aXNpdE91dHB1
dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0g
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0
Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1J
R05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpz
dWJzcGFjZUZvckltcGw8SlNUZXN0TmFtZXNwYWNlT2JqZWN0LCBVc2VDdXN0b21IZWFwQ2VsbFR5
cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0TmFtZXNwYWNlT2JqZWN0LmdldCgpOyB9LAorICAgICAgICBb
XSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0TmFtZXNwYWNlT2JqZWN0ID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9i
amVjdC5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5hbWVzcGFjZU9iamVjdCA9IFdURk1vdmUoc3BhY2Up
OyB9CisgICAgKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3ROb2RlLmgi
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01Q
cm9taXNlUHJveHkuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgpAQCAtNDAyLDM2ICs0MDIsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgY29u
c3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgICAgIGlmIChh
dXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5v
ZGVJdGVyYXRvci5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAg
ICAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICAgICAgTG9j
a2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgICAgIGF1dG8mIHNwYWNlcyA9
IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgICAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IuZ2V0KCk7Ci0gICAgICAgIGlmICghc3Bh
Y2UpIHsKLSAgICAgICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBU
ZXN0Tm9kZUl0ZXJhdG9yPiB8fCAhVGVzdE5vZGVJdGVyYXRvcjo6bmVlZHNEZXN0cnVjdGlvbik7
Ci0gICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3QsIFRlc3ROb2RlSXRlcmF0b3I+KQotICAgICAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLCBUZXN0Tm9kZUl0ZXJhdG9yKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIFRlc3ROb2RlSXRlcmF0b3IpOwotICAg
ICAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlND
ZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gVGVzdE5vZGVJdGVyYXRvcjo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgICAgIGhlYXBE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgICAgICB9Ci0KLSAgICAgICAgY2xpZW50
U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZUl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICAgICAgcmV0dXJuIGNsaWVu
dFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxUZXN0Tm9kZUl0ZXJhdG9yLCBVc2VD
dXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQo
KTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0b3IgPSBXVEZNb3ZlKHNwYWNlKTsg
fSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE5vZGVJdGVyYXRvci5nZXQoKTsgfSwKKyAgICAgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlSXRlcmF0
b3IgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC01MDUsMzYg
KzQ4MSwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0Tm9kZVByb3RvCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3ROb2RlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVu
dERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xp
ZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBE
YXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0
byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNl
ID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE5vZGU+IHx8
ICFKU1Rlc3ROb2RlOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3ROb2RlPikK
LSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3ROb2RlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQ
QUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3ROb2RlKTsKLSAgICAg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Tm9kZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJz
cGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2
b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNUZXN0Tm9kZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE5vZGUgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlLmdldCgpOworICAgIHJldHVybiBX
ZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0Tm9kZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBl
OjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3ROb2RlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE5vZGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3ROb2RlID0gV1RG
TW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE5vZGU6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShy
ZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDE0IEBACiAjaW5j
bHVkZSAiSlNUZXN0T2JqLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJET01Qcm9taXNlUHJveHkuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRE
T01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJRExU
eXBlcy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgpAQCAtOTA2MiwzNiArOTA2MiwxMiBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0T2JqUHJvdG90CiAKIEpTQzo6R0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBKU1Rlc3RPYmo6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJz
cGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RPYmouZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsK
LQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBE
YXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNw
YWNlRm9yVGVzdE9iai5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9iaj4gfHwgIUpTVGVzdE9iajo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T2JqPikKLSAgICAgICAgICAgIHNwYWNlID0g
bmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNl
bGxIZWFwQ2VsbFR5cGUsIEpTVGVzdE9iaik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE9iaiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigi
dGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0T2JqOjp2aXNp
dE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25z
dHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFp
bnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEu
b3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1Nf
RU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xp
ZW50U3Vic3BhY2VGb3JUZXN0T2JqID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JUZXN0T2JqLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNU
ZXN0T2JqLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T2JqLmdldCgp
OyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0T2JqID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdE9iai5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdE9iaiA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJE
T01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNp
bmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVu
ZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCkBAIC0yMjksMzYgKzIyOSwxMiBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oanNUZXN0T3BlcmF0aW9uCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBK
U1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQog
ewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVu
dFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpKQotICAgICAg
ICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEu
aGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAg
ICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsPiB8fCAhSlNUZXN0T3BlcmF0aW9uQ29u
ZGl0aW9uYWw6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBD
ZWxsVHlwZSwgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IHN0ZDo6dW5pcXVlX3B0cjxJc29T
dWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2Rl
IikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAg
ICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90
VmlzaXRvciYpID0gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OnZpc2l0T3V0cHV0Q29uc3Ry
YWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxW
aXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJh
aW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZv
clRlc3RPcGVyYXRpb25Db25kaXRpb25hbCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOworICAgIHJldHVybiBXZWJDb3Jl
OjpzdWJzcGFjZUZvckltcGw8SlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwsIFVzZUN1c3RvbUhl
YXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBz
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPcGVyYXRpb25Db25kaXRpb25hbC5nZXQoKTsg
fSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2Ns
aWVudFN1YnNwYWNlRm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRP
TUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2lu
Y2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5k
ZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCkBAIC0zMDAsMzYgKzMw
MCwxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0T3ZlcmxvYWRlCiAKIEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVu
dFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNs
aWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAg
YXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tl
ciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vi
c3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+IHx8ICFKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpuZWVkc0Rlc3RydWN0
aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPikKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2Up
OwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNp
dE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigq
c3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFj
ZUZvckltcGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycywgVXNlQ3VzdG9tSGVhcENlbGxU
eXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRT
dWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gV1RGTW92ZShzcGFjZSk7IH0s
CisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBz
cGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCAr
MjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVu
dElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01J
c29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCkBAIC0y
MzcsMzYgKzIzNywxMiBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoanNUZXN0T3ZlcmxvYWRl
CiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhl
YXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U+IHx8ICFKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19T
VUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlKTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9X
QVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlW
aXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0g
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRD
b25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2Vs
bFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UgPSBtYWtlVW5pcXVlPEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpO
bz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9j
bGllbnRTdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlID0g
V1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Uu
Z2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFj
ZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlID0g
V1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5
emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3BwCShy
ZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2luY2x1ZGUgIkpTVGVzdFBsdWdpbkludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMjM5LDM2
ICsyMzksMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFBsdWdpbkludAogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNw
YWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVu
dFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UGx1Z2luSW50ZXJm
YWNlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFw
RGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERh
dGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsK
LSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVnaW5J
bnRlcmZhY2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0g
dm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U+IHx8ICFKU1Rlc3RQbHVn
aW5JbnRlcmZhY2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFBsdWdpbklu
dGVyZmFjZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BB
Q0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0
UGx1Z2luSW50ZXJmYWNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcg
SXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBl
LCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2UpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRl
c3RQbHVnaW5JbnRlcmZhY2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsK
LUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRP
dXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVz
dFBsdWdpbkludGVyZmFjZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9
IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0
dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZS5n
ZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFBsdWdpbklu
dGVyZmFjZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbklu
dGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFBsdWdpbkludGVyZmFjZSA9IFdURk1v
dmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMu
bV9zdWJzcGFjZUZvclRlc3RQbHVnaW5JbnRlcmZhY2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RQbHVn
aW5JbnRlcmZhY2UgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50LmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJKU1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkRPTVByb21pc2VQcm94eS5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTI5OCwzNiArMjk4LDEyIEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihqc1Rlc3RQcm9taXNlUmUKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNs
aWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnRE
YXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9Owot
Ci0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3Bh
Y2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
LmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0
aWJsZU9iamVjdCwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50PiB8fCAhSlNUZXN0UHJvbWlz
ZVJlamVjdGlvbkV2ZW50OjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUsIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KTsKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gc3RkOjp1bmlx
dWVfcHRyPElzb1N1YnNwYWNlPihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVh
Y2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFy
ZSIpCi0gICAgICAgIHZvaWQgKCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwq
LCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQgPSBtYWtlVW5pcXVlPEpTQzo6
R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuZ2V0KCk7CisgICAg
cmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFj
ZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQg
PSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4g
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmdldCgpOyB9LAor
ICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50ID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICAp
OwogfQogCiB2b2lkIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6YW5hbHl6ZUhlYXAoSlND
ZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5TWFwTGlrZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFJl
YWRPbmx5TWFwTGlrZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZWFkT25seU1hcExpa2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0UmVhZE9ubHlNYXBMaWtl
LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNv
U3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgpAQCAtMzAwLDM2ICszMDAsMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFJl
YWRPbmx5TQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVhZE9ubHlNYXBM
aWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1
dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYg
KGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
UmVhZE9ubHlNYXBMaWtlLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAg
ICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9j
a2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5z
dWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBI
ZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RSZWFkT25seU1hcExpa2U+IHx8
ICFKU1Rlc3RSZWFkT25seU1hcExpa2U6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFJlYWRPbmx5TWFwTGlrZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFj
ZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZSwgSlNUZXN0UmVhZE9ubHlNYXBMaWtlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxs
SGVhcENlbGxUeXBlLCBKU1Rlc3RSZWFkT25seU1hcExpa2UpOwotICAgICAgICBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3Bh
Y2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1J
R05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9p
ZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBK
U0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsK
LSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0
Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMo
KS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VO
RAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRP
bmx5TWFwTGlrZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRP
bmx5TWFwTGlrZS5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpT
VGVzdFJlYWRPbmx5TWFwTGlrZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFJlYWRPbmx5TWFwTGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywg
YXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlYWRPbmx5TWFw
TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZWFkT25seU1hcExpa2UuZ2V0KCk7IH0sCisg
ICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RSZWFkT25seU1hcExpa2UgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAK
IHZvaWQgSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UmVhZE9ubHlTZXRMaWtl
LmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFJlYWRPbmx5U2V0TGlrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDggKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RSZWFkT25seVNldExpa2UuaCIKIAogI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5o
IgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xp
ZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIK
ICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0yNzksMzYg
KzI3OSwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0UmVhZE9ubHlTCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RSZWFkT25seVNldExpa2U6OnN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3Bh
Y2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50
U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RSZWFkT25seVNldExp
a2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5
U2V0TGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlYWRPbmx5U2V0TGlrZT4gfHwgIUpTVGVzdFJlYWRP
bmx5U2V0TGlrZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0UmVhZE9ubHlT
ZXRMaWtlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RS
ZWFkT25seVNldExpa2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUs
IEpTVGVzdFJlYWRPbmx5U2V0TGlrZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFJlYWRPbmx5U2V0TGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
UmVhZE9ubHlTZXRMaWtlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0g
bWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1
cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlLmdl
dCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0UmVhZE9ubHlT
ZXRMaWtlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlT
ZXRMaWtlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2Up
IHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0UmVhZE9ubHlTZXRMaWtlID0gV1RGTW92
ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFJlYWRPbmx5U2V0TGlrZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFJlYWRP
bmx5U2V0TGlrZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RS
ZWFkT25seVNldExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Qu
Y3BwCShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5o
IgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNv
U3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1
YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgpAQCAtMTY2LDM2ICsxNjYsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpz
VGVzdFJlcG9ydEV4dAogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0
byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERh
dGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2Vz
KCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0LmdldCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEo
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBz
cGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7Ci0gICAg
aWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBK
U1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q+IHx8ICFKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3Q6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFz
ZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdD4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBu
ZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxU
eXBlLCBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vi
c3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIp
Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAg
dm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZp
c2l0b3ImKSA9IEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZp
c2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFp
bnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dB
Uk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9y
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCwgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdC5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X2NsaWVudFN1YnNwYWNlRm9yVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCA9IFdURk1vdmUoc3Bh
Y2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3QgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9N
Q2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMu
aCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zNDQsMzYgKzM0NCwxMiBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oanNUZXN0U2VyaWFsaXplCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNw
YWNlKiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0g
Y2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2Ug
PSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1
dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIg
eyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNw
YWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7
Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gfHwgIUpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91
dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwot
ICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRw
dXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNl
cygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpOworICAgIHJl
dHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1
dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNl
cywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVmlzaXRvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZS5jcHAJKHJldmlzaW9uIDI5
MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXRMaWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpT
VGVzdFNldExpa2UuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUg
IkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0
ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCkBAIC0zMzcsMzYgKzMzNywxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oanNUZXN0U2V0TGlrZVByCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RT
ZXRMaWtlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAg
IGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAg
aWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JU
ZXN0U2V0TGlrZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0
byYgaGVhcERhdGEgPSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7
IGhlYXBEYXRhLmxvY2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3Bh
Y2VzKCk7Ci0gICAgSXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0
U2V0TGlrZS5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2
bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2U+IHx8ICFKU1Rlc3RTZXRMaWtlOjpuZWVk
c0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlPikKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTZXRMaWtlKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTZXRMaWtlKTsKLSAgICAgICAgc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZSA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4o
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9S
RV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgq
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYp
ID0gSlNUZXN0U2V0TGlrZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAo
KmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYg
KG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkK
LSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3Bh
Y2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQot
ICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UgPSBtYWtlVW5p
cXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGll
bnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtlLmdldCgpOworICAgIHJldHVy
biBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0U2V0TGlrZSwgVXNlQ3VzdG9tSGVhcENl
bGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNl
cy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7IH0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRl
c3RTZXRMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMp
IHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2UuZ2V0KCk7IH0sCisgICAg
ICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZv
clRlc3RTZXRMaWtlID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lkIEpTVGVz
dFNldExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2V0TGlrZVdpdGhPdmVycmlk
ZGVuT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVz
dFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCkBAIC0zNDksMzYgKzM0OSwxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
anNUZXN0U2V0TGlrZVdpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTZXRM
aWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
CiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xp
ZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9ucy5n
ZXQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEg
PSBjbGllbnREYXRhLmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxv
Y2soKSB9OwotCi0gICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAg
SXNvU3Vic3BhY2UqIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhP
dmVycmlkZGVuT3BlcmF0aW9ucy5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhl
YXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRl
bk9wZXJhdGlvbnM+IHx8ICFKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zOjpu
ZWVkc0Rlc3RydWN0aW9uKTsKLSAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2Zf
djxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5P
cGVyYXRpb25zPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25z
KTsKLSAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVu
T3BlcmF0aW9ucyA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENv
bnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U2V0TGlr
ZVdpdGhPdmVycmlkZGVuT3BlcmF0aW9uczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAg
ICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAg
ICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29u
c3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAot
ICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMgPSBtYWtlVW5pcXVlPEpTQzo6R0NDbGllbnQ6Oklzb1N1
YnNwYWNlPigqc3BhY2UpOwotICAgIHJldHVybiBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvclRlc3RTZXRMaWtlV2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zLmdldCgpOworICAgIHJldHVy
biBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0U2V0TGlrZVdpdGhPdmVycmlkZGVuT3Bl
cmF0aW9ucywgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRv
JiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTZXRMaWtl
V2l0aE92ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFNldExpa2VX
aXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnMuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFj
ZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTZXRMaWtlV2l0aE92
ZXJyaWRkZW5PcGVyYXRpb25zID0gV1RGTW92ZShzcGFjZSk7IH0KKyAgICApOwogfQogCiB2b2lk
IEpTVGVzdFNldExpa2VXaXRoT3ZlcnJpZGRlbk9wZXJhdGlvbnM6OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyLmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
OCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyLmgiCiAKICNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElz
b1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0xODcsMzYg
KzE4NywxMiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpT
Qzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllcjo6c3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMg
PSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFj
ZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdldCgp
KQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNs
aWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygp
IH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29T
dWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllci5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyPiB8fCAhSlNUZXN0U3RyaW5naWZpZXI6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyPikKLSAgICAgICAgICAgIHNw
YWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllcik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXIpOwotICAgICAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllciA9IHN0ZDo6dW5pcXVlX3B0cjxJ
c29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1j
b2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQotICAg
ICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpT
bG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXI6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllciA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFj
ZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0
U3RyaW5naWZpZXIsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllci5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyID0gV1RGTW92ZShz
cGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXIg
PSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXI6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ckFub255bW91c09wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
LmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNs
dWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0xODcsMzYgKzE4NywxMiBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGllbnQ6Oklzb1N1YnNwYWNl
KiBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6c3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRTcGFjZXMgPSBjbGll
bnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGllbnRTcGFjZSA9IGNs
aWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBo
ZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVh
cERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMo
KTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5nZXQoKTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAg
ICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uPiB8fCAhSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246
Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9v
Zl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uPikKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJT
UEFDRV9JTklUKGhlYXAsIGhlYXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAu
Y2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24pOwot
ICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1
dG9sb2dpY2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFp
bnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb246OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQg
KCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlm
IChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQp
Ci0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNw
YWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0K
LSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpz
cGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmdldCgpOworICAgIHJldHVybiBXZWJDb3JlOjpz
dWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24sIFVzZUN1
c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJl
dHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsg
cmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0
aW9uLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24gPSBX
VEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb246OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBh
bmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkRPTUNsaWVudElzb1N1YnNwYWNlcy5oIgotI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RXh0ZW5kZWRET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpT
RE9NQ29udmVydFN0cmluZ3MuaCIKQEAgLTIwNCwzNiArMjA0LDEyIEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2Uq
IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmdl
dCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9
IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9j
aygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJ
c29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVh
cCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj4g
fHwgIUpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246Om5lZWRzRGVzdHJ1Y3Rpb24pOwot
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGli
bGVPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+KQotICAgICAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24pOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihz
cGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpt
eVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikg
PSBKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjp2aXNpdE91dHB1dENvbnN0cmFpbnRz
OwotICAgICAgICB2b2lkICgqanNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzOwotICAgICAgICBpZiAobXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRP
dXRwdXRDb25zdHJhaW50KQotICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNw
YWNlcygpLmFwcGVuZChzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklO
R1NfRU5ECi0gICAgfQotCi0gICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNw
YWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uZ2V0KCk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLCBV
c2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbi5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNl
KSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24gPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1
cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5nZXQo
KTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5t
X3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24gPSBXVEZNb3ZlKHNwYWNl
KTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBcy5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCkBAIC0yMDQsMzYgKzIwNCwxMiBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oanNUZXN0U3RyaW5naWZpCiAKIEpTQzo6R0NDbGll
bnQ6Oklzb1N1YnNwYWNlKiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6
OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0g
KnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYg
Y2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0
byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQo
KTsKLSAgICBpZiAoIXNwYWNlKSB7Ci0gICAgICAgIEhlYXAmIGhlYXAgPSB2bS5oZWFwOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz4gfHwgIUpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6bmVlZHNEZXN0cnVjdGlvbik7Ci0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdCwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPikKLSAgICAg
ICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhl
YXAuZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzcGFjZSA9IG5l
dyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmNlbGxIZWFwQ2VsbFR5
cGUsIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyk7Ci0gICAgICAgIHNw
YWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9
IHN0ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JF
R0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dp
Y2FsLWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICB2b2lkICgq
anNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKSA9IEpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzOwotICAgICAgICBpZiAo
bXlWaXNpdE91dHB1dENvbnN0cmFpbnQgIT0ganNDZWxsVmlzaXRPdXRwdXRDb25zdHJhaW50KQot
ICAgICAgICAgICAgaGVhcERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfRU5ECi1JR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfQotCi0g
ICAgY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4o
KnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOworICAgIHJldHVybiBXZWJD
b3JlOjpzdWJzcGFjZUZvckltcGw8SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzLCBVc2VDdXN0b21IZWFwQ2VsbFR5cGU6Ok5vPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2Vz
LCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzID0gV1RGTW92ZShzcGFjZSk7IH0sCisgICAgICAgIFtd
IChhdXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcyA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3Bw
CShyZXZpc2lvbiAyOTAxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0j
aW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVk
ZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgpAQCAtMTg3LDM2ICsxODcsMTIgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZSogSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpzdWJzcGFjZUZv
ckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNsaWVudFNwYWNl
cyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIGNsaWVudFNw
YWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nLmdldCgpKQotICAgICAgICByZXR1cm4gY2xpZW50U3BhY2U7Ci0K
LSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVhcERhdGEoKTsKLSAgICBMb2NrZXIg
bG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBhdXRvJiBzcGFjZXMgPSBoZWFwRGF0
YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFj
ZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuZ2V0KCk7Ci0gICAgaWYg
KCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+IHx8ICFKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpT
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz4pCi0gICAgICAgICAgICBzcGFj
ZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3Bh
Y2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcpOwotICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZzo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6
OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRw
dXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAg
IGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JF
X1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNw
YWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZyA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0g
ICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZy5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3Bh
Y2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZywgVXNlQ3Vz
dG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0
dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZy5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNw
YWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZyA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmcuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8m
JiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcgPSBXVEZNb3ZlKHNwYWNlKTsgfQorICAgICk7CiB9CiAKIHZvaWQgSlNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAyOTAxOTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAK
ICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmgiCiAKICNpbmNs
dWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKLSNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNs
aWVudElzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgi
CiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMjAzLDM2
ICsyMDMsMTIgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzVGVzdFN0cmluZ2lmaQogCiBK
U0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERh
dGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBh
dXRvJiBjbGllbnRTcGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlm
IChhdXRvKiBjbGllbnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGll
bnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwot
ICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNl
cyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPiB8fCAhSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4pCi0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJ
c29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFD
RV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNl
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15Vmlz
aXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7
Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxs
KiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWlu
dHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0NlbGxWaXNpdE91
dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25zdHJhaW50U3Bh
Y2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5H
U19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5nZXQoKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBh
dXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAoYXV0byYg
c3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYg
c3BhY2UpIHsgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFs
eXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRl
ICJKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTIyMiwzNiArMjIyLDEy
IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rlc3RTdHJpbmdpZmkKIAogSlNDOjpHQ0Ns
aWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIGNs
aWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8q
IGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFj
ZTsKLQotICAgIGF1dG8mIGhlYXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExv
Y2tlciBsb2NrZXIgeyBoZWFwRGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhl
YXBEYXRhLnN1YnNwYWNlcygpOwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+IHx8ICFKU1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZTo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+KQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNv
U3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNF
X0lOSVQoaGVhcCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZSk7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNlPihzcGFj
ZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQgKCpteVZp
c2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBK
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
czsKLSAgICAgICAgdm9pZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJh
aW50czsKLSAgICAgICAgaWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0
T3V0cHV0Q29uc3RyYWludCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRT
cGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5J
TkdTX0VORAotICAgIH0KLQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50
OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50
U3Vic3BhY2VGb3JUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7CisgICAg
cmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZSwgVXNlQ3VzdG9tSGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChh
dXRvJiBzcGFjZXMpIHsgcmV0dXJuIHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3Bh
Y2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGUuZ2V0KCk7IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMs
IGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZSA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAogdm9pZCBKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUYWdnZWRXcmFwcGVy
LmNwcAkocmV2aXNpb24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFRhZ2dlZFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4
ICsyMiw4IEBACiAjaW5jbHVkZSAiSlNUZXN0VGFnZ2VkV3JhcHBlci5oIgogCiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0j
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJ
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgpAQCAtMTY1
LDM2ICsxNjUsMTIgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGpzVGVzdFRhZ2dlZFdyYQog
CiBKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZSogSlNUZXN0VGFnZ2VkV3JhcHBlcjo6c3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQogewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBjbGllbnRT
cGFjZXMgPSBjbGllbnREYXRhLmNsaWVudFN1YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBjbGll
bnRTcGFjZSA9IGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBw
ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhlYXBE
YXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFwRGF0
YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygpOwot
ICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdy
YXBwZXIuZ2V0KCk7Ci0gICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0u
aGVhcDsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RUYWdnZWRXcmFwcGVyPiB8fCAhSlNUZXN0VGFnZ2VkV3Jh
cHBlcjo6bmVlZHNEZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19i
YXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0VGFnZ2VkV3JhcHBlcj4p
Ci0gICAgICAgICAgICBzcGFjZSA9IG5ldyBJc29TdWJzcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBoZWFwLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSwgSlNUZXN0VGFnZ2VkV3Jh
cHBlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNwYWNlID0gbmV3IElzb1N1YnNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXAuY2VsbEhlYXBDZWxsVHlwZSwgSlNUZXN0VGFn
Z2VkV3JhcHBlcik7Ci0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFRhZ2dlZFdyYXBw
ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5H
U19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRv
bG9naWNhbC1jb21wYXJlIikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50
KShKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTVGVzdFRhZ2dlZFdyYXBwZXI6
OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1
dENvbnN0cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0Nl
bGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29u
c3RyYWludCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFw
RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJO
SU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMu
bV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyID0gbWFrZVVuaXF1ZTxKU0M6OkdD
Q2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1f
Y2xpZW50U3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlci5nZXQoKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6c3Vic3BhY2VGb3JJbXBsPEpTVGVzdFRhZ2dlZFdyYXBwZXIsIFVzZUN1c3RvbUhlYXBD
ZWxsVHlwZTo6Tm8+KHZtLAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFwcGVyLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RUYWdnZWRXcmFw
cGVyLmdldCgpOyB9LAorICAgICAgICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VGFnZ2VkV3JhcHBlciA9IFdURk1vdmUoc3BhY2UpOyB9
CisgICAgKTsKIH0KIAogdm9pZCBKU1Rlc3RUYWdnZWRXcmFwcGVyOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5j
cHAJKHJldmlzaW9uIDI5MDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDgg
QEAKICNpbmNsdWRlICJKU1Rlc3RUeXBlZGVmcy5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIklETFR5
cGVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKQEAgLTc3NSwzNiArNzc1LDEyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihqc1Rl
c3RUeXBlZGVmc1AKIAogSlNDOjpHQ0NsaWVudDo6SXNvU3Vic3BhY2UqIEpTVGVzdFR5cGVkZWZz
OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCiB7Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9
ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8m
IGNsaWVudFNwYWNlcyA9IGNsaWVudERhdGEuY2xpZW50U3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1
dG8qIGNsaWVudFNwYWNlID0gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlw
ZWRlZnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBjbGllbnRTcGFjZTsKLQotICAgIGF1dG8mIGhl
YXBEYXRhID0gY2xpZW50RGF0YS5oZWFwRGF0YSgpOwotICAgIExvY2tlciBsb2NrZXIgeyBoZWFw
RGF0YS5sb2NrKCkgfTsKLQotICAgIGF1dG8mIHNwYWNlcyA9IGhlYXBEYXRhLnN1YnNwYWNlcygp
OwotICAgIElzb1N1YnNwYWNlKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVk
ZWZzLmdldCgpOwotICAgIGlmICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhl
YXA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCwgSlNUZXN0VHlwZWRlZnM+IHx8ICFKU1Rlc3RUeXBlZGVmczo6bmVlZHNE
ZXN0cnVjdGlvbik7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0VHlwZWRlZnM+KQotICAgICAgICAgICAgc3Bh
Y2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcC5kZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUsIEpTVGVzdFR5cGVkZWZzKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVh
cCwgaGVhcC5jZWxsSGVhcENlbGxUeXBlLCBKU1Rlc3RUeXBlZGVmcyk7Ci0gICAgICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gc3RkOjp1bmlxdWVfcHRyPElzb1N1YnNwYWNl
PihzcGFjZSk7Ci1JR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgICAgIHZvaWQg
KCpteVZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikgPSBKU1Rlc3RUeXBlZGVmczo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAgdm9p
ZCAoKmpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWludCkoSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RW
aXNpdG9yJikgPSBKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50czsKLSAgICAgICAg
aWYgKG15VmlzaXRPdXRwdXRDb25zdHJhaW50ICE9IGpzQ2VsbFZpc2l0T3V0cHV0Q29uc3RyYWlu
dCkKLSAgICAgICAgICAgIGhlYXBEYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0K
LQotICAgIGNsaWVudFNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzID0gbWFr
ZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJzcGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4g
Y2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7CisgICAg
cmV0dXJuIFdlYkNvcmU6OnN1YnNwYWNlRm9ySW1wbDxKU1Rlc3RUeXBlZGVmcywgVXNlQ3VzdG9t
SGVhcENlbGxUeXBlOjpObz4odm0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMpIHsgcmV0dXJu
IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yVGVzdFR5cGVkZWZzLmdldCgpOyB9LAorICAgICAg
ICBbXSAoYXV0byYgc3BhY2VzLCBhdXRvJiYgc3BhY2UpIHsgc3BhY2VzLm1fY2xpZW50U3Vic3Bh
Y2VGb3JUZXN0VHlwZWRlZnMgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8m
IHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0VHlwZWRlZnMuZ2V0KCk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9z
dWJzcGFjZUZvclRlc3RUeXBlZGVmcyA9IFdURk1vdmUoc3BhY2UpOyB9CisgICAgKTsKIH0KIAog
dm9pZCBKU1Rlc3RUeXBlZGVmczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcAkocmV2aXNp
b24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
V29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAj
aW5jbHVkZSAiSlNXb3JrZXJHbG9iYWxTY29wZS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRE9NQ2xpZW50SXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRET01DbGllbnRJc29TdWJzcGFjZXMu
aCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUlzb1N1YnNwYWNlcy5oIgogI2luY2x1ZGUgIkpTRE9N
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTI0NiwzMiArMjQ2LDEzIEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihqc1dvcmtlckdsb2JhbFMKIAogSlNDOjpHQ0NsaWVudDo6SXNv
U3Vic3BhY2UqIEpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2
bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0YS5j
bGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRTcGFj
ZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpKQotICAgICAgICBy
ZXR1cm4gY2xpZW50U3BhY2U7Ci0KLSAgICBhdXRvJiBoZWFwRGF0YSA9IGNsaWVudERhdGEuaGVh
cERhdGEoKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgaGVhcERhdGEubG9jaygpIH07Ci0KLSAgICBh
dXRvJiBzcGFjZXMgPSBoZWFwRGF0YS5zdWJzcGFjZXMoKTsKLSAgICBJc29TdWJzcGFjZSogc3Bh
Y2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpOwotICAgIGlm
ICghc3BhY2UpIHsKLSAgICAgICAgSGVhcCYgaGVhcCA9IHZtLmhlYXA7Ci0gICAgICAgIHNwYWNl
ID0gbmV3IElzb1N1YnNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBEYXRhLm1faGVh
cENlbGxUeXBlRm9ySlNXb3JrZXJHbG9iYWxTY29wZSwgSlNXb3JrZXJHbG9iYWxTY29wZSk7Ci0g
ICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUgPSBzdGQ6OnVuaXF1
ZV9wdHI8SXNvU3Vic3BhY2U+KHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFj
aGFibGUtY29kZSIpCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJl
IikKLSAgICAgICAgdm9pZCAoKm15VmlzaXRPdXRwdXRDb25zdHJhaW50KShKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKSA9IEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29u
c3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWludCAhPSBqc0Nl
bGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5vdXRwdXRDb25z
dHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9S
RV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvcldvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxKU0M6OkdDQ2xpZW50OjpJc29TdWJz
cGFjZT4oKnNwYWNlKTsKLSAgICByZXR1cm4gY2xpZW50U3BhY2VzLm1fY2xpZW50U3Vic3BhY2VG
b3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6c3Vic3BhY2VG
b3JJbXBsPEpTV29ya2VyR2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxsVHlwZTo6WWVzPih2
bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2VzLm1fY2xpZW50U3Vi
c3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNw
YWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX2NsaWVudFN1YnNwYWNlRm9yV29ya2VyR2xv
YmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykg
eyByZXR1cm4gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsgfSwK
KyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7IHNwYWNlcy5tX3N1YnNw
YWNlRm9yV29ya2VyR2xvYmFsU2NvcGUgPSBXVEZNb3ZlKHNwYWNlKTsgfSwKKyAgICAgICAgW10g
KGF1dG8mIHNlcnZlcikgLT4gSlNDOjpIZWFwQ2VsbFR5cGUmIHsgcmV0dXJuIHNlcnZlci5tX2hl
YXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2NvcGU7IH0KKyAgICApOwogfQogCiB2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcAkocmV2aXNp
b24gMjkwMTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
V29ya2xldEdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAog
I2luY2x1ZGUgIkpTV29ya2xldEdsb2JhbFNjb3BlLmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJET01DbGllbnRJc29TdWJzcGFjZXMuaCIKLSNpbmNsdWRlICJE
T01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJFeHRlbmRlZERPTUNsaWVudElzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkV4dGVuZGVkRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiSlNE
T01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMTYwLDMyICsxNjAsMTMgQEAgSlND
X0RFRklORV9DVVNUT01fR0VUVEVSKGpzV29ya2xldEdsb2JhbAogCiBKU0M6OkdDQ2xpZW50OjpJ
c29TdWJzcGFjZSogSlNXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSkKIHsKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgY2xpZW50U3BhY2VzID0gY2xpZW50RGF0
YS5jbGllbnRTdWJzcGFjZXMoKTsKLSAgICBpZiAoYXV0byogY2xpZW50U3BhY2UgPSBjbGllbnRT
cGFjZXMubV9jbGllbnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNsaWVudFNwYWNlOwotCi0gICAgYXV0byYgaGVhcERhdGEgPSBjbGllbnREYXRh
LmhlYXBEYXRhKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGhlYXBEYXRhLmxvY2soKSB9OwotCi0g
ICAgYXV0byYgc3BhY2VzID0gaGVhcERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgSXNvU3Vic3BhY2Uq
IHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7Ci0g
ICAgaWYgKCFzcGFjZSkgewotICAgICAgICBIZWFwJiBoZWFwID0gdm0uaGVhcDsKLSAgICAgICAg
c3BhY2UgPSBuZXcgSXNvU3Vic3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcERhdGEu
bV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZSwgSlNXb3JrbGV0R2xvYmFsU2Nv
cGUpOwotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IHN0
ZDo6dW5pcXVlX3B0cjxJc29TdWJzcGFjZT4oc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ1bnJlYWNoYWJsZS1jb2RlIikKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2Fs
LWNvbXBhcmUiKQotICAgICAgICB2b2lkICgqbXlWaXNpdE91dHB1dENvbnN0cmFpbnQpKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNXb3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0
T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIHZvaWQgKCpqc0NlbGxWaXNpdE91dHB1dENvbnN0
cmFpbnQpKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpID0gSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHM7Ci0gICAgICAgIGlmIChteVZpc2l0T3V0cHV0Q29uc3RyYWlu
dCAhPSBqc0NlbGxWaXNpdE91dHB1dENvbnN0cmFpbnQpCi0gICAgICAgICAgICBoZWFwRGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19F
TkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAgICB9Ci0KLSAgICBjbGllbnRTcGFjZXMubV9jbGll
bnRTdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SlNDOjpHQ0NsaWVu
dDo6SXNvU3Vic3BhY2U+KCpzcGFjZSk7Ci0gICAgcmV0dXJuIGNsaWVudFNwYWNlcy5tX2NsaWVu
dFN1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOworICAgIHJldHVybiBXZWJDb3Jl
OjpzdWJzcGFjZUZvckltcGw8SlNXb3JrbGV0R2xvYmFsU2NvcGUsIFVzZUN1c3RvbUhlYXBDZWxs
VHlwZTo6WWVzPih2bSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcykgeyByZXR1cm4gc3BhY2Vz
Lm1fY2xpZW50U3Vic3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUuZ2V0KCk7IH0sCisgICAgICAg
IFtdIChhdXRvJiBzcGFjZXMsIGF1dG8mJiBzcGFjZSkgeyBzcGFjZXMubV9jbGllbnRTdWJzcGFj
ZUZvcldvcmtsZXRHbG9iYWxTY29wZSA9IFdURk1vdmUoc3BhY2UpOyB9LAorICAgICAgICBbXSAo
YXV0byYgc3BhY2VzKSB7IHJldHVybiBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxT
Y29wZS5nZXQoKTsgfSwKKyAgICAgICAgW10gKGF1dG8mIHNwYWNlcywgYXV0byYmIHNwYWNlKSB7
IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlID0gV1RGTW92ZShzcGFjZSk7
IH0sCisgICAgICAgIFtdIChhdXRvJiBzZXJ2ZXIpIC0+IEpTQzo6SGVhcENlbGxUeXBlJiB7IHJl
dHVybiBzZXJ2ZXIubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtsZXRHbG9iYWxTY29wZTsgfQorICAg
ICk7CiB9CiAKIHZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
</data>
<flag name="commit-queue"
          id="479731"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>