<?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>223529</bug_id>
          
          <creation_ts>2021-03-19 11:43:28 -0700</creation_ts>
          <short_desc>Avoid heap allocation under AudioNodeInput::disable() / AudioNodeInput::enable()</short_desc>
          <delta_ts>2021-04-28 17:05:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</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=223226</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>225174</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1741816</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 11:43:28 -0700</bug_when>
    <thetext>Avoid heap allocation under AudioNodeInput::disable() / AudioNodeInput::enable():

Thread 10 Crashed:: offline renderer
0   com.apple.JavaScriptCore            0x0000000177be026e WTFCrash + 14 (Assertions.cpp:295)
1   com.apple.JavaScriptCore            0x0000000179382cfb WTFCrashWithInfo(int, char const*, char const*, int) + 27 (Assertions.h:671)
2   com.apple.JavaScriptCore            0x0000000177c1d9ab WTF::fastMalloc(unsigned long) + 235 (FastMalloc.cpp:524)
3   com.apple.JavaScriptCore            0x0000000177c1d895 WTF::fastZeroedMalloc(unsigned long) + 21 (FastMalloc.cpp:114)
4   com.apple.WebCore                   0x0000000158917e85 WTF::FastMalloc::zeroedMalloc(unsigned long) + 21 (FastMalloc.h:284)
5   com.apple.WebCore                   0x000000015ab37c53 WTF::HashTable&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::allocateTable(unsigned int) + 35 (HashTable.h:1215)
6   com.apple.WebCore                   0x000000015ab3795a WTF::HashTable&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::rehash(unsigned int, WebCore::AudioNodeOutput**) + 74 (HashTable.h:1327)
7   com.apple.WebCore                   0x000000015ab37358 WTF::HashTable&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::expand(WebCore::AudioNodeOutput**) + 120 (HashTable.h:1249)
8   com.apple.WebCore                   0x000000015ab522f3 WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt; &gt; WTF::HashTable&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::add&lt;WTF::IdentityHashTranslator&lt;WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt; &gt;, WebCore::AudioNodeOutput* const&amp;, WebCore::AudioNodeOutput* const&amp;&gt;(WebCore::AudioNodeOutput* const&amp;, WebCore::AudioNodeOutput* const&amp;) + 115 (HashTable.h:934)
9   com.apple.WebCore                   0x000000015ab5226a WTF::HashTable&lt;WebCore::AudioNodeOutput*, WebCore::AudioNodeOutput*, WTF::IdentityExtractor, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::add(WebCore::AudioNodeOutput* const&amp;) + 74 (HashTable.h:466)
10  com.apple.WebCore                   0x000000015ab3223b WTF::HashSet&lt;WebCore::AudioNodeOutput*, WTF::DefaultHash&lt;WebCore::AudioNodeOutput*&gt;, WTF::HashTraits&lt;WebCore::AudioNodeOutput*&gt; &gt;::add(WebCore::AudioNodeOutput* const&amp;) + 43 (HashSet.h:239)
11  com.apple.WebCore                   0x000000015ab3217a WebCore::AudioNodeInput::disable(WebCore::AudioNodeOutput*) + 298 (AudioNodeInput.cpp:97)
12  com.apple.WebCore                   0x000000015ab30eda WebCore::AudioNodeOutput::disable() + 346 (AudioNodeOutput.cpp:230)
13  com.apple.WebCore                   0x000000015ab30d62 WebCore::AudioNode::disableOutputs() + 98 (AudioNode.cpp:553)
14  com.apple.WebCore                   0x000000015ab30cf1 WebCore::AudioNode::disableOutputsIfNecessary() + 97 (AudioNode.cpp:545)
15  com.apple.WebCore                   0x000000015ab31228 WebCore::AudioNode::decrementConnectionCountWithLock() + 312 (AudioNode.cpp:616)
16  com.apple.WebCore                   0x000000015ab31014 WebCore::AudioNode::decrementConnectionCount() + 132 (AudioNode.cpp:587)
17  com.apple.WebCore                   0x000000015ab4f17e WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt;::derefIfNotNull(WebCore::AudioNode*) + 46 (AudioNode.h:284)
18  com.apple.WebCore                   0x000000015ab4f149 WTF::RefPtr&lt;WebCore::AudioNode, WTF::RawPtrTraits&lt;WebCore::AudioNode&gt;, WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt; &gt;::~RefPtr() + 41 (RefPtr.h:73)
19  com.apple.WebCore                   0x000000015ab4f115 WTF::RefPtr&lt;WebCore::AudioNode, WTF::RawPtrTraits&lt;WebCore::AudioNode&gt;, WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt; &gt;::~RefPtr() + 21 (RefPtr.h:73)
20  com.apple.WebCore                   0x000000015ab8c8d7 unsigned int WTF::Vector&lt;WTF::RefPtr&lt;WebCore::AudioNode, WTF::RawPtrTraits&lt;WebCore::AudioNode&gt;, WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt; &gt;, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;::removeAllMatching&lt;bool (WTF::RefPtr&lt;WebCore::AudioNode, WTF::RawPtrTraits&lt;WebCore::AudioNode&gt;, WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt; &gt; const&amp;)&gt;(bool  const(&amp;)(WTF::RefPtr&lt;WebCore::AudioNode, WTF::RawPtrTraits&lt;WebCore::AudioNode&gt;, WebCore::AudioNodeConnectionRefDerefTraits&lt;WebCore::AudioNode&gt; &gt; const&amp;), unsigned long) + 263 (Vector.h:1512)
21  com.apple.WebCore                   0x000000015ab89cf6 WebCore::BaseAudioContext::derefFinishedSourceNodes() + 278 (BaseAudioContext.cpp:586)
22  com.apple.WebCore                   0x000000015ab8d77c WebCore::BaseAudioContext::handlePostRenderTasks() + 156 (BaseAudioContext.cpp:734)
23  com.apple.WebCore                   0x000000015ab2ad00 WebCore::AudioDestinationNode::render(WebCore::AudioBus*, WebCore::AudioBus*, unsigned long, WebCore::AudioIOPosition const&amp;) + 576 (AudioDestinationNode.cpp:107)
24  com.apple.WebCore                   0x000000015abe66fd WebCore::OfflineAudioDestinationNode::offlineRender() + 877 (OfflineAudioDestinationNode.cpp:163)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741850</commentid>
    <comment_count>1</comment_count>
      <attachid>423762</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 12:56:56 -0700</bug_when>
    <thetext>Created attachment 423762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741868</commentid>
    <comment_count>2</comment_count>
      <attachid>423769</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 13:39:06 -0700</bug_when>
    <thetext>Created attachment 423769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741897</commentid>
    <comment_count>3</comment_count>
      <attachid>423769</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-03-19 14:30:36 -0700</bug_when>
    <thetext>Comment on attachment 423769
Patch

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

&gt; Source/WebCore/Modules/webaudio/AudioSummingJunction.cpp:135
&gt; +        m_pendingRenderingOutputs-&gt;updatedEnabledState(output);

Nit. Regarding &quot;m_pendingRenderingOutputs.&quot; and &quot;m_pendingRenderingOutputs-&gt;&quot;, I believe they are working. But they look strange at first glance. :-)

&gt; Source/WebCore/Modules/webaudio/AudioSummingJunction.h:69
&gt; +            bool operator==(AudioNodeOutput* other) const { return output == other; }

const AudioNodeOutput* other?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741904</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 14:44:01 -0700</bug_when>
    <thetext>(In reply to Peng Liu from comment #3)
&gt; Comment on attachment 423769 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423769&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/AudioSummingJunction.cpp:135
&gt; &gt; +        m_pendingRenderingOutputs-&gt;updatedEnabledState(output);
&gt; 
&gt; Nit. Regarding &quot;m_pendingRenderingOutputs.&quot; and
&gt; &quot;m_pendingRenderingOutputs-&gt;&quot;, I believe they are working. But they look
&gt; strange at first glance. :-)

What looks strange? It is an Optional&lt;&gt; now so I need to `-&gt;` instead of `.`

&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/AudioSummingJunction.h:69
&gt; &gt; +            bool operator==(AudioNodeOutput* other) const { return output == other; }
&gt; 
&gt; const AudioNodeOutput* other?

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741911</commentid>
    <comment_count>5</comment_count>
      <attachid>423769</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-03-19 14:52:43 -0700</bug_when>
    <thetext>Comment on attachment 423769
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webaudio/AudioSummingJunction.cpp:135
&gt;&gt;&gt; +        m_pendingRenderingOutputs-&gt;updatedEnabledState(output);
&gt;&gt; 
&gt;&gt; Nit. Regarding &quot;m_pendingRenderingOutputs.&quot; and &quot;m_pendingRenderingOutputs-&gt;&quot;, I believe they are working. But they look strange at first glance. :-)
&gt; 
&gt; What looks strange? It is an Optional&lt;&gt; now so I need to `-&gt;` instead of `.`

At first glance I was surprised by the &quot;m_pendingRenderingOutputs.&quot; in the &quot;if&quot; branch and &quot;m_pendingRenderingOutputs-&gt;&quot; in the &quot;else&quot; branch. But it is not an issue actually.
:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741939</commentid>
    <comment_count>6</comment_count>
      <attachid>423789</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 15:38:54 -0700</bug_when>
    <thetext>Created attachment 423789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742195</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-22 04:58:34 -0700</bug_when>
    <thetext>commit-queue failed to commit attachment 423789 to WebKit repository. To retry, please set cq+ flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742332</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-22 11:51:48 -0700</bug_when>
    <thetext>Committed r274767: &lt;https://commits.webkit.org/r274767&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 423789.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742333</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-22 11:52:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/75701704&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423762</attachid>
            <date>2021-03-19 12:56:56 -0700</date>
            <delta_ts>2021-03-19 13:39:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223529-20210319125655.patch</filename>
            <type>text/plain</type>
            <size>21844</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMzYmUxYzI0M2JlYzA2
MDFhNzIwYjA0ZTIxYmMyNWQ0YWRhYjFmYS4uMzcxZGIyMTUzZjlmMzNkOGQ5ZDg2NDkwODgzZjk3
NGZiNTE5MTMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIxLTAzLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGVhcCBhbGxvY2F0
aW9uIHVuZGVyIEF1ZGlvTm9kZUlucHV0OjpkaXNhYmxlKCkgLyBBdWRpb05vZGVJbnB1dDo6ZW5h
YmxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2
b2lkIGhlYXAgYWxsb2NhdGlvbiB1bmRlciBBdWRpb05vZGVJbnB1dDo6ZGlzYWJsZSgpIC8gQXVk
aW9Ob2RlSW5wdXQ6OmVuYWJsZSgpIHNpbmNlIHRob3NlIGNhbgorICAgICAgICBnZXQgY2FsbGVk
IG9uIHRoZSBhdWRpbyB0aHJlYWQuCisKKyAgICAgICAgQXVkaW9Ob2RlSW5wdXQgdXNlZCB0byBo
YXZlIGEgbV9kaXNhYmxlZE91dHB1dHMgY29udGFpbmVyIHRvIGtlZXAgZGlzYWJsZWQgb3V0cHV0
cyBzZXBhcmF0ZWQKKyAgICAgICAgZnJvbSBlbmFibGVkIG9uZXMgKGluIG1fb3V0cHV0cykuIElu
c3RlYWQsIHdlIG5vdyBzdG9yZSBhbGwgb3V0cHV0cyBpbiBtX291dHB1dHMgd2l0aCBhICdpc0Vu
YWJsZWQnCisgICAgICAgIGZsYWcuIEFzIGEgcmVzdWx0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBt
YWtlIGFueSBoZWFwIGFsbG9jYXRpb25zIHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGFuCisgICAg
ICAgIG91dHB1dCwgd2UgbWVyZWx5IG5lZWQgdG8gZmxpcCBhIGZsYWcgaW4gbV9vdXRwdXRzLgor
CisgICAgICAgIEZvciBjb252ZW5pZW5jZSwgc2luY2UgY2xpZW50cyBvZiByZW5kZXJpbmcgb3V0
cHV0cyBvbmx5IGNhcmUgYWJvdXQgZW5hYmxlZCBvdXRwdXRzLCBJIGludHJvZHVjZWQKKyAgICAg
ICAgYSBuZXcgUmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbiBjb250YWluZXIgd2l0aCBpdGVyYXRv
cnMuIFRoaXMgd2F5IGNsaWVudHMgZG8gbm90IG5lZWQgdG8gd29ycnkKKyAgICAgICAgYWJvdXQg
ZGlzYWJsZWQgb3V0cHV0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
SW5wdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZERpc2FibGVPdXRwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZEVuYWJsZU91dHB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb05vZGVJbnB1dDo6YnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZUlucHV0
OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVJbnB1dDo6
cHVsbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b05vZGVPdXRwdXQ6OmVuYWJsZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OmNhbGN1bGF0ZUZpbmFsVmFs
dWVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpudW1iZXJPZkNvbm5l
Y3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjph
ZGRPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbW92
ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1bW1pbmdKdW5jdGlvbjo6dXBkYXRl
UmVuZGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246
Om1heGltdW1OdW1iZXJPZkNoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U3VtbWluZ0p1bmN0aW9uOjpkaWREaXNhYmxlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpkaWRFbmFibGVPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRlcmlu
Z091dHB1dDo6UmVuZGVyaW5nT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmlu
Z091dHB1dENvbGxlY3Rpb246OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5k
ZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1
bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0
aW9uOjpDb25zdEl0ZXJhdG9yOjpDb25zdEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpDb25zdEl0ZXJh
dG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVu
Y3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9y
IT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rp
b246OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbmRlcmluZ091dHB1dHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OmlzQ29ubmVjdGVkIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb1Bhbm5lck5vZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nv
bm5lY3RlZFRvTm9kZSk6CisKIDIwMjEtMDMtMTkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgogCiAgICAgICAgIENTUCBoZWFkZXJzIGNhbiBibG9jayBkZWZhdWx0IDx2aWRlbz4g
Y29udHJvbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Ob2RlSW5wdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGVJbnB1dC5jcHAKaW5kZXggODkyMGQ5MTZiMTM0ZmUwNzU5Yjc1YmJkN2Y4NjY2MmZkMjgyMWNk
ZC4uMDIxYjZiZWVhNGQxMTdjZjIzNzYwZTA1Y2NiZWM0YzM1ZGIzNGY4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAKQEAgLTUz
LDEzICs1Myw3IEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQpCiAgICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBhZGRQb3RlbnRpYWxseURpc2FibGVkT3V0cHV0ID0gW3RoaXNdKEF1ZGlvTm9k
ZU91dHB1dCYgb3V0cHV0KSB7Ci0gICAgICAgIGlmIChvdXRwdXQuaXNFbmFibGVkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gYWRkT3V0cHV0KG91dHB1dCk7Ci0gICAgICAgIHJldHVybiBtX2Rpc2Fi
bGVkT3V0cHV0cy5hZGQoJm91dHB1dCkuaXNOZXdFbnRyeTsKLSAgICB9OwotCi0gICAgaWYgKGFk
ZFBvdGVudGlhbGx5RGlzYWJsZWRPdXRwdXQoKm91dHB1dCkpCisgICAgaWYgKGFkZE91dHB1dCgq
b3V0cHV0KSkKICAgICAgICAgb3V0cHV0LT5hZGRJbnB1dCh0aGlzKTsKIH0KIApAQCAtNzYsNDgg
KzcwLDIzIEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQpCiAgICAgICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7IC8vIE5vdGU6IGl0
J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHNpbmNlIHRoZSBu
b2RlIG1heSBiZSBkZWxldGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8v
IE90aGVyd2lzZSwgdHJ5IHRvIGRpc2Nvbm5lY3QgZnJvbSBkaXNhYmxlZCBjb25uZWN0aW9ucy4K
LSAgICBpZiAobV9kaXNhYmxlZE91dHB1dHMucmVtb3ZlKG91dHB1dCkpIHsKLSAgICAgICAgb3V0
cHV0LT5yZW1vdmVJbnB1dCh0aGlzKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJu
IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi0g
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
dm9pZCBBdWRpb05vZGVJbnB1dDo6ZGlzYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKK3Zv
aWQgQXVkaW9Ob2RlSW5wdXQ6Om91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQoQXVkaW9Ob2RlT3V0
cHV0JiBvdXRwdXQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQoKS5pc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXNhYmxlZE91dHB1dHMuYWRkKG91dHB1dCk7
Ci0gICAgYm9vbCB3YXNSZW1vdmVkID0gcmVtb3ZlT3V0cHV0KCpvdXRwdXQpOwotICAgIEFTU0VS
VF9VTlVTRUQod2FzUmVtb3ZlZCwgd2FzUmVtb3ZlZCk7CisgICAgQXVkaW9TdW1taW5nSnVuY3Rp
b246Om91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQob3V0cHV0KTsKIAogICAgIC8vIFByb3BhZ2F0
ZSBkaXNhYmxlZCBzdGF0ZSB0byBvdXRwdXRzLgotICAgIG5vZGUoKS0+ZGlzYWJsZU91dHB1dHNJ
Zk5lY2Vzc2FyeSgpOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0OjplbmFibGUoQXVkaW9Ob2Rl
T3V0cHV0KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS5pc0dyYXBoT3duZXIoKSk7
Ci0KLSAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5v
ZGUoKSkKKyAgICBBU1NFUlQobm9kZSgpKTsKKyAgICBpZiAoIW5vZGUoKSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpOwot
Ci0gICAgLy8gTW92ZSBvdXRwdXQgZnJvbSBkaXNhYmxlZCBsaXN0IHRvIGFjdGl2ZSBsaXN0Lgot
ICAgIGFkZE91dHB1dCgqb3V0cHV0KTsKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0
cHV0KTsKLQotICAgIC8vIFByb3BhZ2F0ZSBlbmFibGVkIHN0YXRlIHRvIG91dHB1dHMuCi0gICAg
bm9kZSgpLT5lbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAob3V0cHV0LmlzRW5h
YmxlZCgpKQorICAgICAgICBub2RlKCktPmVuYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSgpOworICAg
IGVsc2UKKyAgICAgICAgbm9kZSgpLT5kaXNhYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KCk7CiB9CiAK
IHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpZFVwZGF0ZSgpCkBAIC0xNTgsNyArMTI3LDcgQEAgQXVk
aW9CdXMqIEF1ZGlvTm9kZUlucHV0OjpidXMoKQogCiAgICAgLy8gSGFuZGxlIHNpbmdsZSBjb25u
ZWN0aW9uIHNwZWNpYWxseSB0byBhbGxvdyBmb3IgaW4tcGxhY2UgcHJvY2Vzc2luZy4KICAgICBp
ZiAobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID09IDEgJiYgbm9kZSgpLT5jaGFubmVs
Q291bnRNb2RlKCkgPT0gQ2hhbm5lbENvdW50TW9kZTo6TWF4KQotICAgICAgICByZXR1cm4gcmVu
ZGVyaW5nT3V0cHV0KDApLT5idXMoKTsKKyAgICAgICAgcmV0dXJuICgqcmVuZGVyaW5nT3V0cHV0
cygpLmJlZ2luKCkpLT5idXMoKTsKIAogICAgIC8vIE11bHRpcGxlIGNvbm5lY3Rpb25zIGNhc2Ug
b3IgY29tcGxleCBDaGFubmVsQ291bnRNb2RlIChvciBubyBjb25uZWN0aW9ucykuCiAgICAgcmV0
dXJuIGludGVybmFsU3VtbWluZ0J1cygpOwpAQCAtMTg2LDcgKzE1NSw3IEBAIHZvaWQgQXVkaW9O
b2RlSW5wdXQ6OnN1bUFsbENvbm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jCiAKICAgICBhdXRvIGludGVycHJldGF0aW9uID0gbm9kZSgpLT5jaGFubmVs
SW50ZXJwcmV0YXRpb24oKTsKIAotICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9yZW5kZXJpbmdP
dXRwdXRzKSB7CisgICAgZm9yIChhdXRvKiBvdXRwdXQgOiByZW5kZXJpbmdPdXRwdXRzKCkpIHsK
ICAgICAgICAgQVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20g
dGhpcyBvdXRwdXQuCkBAIC0yMDEsMTYgKzE3MCwxNyBAQCBBdWRpb0J1cyogQXVkaW9Ob2RlSW5w
dXQ6OnB1bGwoQXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7
CiAgICAgQVNTRVJUKGNvbnRleHQoKS5pc0F1ZGlvVGhyZWFkKCkpOwogCisgICAgYXV0byBudW1i
ZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zID0gdGhpcy0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0
aW9ucygpOwogICAgIC8vIEhhbmRsZSBzaW5nbGUgY29ubmVjdGlvbiBjYXNlLgotICAgIGlmIChu
dW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkgPT0gMSAmJiBub2RlKCktPmNoYW5uZWxDb3Vu
dE1vZGUoKSA9PSBDaGFubmVsQ291bnRNb2RlOjpNYXgpIHsKKyAgICBpZiAobnVtYmVyT2ZSZW5k
ZXJpbmdDb25uZWN0aW9ucyA9PSAxICYmIG5vZGUoKS0+Y2hhbm5lbENvdW50TW9kZSgpID09IENo
YW5uZWxDb3VudE1vZGU6Ok1heCkgewogICAgICAgICAvLyBUaGUgb3V0cHV0IHdpbGwgb3B0aW1p
emUgcHJvY2Vzc2luZyB1c2luZyBpblBsYWNlQnVzIGlmIGl0J3MgYWJsZS4KLSAgICAgICAgQXVk
aW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5yZW5kZXJpbmdPdXRwdXQoMCk7CisgICAgICAg
IEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gKnJlbmRlcmluZ091dHB1dHMoKS5iZWdpbigpOwog
ICAgICAgICByZXR1cm4gb3V0cHV0LT5wdWxsKGluUGxhY2VCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7
CiAgICAgfQogCiAgICAgQXVkaW9CdXMqIGludGVybmFsU3VtbWluZ0J1cyA9IHRoaXMtPmludGVy
bmFsU3VtbWluZ0J1cygpOwogCi0gICAgaWYgKCFudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25z
KCkpIHsKKyAgICBpZiAoIW51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMpIHsKICAgICAgICAg
Ly8gQXQgbGVhc3QsIGdlbmVyYXRlIHNpbGVuY2UgaWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byBh
bnl0aGluZy4KICAgICAgICAgLy8gRklYTUU6IGlmIHdlIHdhbnRlZCB0byBnZXQgZmFuY3ksIHdl
IGNvdWxkIHByb3BhZ2F0ZSBhICdzaWxlbnQgaGludCcgaGVyZSB0byBvcHRpbWl6ZSB0aGUgZG93
bnN0cmVhbSBncmFwaCBwcm9jZXNzaW5nLgogICAgICAgICBpbnRlcm5hbFN1bW1pbmdCdXMtPnpl
cm8oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlSW5wdXQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5w
dXQuaAppbmRleCAzODE3OGJkY2NmYmFhYjY0NTgyYTBjMmQ1MDYxNDkyNDM2NjNkMGJkLi40ZWM5
YjUzNmZmNDVhNmZkMjgwOGJjYmI0NjVhZjYyOTQzYzUzM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCkBAIC01NSwxMSArNTUsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOwogICAgIHZvaWQg
ZGlzY29ubmVjdChBdWRpb05vZGVPdXRwdXQqKTsKIAotICAgIC8vIGRpc2FibGUoKSB3aWxsIHRh
a2UgdGhlIG91dHB1dCBvdXQgb2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0IGFuZCBzZXQg
YXNpZGUgaW4gYSBkaXNhYmxlZCBsaXN0LgotICAgIC8vIGVuYWJsZSgpIHdpbGwgcHV0IHRoZSBv
dXRwdXQgYmFjayBpbnRvIHRoZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlzdC4KICAgICAvLyBNdXN0
IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGVuYWJs
ZShBdWRpb05vZGVPdXRwdXQqKTsKLSAgICB2b2lkIGRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0Kik7
CisgICAgdm9pZCBvdXRwdXRFbmFibGVkU3RhdGVDaGFuZ2VkKEF1ZGlvTm9kZU91dHB1dCYpIGZp
bmFsOwogCiAgICAgLy8gcHVsbCgpIHByb2Nlc3NlcyBhbGwgb2YgdGhlIEF1ZGlvTm9kZXMgY29u
bmVjdGVkIHRvIHVzLgogICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGNvbm5lY3Rpb25z
IGl0IHN1bXMgdGhlIHJlc3VsdCBpbnRvIGFuIGludGVybmFsIHN1bW1pbmcgYnVzLgpAQCAtODIs
MTEgKzc5LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBBdWRpb05vZGUqIG1fbm9kZTsKIAot
ICAgIC8vIG1fZGlzYWJsZWRPdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHdo
aWNoIGFyZSBkaXNhYmxlZCAod2lsbCBub3QgYmUgcHJvY2Vzc2VkKSBieSB0aGUgYXVkaW8gZ3Jh
cGggcmVuZGVyaW5nLgotICAgIC8vIEJ1dCwgZnJvbSBKYXZhU2NyaXB0J3MgcGVyc3BlY3RpdmUs
IHRoZXNlIG91dHB1dHMgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB1cy4KLSAgICAvLyBHZW5lcmFs
bHksIHRoZXNlIHJlcHJlc2VudCBkaXNhYmxlZCBjb25uZWN0aW9ucyBmcm9tICJub3RlcyIgd2hp
Y2ggaGF2ZSBmaW5pc2hlZCBwbGF5aW5nIGJ1dCBhcmUgbm90IHlldCBnYXJiYWdlIGNvbGxlY3Rl
ZC4KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fZGlzYWJsZWRPdXRwdXRzOwotCiAg
ICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KICAgICBBdWRpb0J1cyog
aW50ZXJuYWxTdW1taW5nQnVzKCk7CiAgICAgdm9pZCBzdW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1
cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKaW5kZXggYmEzYmM5
MTlmYWFiNzJiNzNlNTFhZWQzNzgyM2Y3MmM4MDYwNGI3ZS4uYTQwZWNlMzRkNGVmZTlmNDg5Mjkw
NDhjOTJiM2Y3NjkwMzIxZWU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcApAQCAtMjI1LDIyICsyMjUsMjQgQEAgdm9pZCBB
dWRpb05vZGVPdXRwdXQ6OmRpc2FibGUoKQogewogICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFw
aE93bmVyKCkpOwogCi0gICAgaWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
aW5wdXQgOiBtX2lucHV0cy5rZXlzKCkpCi0gICAgICAgICAgICBpbnB1dC0+ZGlzYWJsZSh0aGlz
KTsKLSAgICAgICAgbV9pc0VuYWJsZWQgPSBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFtX2lzRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICBm
b3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMua2V5cygpKQorICAgICAgICBpbnB1dC0+b3V0cHV0
RW5hYmxlZFN0YXRlQ2hhbmdlZCgqdGhpcyk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojpl
bmFibGUoKQogewogICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKCFtX2lzRW5hYmxlZCkgewotICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMu
a2V5cygpKQotICAgICAgICAgICAgaW5wdXQtPmVuYWJsZSh0aGlzKTsKLSAgICAgICAgbV9pc0Vu
YWJsZWQgPSB0cnVlOwotICAgIH0KKyAgICBpZiAobV9pc0VuYWJsZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faXNFbmFibGVkID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9p
bnB1dHMua2V5cygpKQorICAgICAgICBpbnB1dC0+b3V0cHV0RW5hYmxlZFN0YXRlQ2hhbmdlZCgq
dGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCmluZGV4IDhkZGQ4NmM2NDEzYTMxZDJhMTA5
NDM1MjYwM2IyMDk2MjJmNmFmZDYuLmZmNzkwNDk1MTQ5Yzc2YWNkZDAyN2NmZGU0OGEwNGQ4YjZi
ODIyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFt
LmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxW
YWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgQVNT
RVJUKG51bWJlck9mVmFsdWVzIDw9IEF1ZGlvVXRpbGl0aWVzOjpyZW5kZXJRdWFudHVtU2l6ZSk7
CiAgICAgbV9zdW1taW5nQnVzLT5zZXRDaGFubmVsTWVtb3J5KDAsIHZhbHVlcywgc2FtcGxlQWNj
dXJhdGUgPyBudW1iZXJPZlZhbHVlcyA6IDEpOwogCi0gICAgZm9yIChhdXRvJiBvdXRwdXQgOiBt
X3JlbmRlcmluZ091dHB1dHMpIHsKKyAgICBmb3IgKGF1dG8qIG91dHB1dCA6IHJlbmRlcmluZ091
dHB1dHMoKSkgewogICAgICAgICBBU1NFUlQob3V0cHV0KTsKIAogICAgICAgICAvLyBSZW5kZXIg
YXVkaW8gZnJvbSB0aGlzIG91dHB1dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5jcHAKaW5kZXggN2QxYTI3NGExYmI0
OTJmYWMyYjA4Y2UzZmY1NDAwMWEyMjJlMjI5ZS4uMTJjZGFiYTQ1MDdkYzIxNDcyMGY4Mjc0MDEx
NmU1OTBiMzAxZTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1N1bW1pbmdKdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5jcHAKQEAgLTYwLDEwICs2MCwxMyBAQCBib29s
IEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjphZGRPdXRwdXQoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQp
CiAgICAgaWYgKCFtX291dHB1dHMuYWRkKCZvdXRwdXQpLmlzTmV3RW50cnkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLmlzRW1wdHko
KSkKLSAgICAgICAgbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cyA9IGNvcHlUb1ZlY3RvcihtX291
dHB1dHMpOworICAgIGlmICghb3V0cHV0LmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAgICAgbV9wZW5k
aW5nUmVuZGVyaW5nT3V0cHV0cy5lbXBsYWNlKG1fb3V0cHV0cyk7CiAgICAgZWxzZQotICAgICAg
ICBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLmFwcGVuZCgmb3V0cHV0KTsKKyAgICAgICAgbV9w
ZW5kaW5nUmVuZGVyaW5nT3V0cHV0cy0+YXBwZW5kKG91dHB1dCk7CiAKICAgICBtYXJrUmVuZGVy
aW5nU3RhdGVBc0RpcnR5KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NSwxMCArNzgsMTUgQEAg
Ym9vbCBBdWRpb1N1bW1pbmdKdW5jdGlvbjo6cmVtb3ZlT3V0cHV0KEF1ZGlvTm9kZU91dHB1dCYg
b3V0cHV0KQogICAgIGlmICghbV9vdXRwdXRzLnJlbW92ZSgmb3V0cHV0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMuaXNFbXB0eSgp
KQotICAgICAgICBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzID0gY29weVRvVmVjdG9yKG1fb3V0
cHV0cyk7Ci0gICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLnJlbW92
ZUZpcnN0KCZvdXRwdXQpOworICAgIGlmICghb3V0cHV0LmlzRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAg
ICAgbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cy5lbXBsYWNlKG1fb3V0cHV0cyk7CisgICAgZWxz
ZSB7CisgICAgICAgIGJvb2wgd2FzUmVtb3ZlZCA9IG1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMt
PnJlbW92ZShvdXRwdXQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHdhc1JlbW92ZWQsIHdhc1Jl
bW92ZWQpOworICAgIH0KIAogICAgIG1hcmtSZW5kZXJpbmdTdGF0ZUFzRGlydHkoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTkwLDkgKzk4LDEzIEBAIHZvaWQgQXVkaW9TdW1taW5nSnVuY3Rpb246
OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKIAogICAgIGlmIChtX3JlbmRlcmluZ1N0YXRlTmVlZFVw
ZGF0aW5nICYmIGNhblVwZGF0ZVN0YXRlKCkpIHsKICAgICAgICAgLy8gQ29weSBmcm9tIG1fb3V0
cHV0cyB0byBtX3JlbmRlcmluZ091dHB1dHMuCi0gICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0cyA9
IHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cywgeyB9KTsKLSAgICAgICAg
Zm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMpCi0gICAgICAgICAgICBvdXRw
dXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgICAgIGlmICghbV9wZW5kaW5nUmVuZGVy
aW5nT3V0cHV0cykKKyAgICAgICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0cyA9IHsgfTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMgPSAqc3RkOjpleGNoYW5n
ZShtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAg
Zm9yIChhdXRvKiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMpCisgICAgICAgICAgICAgICAg
b3V0cHV0LT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOworICAgICAgICB9CiAKICAgICAgICAgZGlk
VXBkYXRlKCk7CiAKQEAgLTEwNCw2ICsxMTYsOSBAQCB1bnNpZ25lZCBBdWRpb1N1bW1pbmdKdW5j
dGlvbjo6bWF4aW11bU51bWJlck9mQ2hhbm5lbHMoKSBjb25zdAogewogICAgIHVuc2lnbmVkIG1h
eENoYW5uZWxzID0gMDsKICAgICBmb3IgKGF1dG8qIG91dHB1dCA6IG1fb3V0cHV0cykgeworICAg
ICAgICBpZiAoIW91dHB1dC0+aXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwog
ICAgICAgICAvLyBVc2Ugb3V0cHV0KCktPm51bWJlck9mQ2hhbm5lbHMoKSBpbnN0ZWFkIG9mIG91
dHB1dC0+YnVzKCktPm51bWJlck9mQ2hhbm5lbHMoKSwKICAgICAgICAgLy8gYmVjYXVzZSB0aGUg
Y2FsbGluZyBvZiBBdWRpb05vZGVPdXRwdXQ6OmJ1cygpIGlzIG5vdCBzYWZlIGhlcmUuCiAgICAg
ICAgIG1heENoYW5uZWxzID0gc3RkOjptYXgobWF4Q2hhbm5lbHMsIG91dHB1dC0+bnVtYmVyT2ZD
aGFubmVscygpKTsKQEAgLTExMSw2ICsxMjYsMzAgQEAgdW5zaWduZWQgQXVkaW9TdW1taW5nSnVu
Y3Rpb246Om1heGltdW1OdW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKICAgICByZXR1cm4gbWF4Q2hh
bm5lbHM7CiB9CiAKK3ZvaWQgQXVkaW9TdW1taW5nSnVuY3Rpb246Om91dHB1dEVuYWJsZWRTdGF0
ZUNoYW5nZWQoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQo
KS5pc0dyYXBoT3duZXIoKSk7CisgICAgaWYgKCFtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzKQor
ICAgICAgICBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLmVtcGxhY2UobV9vdXRwdXRzKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMtPnVwZGF0ZWRFbmFibGVk
U3RhdGUob3V0cHV0KTsKKyAgICBtYXJrUmVuZGVyaW5nU3RhdGVBc0RpcnR5KCk7Cit9CisKK2lu
bGluZSBBdWRpb1N1bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6UmVu
ZGVyaW5nT3V0cHV0OjpSZW5kZXJpbmdPdXRwdXQoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCisg
ICAgOiBvdXRwdXQob3V0cHV0KQorICAgICwgaXNFbmFibGVkKG91dHB1dC0+aXNFbmFibGVkKCkp
Cit7IH0KKwordm9pZCBXZWJDb3JlOjpBdWRpb1N1bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0
cHV0Q29sbGVjdGlvbjo6dXBkYXRlZEVuYWJsZWRTdGF0ZShBdWRpb05vZGVPdXRwdXQmIG91dHB1
dCkKK3sKKyAgICBhdXRvIGluZGV4ID0gbV9vdXRwdXRzLmZpbmQoJm91dHB1dCk7CisgICAgQVNT
RVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX291dHB1dHNbaW5kZXhdLmlzRW5hYmxlZCA9IG91dHB1dC5pc0Vu
YWJsZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TdW1taW5nSnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TdW1taW5nSnVuY3Rpb24uaAppbmRleCBhMTRiYTI2NDc5ZDAxODYwYjI3MjE0NDI5NzYy
YmM1YjAxMjVkNzllLi4wNTA0YTZhNzQyMDE5MDU1YjE0OWU5ODlkMjg2ODc4M2ViNzA3YWNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1
bmN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1p
bmdKdW5jdGlvbi5oCkBAIC00OCwxMSArNDgsNzUgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbXVz
dCBiZSBjYWxsZWQgd2hlbiB3ZSBvd24gdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIGluIHRoZSBh
dWRpbyB0aHJlYWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1
bS4KICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAKKyAgICBjbGFzcyBSZW5kZXJp
bmdPdXRwdXRDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlbmRlcmluZ091dHB1
dENvbGxlY3Rpb24oKSA9IGRlZmF1bHQ7CisgICAgICAgIFJlbmRlcmluZ091dHB1dENvbGxlY3Rp
b24oY29uc3QgSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPiYgb3V0cHV0cykKKyAgICAgICAgICAg
IDogbV9vdXRwdXRzKGNvcHlUb1ZlY3Rvck9mPFJlbmRlcmluZ091dHB1dD4ob3V0cHV0cykpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIGZvciAo
YXV0byBpdCA9IGJlZ2luKCksIGVuZCA9IHRoaXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQsICsr
cmVzdWx0KSB7IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGVuZChBdWRpb05vZGVPdXRwdXQmIG91dHB1dCkgeyBtX291dHB1dHMuYXBw
ZW5kKCZvdXRwdXQpOyB9CisgICAgICAgIGJvb2wgcmVtb3ZlKEF1ZGlvTm9kZU91dHB1dCYgb3V0
cHV0KSB7IHJldHVybiBtX291dHB1dHMucmVtb3ZlRmlyc3QoJm91dHB1dCk7IH0KKyAgICAgICAg
dm9pZCB1cGRhdGVkRW5hYmxlZFN0YXRlKEF1ZGlvTm9kZU91dHB1dCYpOworCisgICAgICAgIHN0
cnVjdCBSZW5kZXJpbmdPdXRwdXQgeworICAgICAgICAgICAgUmVuZGVyaW5nT3V0cHV0KEF1ZGlv
Tm9kZU91dHB1dCopOworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KEF1ZGlvTm9kZU91dHB1
dCogb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG91dHB1dCA9PSBvdGhlcjsgfQorICAgICAgICAgICAg
QXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQ7CisgICAgICAgICAgICBib29sIGlzRW5hYmxlZDsKKyAg
ICAgICAgfTsKKworICAgICAgICBjbGFzcyBDb25zdEl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgQ29uc3RJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVuZGVyaW5nT3V0cHV0
PiYgb3V0cHV0cywgVmVjdG9yPFJlbmRlcmluZ091dHB1dD46OmNvbnN0X2l0ZXJhdG9yIHBvc2l0
aW9uKQorICAgICAgICAgICAgICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgICAg
ICAgICAsIG1fZW5kKG91dHB1dHMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc2tpcERpc2FibGVkT3V0cHV0cygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBB
dWRpb05vZGVPdXRwdXQqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24tPm91
dHB1dDsgfQorICAgICAgICAgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb25z
dEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bv
c2l0aW9uOyB9CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQor
ICAgICAgICAgICAgQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gIT0gbV9lbmQpOworICAgICAgICAgICAg
ICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBza2lwRGlzYWJsZWRPdXRwdXRzKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICB2b2lkIHNraXBEaXNhYmxlZE91dHB1dHMoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHdoaWxlIChtX3Bvc2l0aW9uICE9IG1fZW5kICYmICFt
X3Bvc2l0aW9uLT5pc0VuYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICsrbV9wb3NpdGlvbjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVjdG9yPFJlbmRlcmluZ091dHB1dD46OmNv
bnN0X2l0ZXJhdG9yIG1fcG9zaXRpb247CisgICAgICAgICAgICBWZWN0b3I8UmVuZGVyaW5nT3V0
cHV0Pjo6Y29uc3RfaXRlcmF0b3IgbV9lbmQ7CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3RJ
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IgeyBtX291dHB1dHMs
IG1fb3V0cHV0cy5iZWdpbigpIH07IH0KKyAgICAgICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBDb25zdEl0ZXJhdG9yIHsgbV9vdXRwdXRzLCBtX291dHB1dHMuZW5kKCkgfTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFJlbmRlcmluZ091dHB1dD4gbV9vdXRw
dXRzOworICAgIH07CisKICAgICAvLyBSZW5kZXJpbmcgY29kZSBhY2Nlc3NlcyBpdHMgdmVyc2lv
biBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9ucyBoZXJlLgorICAgIGNvbnN0IFJlbmRlcmluZ091
dHB1dENvbGxlY3Rpb24mIHJlbmRlcmluZ091dHB1dHMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmluZ091dHB1dHM7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzLnNpemUoKTsgfQotICAgIEF1ZGlv
Tm9kZU91dHB1dCogcmVuZGVyaW5nT3V0cHV0KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fcmVuZGVy
aW5nT3V0cHV0c1tpXTsgfQotICAgIGNvbnN0IEF1ZGlvTm9kZU91dHB1dCogcmVuZGVyaW5nT3V0
cHV0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nT3V0cHV0c1tpXTsgfQot
ICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBudW1iZXJPZlJlbmRlcmluZ0Nv
bm5lY3Rpb25zKCkgPiAwOyB9CisgICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3JlbmRlcmluZ091dHB1dHMuaXNFbXB0eSgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
VXBkYXRlU3RhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpID0gMDsKQEAg
LTYyLDI5ICsxMjYsMjcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrUmVuZGVyaW5nU3RhdGVB
c0RpcnR5KCk7CiAKLXByb3RlY3RlZDoKLSAgICBSZWY8QmFzZUF1ZGlvQ29udGV4dD4gbV9jb250
ZXh0OwotCi0gICAgLy8gbnVtYmVyT2ZDb25uZWN0aW9ucygpIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgZnJvbSB0aGUgYXVkaW8gcmVuZGVyaW5nIHRocmVhZC4KLSAgICAvLyBJbnN0ZWFkIG51bWJl
ck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSBhbmQgcmVuZGVyaW5nT3V0cHV0KCkgc2hvdWxkIGJl
IHVzZWQuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDb25uZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fb3V0cHV0cy5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0RW5hYmxlZFN0YXRl
Q2hhbmdlZChBdWRpb05vZGVPdXRwdXQmKTsKIAorcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIG1h
eGltdW1OdW1iZXJPZkNoYW5uZWxzKCkgY29uc3Q7CiAKK3ByaXZhdGU6CisgICAgUmVmPEJhc2VB
dWRpb0NvbnRleHQ+IG1fY29udGV4dDsKKwogICAgIC8vIG1fcmVuZGVyaW5nT3V0cHV0cyBpcyBh
IGNvcHkgb2YgbV9vdXRwdXRzIHdoaWNoIHdpbGwgbmV2ZXIgYmUgbW9kaWZpZWQgZHVyaW5nIHRo
ZSBncmFwaCByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVhZC4KICAgICAvLyBUaGlzIGlzIHRo
ZSBsaXN0IHdoaWNoIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmluZyBjb2RlLgogICAgIC8vIFdoZW5l
dmVyIG1fb3V0cHV0cyBpcyBtb2RpZmllZCwgdGhlIGNvbnRleHQgaXMgdG9sZCBzbyBpdCBjYW4g
bGF0ZXIgdXBkYXRlIG1fcmVuZGVyaW5nT3V0cHV0cyBmcm9tIG1fb3V0cHV0cyBhdCBhIHNhZmUg
dGltZS4KICAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCBtX3JlbmRlcmluZ091dHB1dHMgaXMgaWRl
bnRpY2FsIHRvIG1fb3V0cHV0cy4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9yZW5k
ZXJpbmdPdXRwdXRzOworICAgIFJlbmRlcmluZ091dHB1dENvbGxlY3Rpb24gbV9yZW5kZXJpbmdP
dXRwdXRzOwogCiAgICAgLy8gbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyBrZWVwcyB0cmFj
ayBpZiBtX291dHB1dHMgaXMgbW9kaWZpZWQuCiAgICAgYm9vbCBtX3JlbmRlcmluZ1N0YXRlTmVl
ZFVwZGF0aW5nIHsgZmFsc2UgfTsKIAotcHJpdmF0ZToKICAgICAvLyBtX291dHB1dHMgY29udGFp
bnMgdGhlIEF1ZGlvTm9kZU91dHB1dHMgcmVwcmVzZW50aW5nIGN1cnJlbnQgY29ubmVjdGlvbnMg
d2hpY2ggYXJlIG5vdCBkaXNhYmxlZC4KICAgICAvLyBUaGUgcmVuZGVyaW5nIGNvZGUgc2hvdWxk
IG5ldmVyIHVzZSB0aGlzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB1c2VzIG1fcmVuZGVyaW5nT3V0
cHV0cy4KICAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fb3V0cHV0czsKLSAgICBWZWN0
b3I8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0czsKKyAgICBPcHRp
b25hbDxSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uPiBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb1Bhbm5lck5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb1Bhbm5lck5vZGUuY3BwCmluZGV4IDYy
MjQ0MGE5NGVmYzkxZDIwMmU4YzQ5MzdmZGY3Nzc1OTdhNjgxOTAuLmMzOWViNTc5ZDcyOTU2ZTUz
NTQ5YTIxYTk0ZmMxNGM5NmI4ZDAwODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vV2ViS2l0QXVkaW9QYW5uZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVyTm9kZS5jcHAKQEAgLTMxOSw4ICsz
MTksNyBAQCB2b2lkIFdlYktpdEF1ZGlvUGFubmVyTm9kZTo6bm90aWZ5QXVkaW9Tb3VyY2VzQ29u
bmVjdGVkVG9Ob2RlKEF1ZGlvTm9kZSogbm9kZSwgSAogICAgICAgICAgICAgQXVkaW9Ob2RlSW5w
dXQqIGlucHV0ID0gbm9kZS0+aW5wdXQoaSk7CiAKICAgICAgICAgICAgIC8vIEZvciBlYWNoIGlu
cHV0LCBnbyB0aHJvdWdoIGFsbCBvZiBpdHMgY29ubmVjdGlvbnMsIGxvb2tpbmcgZm9yIEF1ZGlv
QnVmZmVyU291cmNlTm9kZXMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
aW5wdXQtPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytqKSB7Ci0gICAgICAgICAg
ICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBjb25uZWN0ZWRPdXRwdXQgPSBpbnB1dC0+cmVuZGVyaW5n
T3V0cHV0KGopOworICAgICAgICAgICAgZm9yIChhdXRvKiBjb25uZWN0ZWRPdXRwdXQgOiBpbnB1
dC0+cmVuZGVyaW5nT3V0cHV0cygpKSB7CiAgICAgICAgICAgICAgICAgQXVkaW9Ob2RlKiBjb25u
ZWN0ZWROb2RlID0gY29ubmVjdGVkT3V0cHV0LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgaWYg
KHZpc2l0ZWROb2Rlcy5jb250YWlucyhjb25uZWN0ZWROb2RlKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423769</attachid>
            <date>2021-03-19 13:39:06 -0700</date>
            <delta_ts>2021-03-19 15:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223529-20210319133905.patch</filename>
            <type>text/plain</type>
            <size>22149</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU5NGYyNzA5NmExZmRl
YWE2YmZmNjM5NTg3N2FjYWI5ZmJlMGY3Yy4uOTI3OWE3YjVhMGVkYmJmNmQ4YWJlOTU2Yjg1MGJj
MGUyODQ4MWRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIxLTAzLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGVhcCBhbGxvY2F0
aW9uIHVuZGVyIEF1ZGlvTm9kZUlucHV0OjpkaXNhYmxlKCkgLyBBdWRpb05vZGVJbnB1dDo6ZW5h
YmxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2
b2lkIGhlYXAgYWxsb2NhdGlvbiB1bmRlciBBdWRpb05vZGVJbnB1dDo6ZGlzYWJsZSgpIC8gQXVk
aW9Ob2RlSW5wdXQ6OmVuYWJsZSgpIHNpbmNlIHRob3NlIGNhbgorICAgICAgICBnZXQgY2FsbGVk
IG9uIHRoZSBhdWRpbyB0aHJlYWQuCisKKyAgICAgICAgQXVkaW9Ob2RlSW5wdXQgdXNlZCB0byBo
YXZlIGEgbV9kaXNhYmxlZE91dHB1dHMgY29udGFpbmVyIHRvIGtlZXAgZGlzYWJsZWQgb3V0cHV0
cyBzZXBhcmF0ZWQKKyAgICAgICAgZnJvbSBlbmFibGVkIG9uZXMgKGluIG1fb3V0cHV0cykuIElu
c3RlYWQsIHdlIG5vdyBzdG9yZSBhbGwgb3V0cHV0cyBpbiBtX291dHB1dHMgd2l0aCBhICdpc0Vu
YWJsZWQnCisgICAgICAgIGZsYWcuIEFzIGEgcmVzdWx0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBt
YWtlIGFueSBoZWFwIGFsbG9jYXRpb25zIHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGFuCisgICAg
ICAgIG91dHB1dCwgd2UgbWVyZWx5IG5lZWQgdG8gZmxpcCBhIGZsYWcgaW4gbV9vdXRwdXRzLgor
CisgICAgICAgIEZvciBjb252ZW5pZW5jZSwgc2luY2UgY2xpZW50cyBvZiByZW5kZXJpbmcgb3V0
cHV0cyBvbmx5IGNhcmUgYWJvdXQgZW5hYmxlZCBvdXRwdXRzLCBJIGludHJvZHVjZWQKKyAgICAg
ICAgYSBuZXcgUmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbiBjb250YWluZXIgd2l0aCBpdGVyYXRv
cnMuIFRoaXMgd2F5IGNsaWVudHMgZG8gbm90IG5lZWQgdG8gd29ycnkKKyAgICAgICAgYWJvdXQg
ZGlzYWJsZWQgb3V0cHV0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
SW5wdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZERpc2FibGVPdXRwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZEVuYWJsZU91dHB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb05vZGVJbnB1dDo6YnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZUlucHV0
OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVJbnB1dDo6
cHVsbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b05vZGVPdXRwdXQ6OmVuYWJsZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OmNhbGN1bGF0ZUZpbmFsVmFs
dWVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpudW1iZXJPZkNvbm5l
Y3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjph
ZGRPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbW92
ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1bW1pbmdKdW5jdGlvbjo6dXBkYXRl
UmVuZGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246
Om1heGltdW1OdW1iZXJPZkNoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U3VtbWluZ0p1bmN0aW9uOjpkaWREaXNhYmxlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpkaWRFbmFibGVPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRlcmlu
Z091dHB1dDo6UmVuZGVyaW5nT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmlu
Z091dHB1dENvbGxlY3Rpb246OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5k
ZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1
bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0
aW9uOjpDb25zdEl0ZXJhdG9yOjpDb25zdEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpDb25zdEl0ZXJh
dG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVu
Y3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9y
IT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rp
b246OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbmRlcmluZ091dHB1dHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OmlzQ29ubmVjdGVkIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb1Bhbm5lck5vZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nv
bm5lY3RlZFRvTm9kZSk6CisKIDIwMjEtMDMtMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWFueSBtZWRpYS9tZWRpYS1mcmFnbWVudHMvIHRlc3RzIGFyZSBj
cmFzaGluZyBkdWUgdG8gb3RoZXIgdGVzdHMgdGhhdCBydW4gYmVmb3JlIHRoZW0uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCmluZGV4
IDg5MjBkOTE2YjEzNGZlMDc1OWI3NWJiZDdmODY2NjJmZDI4MjFjZGQuLjAyMWI2YmVlYTRkMTE3
Y2YyMzc2MGUwNWNjYmVjNGMzNWRiMzRmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCkBAIC01MywxMyArNTMsNyBAQCB2b2lk
IEF1ZGlvTm9kZUlucHV0Ojpjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQogICAgIGlm
ICghb3V0cHV0IHx8ICFub2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYWRkUG90
ZW50aWFsbHlEaXNhYmxlZE91dHB1dCA9IFt0aGlzXShBdWRpb05vZGVPdXRwdXQmIG91dHB1dCkg
ewotICAgICAgICBpZiAob3V0cHV0LmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGFk
ZE91dHB1dChvdXRwdXQpOwotICAgICAgICByZXR1cm4gbV9kaXNhYmxlZE91dHB1dHMuYWRkKCZv
dXRwdXQpLmlzTmV3RW50cnk7Ci0gICAgfTsKLQotICAgIGlmIChhZGRQb3RlbnRpYWxseURpc2Fi
bGVkT3V0cHV0KCpvdXRwdXQpKQorICAgIGlmIChhZGRPdXRwdXQoKm91dHB1dCkpCiAgICAgICAg
IG91dHB1dC0+YWRkSW5wdXQodGhpcyk7CiB9CiAKQEAgLTc2LDQ4ICs3MCwyMyBAQCB2b2lkIEF1
ZGlvTm9kZUlucHV0OjpkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQogICAgICAg
ICBvdXRwdXQtPnJlbW92ZUlucHV0KHRoaXMpOyAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCB0byBy
ZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRl
ZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBPdGhlcndpc2UsIHRyeSB0
byBkaXNjb25uZWN0IGZyb20gZGlzYWJsZWQgY29ubmVjdGlvbnMuCi0gICAgaWYgKG1fZGlzYWJs
ZWRPdXRwdXRzLnJlbW92ZShvdXRwdXQpKSB7Ci0gICAgICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQo
dGhpcyk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRl
ciB0aGlzIHNpbmNlIHRoZSBub2RlIG1heSBiZSBkZWxldGVkLgotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQXVkaW9Ob2RlSW5w
dXQ6OmRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCit2b2lkIEF1ZGlvTm9kZUlucHV0
OjpvdXRwdXRFbmFibGVkU3RhdGVDaGFuZ2VkKEF1ZGlvTm9kZU91dHB1dCYgb3V0cHV0KQogewog
ICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwotCi0gICAgQVNTRVJUKG91dHB1
dCAmJiBub2RlKCkpOwotICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGlzYWJsZWRPdXRwdXRzLmFkZChvdXRwdXQpOwotICAgIGJvb2wgd2FzUmVt
b3ZlZCA9IHJlbW92ZU91dHB1dCgqb3V0cHV0KTsKLSAgICBBU1NFUlRfVU5VU0VEKHdhc1JlbW92
ZWQsIHdhc1JlbW92ZWQpOworICAgIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpvdXRwdXRFbmFibGVk
U3RhdGVDaGFuZ2VkKG91dHB1dCk7CiAKICAgICAvLyBQcm9wYWdhdGUgZGlzYWJsZWQgc3RhdGUg
dG8gb3V0cHV0cy4KLSAgICBub2RlKCktPmRpc2FibGVPdXRwdXRzSWZOZWNlc3NhcnkoKTsKLX0K
LQotdm9pZCBBdWRpb05vZGVJbnB1dDo6ZW5hYmxlKEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQot
ewotICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwotCi0gICAgQVNTRVJUKG91
dHB1dCAmJiBub2RlKCkpOwotICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkpCisgICAgQVNTRVJU
KG5vZGUoKSk7CisgICAgaWYgKCFub2RlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChtX2Rpc2FibGVkT3V0cHV0cy5jb250YWlucyhvdXRwdXQpKTsKLQotICAgIC8vIE1vdmUgb3V0
cHV0IGZyb20gZGlzYWJsZWQgbGlzdCB0byBhY3RpdmUgbGlzdC4KLSAgICBhZGRPdXRwdXQoKm91
dHB1dCk7Ci0gICAgbV9kaXNhYmxlZE91dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0KLSAgICAvLyBQ
cm9wYWdhdGUgZW5hYmxlZCBzdGF0ZSB0byBvdXRwdXRzLgotICAgIG5vZGUoKS0+ZW5hYmxlT3V0
cHV0c0lmTmVjZXNzYXJ5KCk7CisgICAgaWYgKG91dHB1dC5pc0VuYWJsZWQoKSkKKyAgICAgICAg
bm9kZSgpLT5lbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKTsKKyAgICBlbHNlCisgICAgICAgIG5v
ZGUoKS0+ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSgpOwogfQogCiB2b2lkIEF1ZGlvTm9kZUlu
cHV0OjpkaWRVcGRhdGUoKQpAQCAtMTU4LDcgKzEyNyw3IEBAIEF1ZGlvQnVzKiBBdWRpb05vZGVJ
bnB1dDo6YnVzKCkKIAogICAgIC8vIEhhbmRsZSBzaW5nbGUgY29ubmVjdGlvbiBzcGVjaWFsbHkg
dG8gYWxsb3cgZm9yIGluLXBsYWNlIHByb2Nlc3NpbmcuCiAgICAgaWYgKG51bWJlck9mUmVuZGVy
aW5nQ29ubmVjdGlvbnMoKSA9PSAxICYmIG5vZGUoKS0+Y2hhbm5lbENvdW50TW9kZSgpID09IENo
YW5uZWxDb3VudE1vZGU6Ok1heCkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ091dHB1dCgwKS0+
YnVzKCk7CisgICAgICAgIHJldHVybiAoKnJlbmRlcmluZ091dHB1dHMoKS5iZWdpbigpKS0+YnVz
KCk7CiAKICAgICAvLyBNdWx0aXBsZSBjb25uZWN0aW9ucyBjYXNlIG9yIGNvbXBsZXggQ2hhbm5l
bENvdW50TW9kZSAob3Igbm8gY29ubmVjdGlvbnMpLgogICAgIHJldHVybiBpbnRlcm5hbFN1bW1p
bmdCdXMoKTsKQEAgLTE4Niw3ICsxNTUsNyBAQCB2b2lkIEF1ZGlvTm9kZUlucHV0OjpzdW1BbGxD
b25uZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvYwogCiAg
ICAgYXV0byBpbnRlcnByZXRhdGlvbiA9IG5vZGUoKS0+Y2hhbm5lbEludGVycHJldGF0aW9uKCk7
CiAKLSAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fcmVuZGVyaW5nT3V0cHV0cykgeworICAgIGZv
ciAoYXV0byogb3V0cHV0IDogcmVuZGVyaW5nT3V0cHV0cygpKSB7CiAgICAgICAgIEFTU0VSVChv
dXRwdXQpOwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMgb3V0cHV0LgpAQCAt
MjAxLDE2ICsxNzAsMTcgQEAgQXVkaW9CdXMqIEF1ZGlvTm9kZUlucHV0OjpwdWxsKEF1ZGlvQnVz
KiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogewogICAgIEFTU0VSVChjb250
ZXh0KCkuaXNBdWRpb1RocmVhZCgpKTsKIAorICAgIGF1dG8gbnVtYmVyT2ZSZW5kZXJpbmdDb25u
ZWN0aW9ucyA9IHRoaXMtPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsKICAgICAvLyBI
YW5kbGUgc2luZ2xlIGNvbm5lY3Rpb24gY2FzZS4KLSAgICBpZiAobnVtYmVyT2ZSZW5kZXJpbmdD
b25uZWN0aW9ucygpID09IDEgJiYgbm9kZSgpLT5jaGFubmVsQ291bnRNb2RlKCkgPT0gQ2hhbm5l
bENvdW50TW9kZTo6TWF4KSB7CisgICAgaWYgKG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMg
PT0gMSAmJiBub2RlKCktPmNoYW5uZWxDb3VudE1vZGUoKSA9PSBDaGFubmVsQ291bnRNb2RlOjpN
YXgpIHsKICAgICAgICAgLy8gVGhlIG91dHB1dCB3aWxsIG9wdGltaXplIHByb2Nlc3NpbmcgdXNp
bmcgaW5QbGFjZUJ1cyBpZiBpdCdzIGFibGUuCi0gICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0
cHV0ID0gdGhpcy0+cmVuZGVyaW5nT3V0cHV0KDApOworICAgICAgICBBdWRpb05vZGVPdXRwdXQq
IG91dHB1dCA9ICpyZW5kZXJpbmdPdXRwdXRzKCkuYmVnaW4oKTsKICAgICAgICAgcmV0dXJuIG91
dHB1dC0+cHVsbChpblBsYWNlQnVzLCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIH0KIAogICAgIEF1
ZGlvQnVzKiBpbnRlcm5hbFN1bW1pbmdCdXMgPSB0aGlzLT5pbnRlcm5hbFN1bW1pbmdCdXMoKTsK
IAotICAgIGlmICghbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpKSB7CisgICAgaWYgKCFu
dW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKSB7CiAgICAgICAgIC8vIEF0IGxlYXN0LCBnZW5l
cmF0ZSBzaWxlbmNlIGlmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcuCiAgICAgICAg
IC8vIEZJWE1FOiBpZiB3ZSB3YW50ZWQgdG8gZ2V0IGZhbmN5LCB3ZSBjb3VsZCBwcm9wYWdhdGUg
YSAnc2lsZW50IGhpbnQnIGhlcmUgdG8gb3B0aW1pemUgdGhlIGRvd25zdHJlYW0gZ3JhcGggcHJv
Y2Vzc2luZy4KICAgICAgICAgaW50ZXJuYWxTdW1taW5nQnVzLT56ZXJvKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgKaW5kZXggMzgxNzhi
ZGNjZmJhYWI2NDU4MmEwYzJkNTA2MTQ5MjQzNjYzZDBiZC4uNGVjOWI1MzZmZjQ1YTZmZDI4MDhi
Y2JiNDY1YWY2Mjk0M2M1MzNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlSW5wdXQuaApAQCAtNTUsMTEgKzU1LDggQEAgcHVibGljOgogICAgIHZv
aWQgY29ubmVjdChBdWRpb05vZGVPdXRwdXQqKTsKICAgICB2b2lkIGRpc2Nvbm5lY3QoQXVkaW9O
b2RlT3V0cHV0Kik7CiAKLSAgICAvLyBkaXNhYmxlKCkgd2lsbCB0YWtlIHRoZSBvdXRwdXQgb3V0
IG9mIHRoZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlzdCBhbmQgc2V0IGFzaWRlIGluIGEgZGlzYWJs
ZWQgbGlzdC4KLSAgICAvLyBlbmFibGUoKSB3aWxsIHB1dCB0aGUgb3V0cHV0IGJhY2sgaW50byB0
aGUgYWN0aXZlIGNvbm5lY3Rpb25zIGxpc3QuCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2l0aCB0
aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9pZCBlbmFibGUoQXVkaW9Ob2RlT3V0cHV0
Kik7Ci0gICAgdm9pZCBkaXNhYmxlKEF1ZGlvTm9kZU91dHB1dCopOworICAgIHZvaWQgb3V0cHV0
RW5hYmxlZFN0YXRlQ2hhbmdlZChBdWRpb05vZGVPdXRwdXQmKSBmaW5hbDsKIAogICAgIC8vIHB1
bGwoKSBwcm9jZXNzZXMgYWxsIG9mIHRoZSBBdWRpb05vZGVzIGNvbm5lY3RlZCB0byB1cy4KICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb25uZWN0aW9ucyBpdCBzdW1zIHRoZSByZXN1
bHQgaW50byBhbiBpbnRlcm5hbCBzdW1taW5nIGJ1cy4KQEAgLTgyLDExICs3OSw2IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgQXVkaW9Ob2RlKiBtX25vZGU7CiAKLSAgICAvLyBtX2Rpc2FibGVk
T3V0cHV0cyBjb250YWlucyB0aGUgQXVkaW9Ob2RlT3V0cHV0cyB3aGljaCBhcmUgZGlzYWJsZWQg
KHdpbGwgbm90IGJlIHByb2Nlc3NlZCkgYnkgdGhlIGF1ZGlvIGdyYXBoIHJlbmRlcmluZy4KLSAg
ICAvLyBCdXQsIGZyb20gSmF2YVNjcmlwdCdzIHBlcnNwZWN0aXZlLCB0aGVzZSBvdXRwdXRzIGFy
ZSBzdGlsbCBjb25uZWN0ZWQgdG8gdXMuCi0gICAgLy8gR2VuZXJhbGx5LCB0aGVzZSByZXByZXNl
bnQgZGlzYWJsZWQgY29ubmVjdGlvbnMgZnJvbSAibm90ZXMiIHdoaWNoIGhhdmUgZmluaXNoZWQg
cGxheWluZyBidXQgYXJlIG5vdCB5ZXQgZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgSGFzaFNldDxB
dWRpb05vZGVPdXRwdXQqPiBtX2Rpc2FibGVkT3V0cHV0czsKLQogICAgIC8vIENhbGxlZCBmcm9t
IGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCiAgICAgQXVkaW9CdXMqIGludGVybmFsU3VtbWluZ0J1
cygpOwogICAgIHZvaWQgc3VtQWxsQ29ubmVjdGlvbnMoQXVkaW9CdXMqIHN1bW1pbmdCdXMsIHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4IGJhM2JjOTE5ZmFhYjcyYjczZTUxYWVk
Mzc4MjNmNzJjODA2MDRiN2UuLmE0MGVjZTM0ZDRlZmU5ZjQ4OTI5MDQ4YzkyYjNmNzY5MDMyMWVl
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
T3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZU91dHB1dC5jcHAKQEAgLTIyNSwyMiArMjI1LDI0IEBAIHZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojpk
aXNhYmxlKCkKIHsKICAgICBBU1NFUlQoY29udGV4dCgpLmlzR3JhcGhPd25lcigpKTsKIAotICAg
IGlmIChtX2lzRW5hYmxlZCkgewotICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMu
a2V5cygpKQotICAgICAgICAgICAgaW5wdXQtPmRpc2FibGUodGhpcyk7Ci0gICAgICAgIG1faXNF
bmFibGVkID0gZmFsc2U7Ci0gICAgfQorICAgIGlmICghbV9pc0VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faXNFbmFibGVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6
IG1faW5wdXRzLmtleXMoKSkKKyAgICAgICAgaW5wdXQtPm91dHB1dEVuYWJsZWRTdGF0ZUNoYW5n
ZWQoKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKIHsKICAgICBB
U1NFUlQoY29udGV4dCgpLmlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmICghbV9pc0VuYWJsZWQp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRzLmtleXMoKSkKLSAgICAgICAg
ICAgIGlucHV0LT5lbmFibGUodGhpcyk7Ci0gICAgICAgIG1faXNFbmFibGVkID0gdHJ1ZTsKLSAg
ICB9CisgICAgaWYgKG1faXNFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRW5h
YmxlZCA9IHRydWU7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRzLmtleXMoKSkKKyAg
ICAgICAgaW5wdXQtPm91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQoKnRoaXMpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtLmNwcAppbmRleCA4ZGRkODZjNjQxM2EzMWQyYTEwOTQzNTI2MDNiMjA5NjIyZjZh
ZmQ2Li5mZjc5MDQ5NTE0OWM3NmFjZGQwMjdjZmRlNDhhMDRkOGI2YjgyMjVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKQEAgLTI4MSw3ICsy
ODEsNyBAQCB2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0ZUZpbmFsVmFsdWVzKGZsb2F0KiB2YWx1
ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBibwogICAgIEFTU0VSVChudW1iZXJPZlZhbHVl
cyA8PSBBdWRpb1V0aWxpdGllczo6cmVuZGVyUXVhbnR1bVNpemUpOwogICAgIG1fc3VtbWluZ0J1
cy0+c2V0Q2hhbm5lbE1lbW9yeSgwLCB2YWx1ZXMsIHNhbXBsZUFjY3VyYXRlID8gbnVtYmVyT2ZW
YWx1ZXMgOiAxKTsKIAotICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRz
KSB7CisgICAgZm9yIChhdXRvKiBvdXRwdXQgOiByZW5kZXJpbmdPdXRwdXRzKCkpIHsKICAgICAg
ICAgQVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBv
dXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
U3VtbWluZ0p1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9TdW1taW5nSnVuY3Rpb24uY3BwCmluZGV4IDdkMWEyNzRhMWJiNDkyZmFjMmIwOGNlM2ZmNTQw
MDFhMjIyZTIyOWUuLjEyY2RhYmE0NTA3ZGMyMTQ3MjBmODI3NDAxMTZlNTkwYjMwMWU4MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVu
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1t
aW5nSnVuY3Rpb24uY3BwCkBAIC02MCwxMCArNjAsMTMgQEAgYm9vbCBBdWRpb1N1bW1pbmdKdW5j
dGlvbjo6YWRkT3V0cHV0KEF1ZGlvTm9kZU91dHB1dCYgb3V0cHV0KQogICAgIGlmICghbV9vdXRw
dXRzLmFkZCgmb3V0cHV0KS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcGVu
ZGluZ1JlbmRlcmluZ091dHB1dHMgPSBjb3B5VG9WZWN0b3IobV9vdXRwdXRzKTsKKyAgICBpZiAo
IW91dHB1dC5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1f
cGVuZGluZ1JlbmRlcmluZ091dHB1dHMpCisgICAgICAgIG1fcGVuZGluZ1JlbmRlcmluZ091dHB1
dHMuZW1wbGFjZShtX291dHB1dHMpOwogICAgIGVsc2UKLSAgICAgICAgbV9wZW5kaW5nUmVuZGVy
aW5nT3V0cHV0cy5hcHBlbmQoJm91dHB1dCk7CisgICAgICAgIG1fcGVuZGluZ1JlbmRlcmluZ091
dHB1dHMtPmFwcGVuZChvdXRwdXQpOwogCiAgICAgbWFya1JlbmRlcmluZ1N0YXRlQXNEaXJ0eSgp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNzUsMTAgKzc4LDE1IEBAIGJvb2wgQXVkaW9TdW1taW5n
SnVuY3Rpb246OnJlbW92ZU91dHB1dChBdWRpb05vZGVPdXRwdXQmIG91dHB1dCkKICAgICBpZiAo
IW1fb3V0cHV0cy5yZW1vdmUoJm91dHB1dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5k
aW5nUmVuZGVyaW5nT3V0cHV0cyA9IGNvcHlUb1ZlY3RvcihtX291dHB1dHMpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cy5yZW1vdmVGaXJzdCgmb3V0cHV0KTsK
KyAgICBpZiAoIW91dHB1dC5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoIW1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMpCisgICAgICAgIG1fcGVuZGluZ1JlbmRl
cmluZ091dHB1dHMuZW1wbGFjZShtX291dHB1dHMpOworICAgIGVsc2UgeworICAgICAgICBib29s
IHdhc1JlbW92ZWQgPSBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLT5yZW1vdmUob3V0cHV0KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRCh3YXNSZW1vdmVkLCB3YXNSZW1vdmVkKTsKKyAgICB9CiAK
ICAgICBtYXJrUmVuZGVyaW5nU3RhdGVBc0RpcnR5KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05
MCw5ICs5OCwxMyBAQCB2b2lkIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjp1cGRhdGVSZW5kZXJpbmdT
dGF0ZSgpCiAKICAgICBpZiAobV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyAmJiBjYW5VcGRh
dGVTdGF0ZSgpKSB7CiAgICAgICAgIC8vIENvcHkgZnJvbSBtX291dHB1dHMgdG8gbV9yZW5kZXJp
bmdPdXRwdXRzLgotICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMgPSBzdGQ6OmV4Y2hhbmdlKG1f
cGVuZGluZ1JlbmRlcmluZ091dHB1dHMsIHsgfSk7Ci0gICAgICAgIGZvciAoYXV0byYgb3V0cHV0
IDogbV9yZW5kZXJpbmdPdXRwdXRzKQotICAgICAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOworICAgICAgICBpZiAoIW1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMpCisgICAg
ICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMgPSB7IH07CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzID0gKnN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nUmVuZGVy
aW5nT3V0cHV0cywgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIGZvciAoYXV0byogb3V0cHV0
IDogbV9yZW5kZXJpbmdPdXRwdXRzKQorICAgICAgICAgICAgICAgIG91dHB1dC0+dXBkYXRlUmVu
ZGVyaW5nU3RhdGUoKTsKKyAgICAgICAgfQogCiAgICAgICAgIGRpZFVwZGF0ZSgpOwogCkBAIC0x
MDQsNiArMTE2LDkgQEAgdW5zaWduZWQgQXVkaW9TdW1taW5nSnVuY3Rpb246Om1heGltdW1OdW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBtYXhDaGFubmVscyA9IDA7CiAg
ICAgZm9yIChhdXRvKiBvdXRwdXQgOiBtX291dHB1dHMpIHsKKyAgICAgICAgaWYgKCFvdXRwdXQt
PmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgLy8gVXNlIG91
dHB1dCgpLT5udW1iZXJPZkNoYW5uZWxzKCkgaW5zdGVhZCBvZiBvdXRwdXQtPmJ1cygpLT5udW1i
ZXJPZkNoYW5uZWxzKCksCiAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNhbGxpbmcgb2YgQXVkaW9O
b2RlT3V0cHV0OjpidXMoKSBpcyBub3Qgc2FmZSBoZXJlLgogICAgICAgICBtYXhDaGFubmVscyA9
IHN0ZDo6bWF4KG1heENoYW5uZWxzLCBvdXRwdXQtPm51bWJlck9mQ2hhbm5lbHMoKSk7CkBAIC0x
MTEsNiArMTI2LDMwIEBAIHVuc2lnbmVkIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjptYXhpbXVtTnVt
YmVyT2ZDaGFubmVscygpIGNvbnN0CiAgICAgcmV0dXJuIG1heENoYW5uZWxzOwogfQogCit2b2lk
IEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpvdXRwdXRFbmFibGVkU3RhdGVDaGFuZ2VkKEF1ZGlvTm9k
ZU91dHB1dCYgb3V0cHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkp
OworICAgIGlmICghbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAgICAgbV9wZW5kaW5n
UmVuZGVyaW5nT3V0cHV0cy5lbXBsYWNlKG1fb3V0cHV0cyk7CisgICAgZWxzZQorICAgICAgICBt
X3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLT51cGRhdGVkRW5hYmxlZFN0YXRlKG91dHB1dCk7Cisg
ICAgbWFya1JlbmRlcmluZ1N0YXRlQXNEaXJ0eSgpOworfQorCitpbmxpbmUgQXVkaW9TdW1taW5n
SnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRlcmluZ091dHB1dDo6UmVu
ZGVyaW5nT3V0cHV0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQorICAgIDogb3V0cHV0KG91dHB1
dCkKKyAgICAsIGlzRW5hYmxlZChvdXRwdXQtPmlzRW5hYmxlZCgpKQoreyB9CisKK3ZvaWQgV2Vi
Q29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OnVw
ZGF0ZWRFbmFibGVkU3RhdGUoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpCit7CisgICAgYXV0byBp
bmRleCA9IG1fb3V0cHV0cy5maW5kKCZvdXRwdXQpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RG
b3VuZCk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAg
bV9vdXRwdXRzW2luZGV4XS5pc0VuYWJsZWQgPSBvdXRwdXQuaXNFbmFibGVkKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0
aW9uLmgKaW5kZXggYTE0YmEyNjQ3OWQwMTg2MGIyNzIxNDQyOTc2MmJjNWIwMTI1ZDc5ZS4uMTYx
Y2E2MGE0YTcyZWVkMTg4MDE0NWMxMDZjNGRlMGE5OWIzODRlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uaApAQCAt
MjUsNiArMjUsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2lu
Y2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC00OCwxMSArNDksNzYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbXVz
dCBiZSBjYWxsZWQgd2hlbiB3ZSBvd24gdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIGluIHRoZSBh
dWRpbyB0aHJlYWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1
bS4KICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAKKyAgICBjbGFzcyBSZW5kZXJp
bmdPdXRwdXRDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlbmRlcmluZ091dHB1
dENvbGxlY3Rpb24oKSA9IGRlZmF1bHQ7CisgICAgICAgIFJlbmRlcmluZ091dHB1dENvbGxlY3Rp
b24oY29uc3QgSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPiYgb3V0cHV0cykKKyAgICAgICAgICAg
IDogbV9vdXRwdXRzKGNvcHlUb1ZlY3Rvck9mPFJlbmRlcmluZ091dHB1dD4ob3V0cHV0cykpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAgIHZvaWQgYXBw
ZW5kKEF1ZGlvTm9kZU91dHB1dCYgb3V0cHV0KSB7IG1fb3V0cHV0cy5hcHBlbmQoJm91dHB1dCk7
IH0KKyAgICAgICAgYm9vbCByZW1vdmUoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpIHsgcmV0dXJu
IG1fb3V0cHV0cy5yZW1vdmVGaXJzdCgmb3V0cHV0KTsgfQorICAgICAgICB2b2lkIHVwZGF0ZWRF
bmFibGVkU3RhdGUoQXVkaW9Ob2RlT3V0cHV0Jik7CisKKyAgICAgICAgc3RydWN0IFJlbmRlcmlu
Z091dHB1dCB7CisgICAgICAgICAgICBSZW5kZXJpbmdPdXRwdXQoQXVkaW9Ob2RlT3V0cHV0Kik7
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oQXVkaW9Ob2RlT3V0cHV0KiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb3V0cHV0ID09IG90aGVyOyB9CisgICAgICAgICAgICBBdWRpb05vZGVPdXRw
dXQqIG91dHB1dDsKKyAgICAgICAgICAgIGJvb2wgaXNFbmFibGVkOworICAgICAgICB9OworCisg
ICAgICAgIGNsYXNzIENvbnN0SXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSBzaXplX3Q7CisgICAgICAgICAgICB1c2luZyB2YWx1
ZV90eXBlID0gQXVkaW9Ob2RlT3V0cHV0KjsKKyAgICAgICAgICAgIHVzaW5nIHBvaW50ZXIgPSBB
dWRpb05vZGVPdXRwdXQqKjsKKyAgICAgICAgICAgIHVzaW5nIHJlZmVyZW5jZSA9IEF1ZGlvTm9k
ZU91dHB1dComOworICAgICAgICAgICAgdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmZv
cndhcmRfaXRlcmF0b3JfdGFnOworCisgICAgICAgICAgICBDb25zdEl0ZXJhdG9yKGNvbnN0IFZl
Y3RvcjxSZW5kZXJpbmdPdXRwdXQ+JiBvdXRwdXRzLCBWZWN0b3I8UmVuZGVyaW5nT3V0cHV0Pjo6
Y29uc3RfaXRlcmF0b3IgcG9zaXRpb24pCisgICAgICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBv
c2l0aW9uKQorICAgICAgICAgICAgICAgICwgbV9lbmQob3V0cHV0cy5lbmQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBza2lwRGlzYWJsZWRPdXRwdXRzKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbi0+b3V0cHV0OyB9CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247IH0KKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgICAgICBDb25zdEl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9wb3NpdGlvbiAhPSBt
X2VuZCk7CisgICAgICAgICAgICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICAgICAgICAgIHNr
aXBEaXNhYmxlZE91dHB1dHMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQgc2tpcERpc2Fi
bGVkT3V0cHV0cygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fcG9z
aXRpb24gIT0gbV9lbmQgJiYgIW1fcG9zaXRpb24tPmlzRW5hYmxlZCkKKyAgICAgICAgICAgICAg
ICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZWN0b3I8
UmVuZGVyaW5nT3V0cHV0Pjo6Y29uc3RfaXRlcmF0b3IgbV9wb3NpdGlvbjsKKyAgICAgICAgICAg
IFZlY3RvcjxSZW5kZXJpbmdPdXRwdXQ+Ojpjb25zdF9pdGVyYXRvciBtX2VuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJ
dGVyYXRvciB7IG1fb3V0cHV0cywgbV9vdXRwdXRzLmJlZ2luKCkgfTsgfQorICAgICAgICBDb25z
dEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IgeyBtX291dHB1dHMs
IG1fb3V0cHV0cy5lbmQoKSB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8UmVu
ZGVyaW5nT3V0cHV0PiBtX291dHB1dHM7CisgICAgfTsKKwogICAgIC8vIFJlbmRlcmluZyBjb2Rl
IGFjY2Vzc2VzIGl0cyB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IGNvbm5lY3Rpb25zIGhlcmUuCisg
ICAgY29uc3QgUmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbiYgcmVuZGVyaW5nT3V0cHV0cygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nT3V0cHV0czsgfQogICAgIHVuc2lnbmVkIG51bWJlck9m
UmVuZGVyaW5nQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1dHMu
c2l6ZSgpOyB9Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQg
aSkgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgY29uc3QgQXVkaW9Ob2Rl
T3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9yZW5k
ZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJu
IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA+IDA7IH0KKyAgICBib29sIGlzQ29ubmVj
dGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcmVuZGVyaW5nT3V0cHV0cy5pc0VtcHR5KCk7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBjYW5VcGRhdGVTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkVXBkYXRlKCkgPSAwOwpAQCAtNjIsMjkgKzEyOCwyNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IG1hcmtSZW5kZXJpbmdTdGF0ZUFzRGlydHkoKTsKIAotcHJvdGVjdGVkOgotICAgIFJlZjxCYXNl
QXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7Ci0KLSAgICAvLyBudW1iZXJPZkNvbm5lY3Rpb25zKCkg
c2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSBhdWRpbyByZW5kZXJpbmcgdGhyZWFkLgot
ICAgIC8vIEluc3RlYWQgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpIGFuZCByZW5kZXJp
bmdPdXRwdXQoKSBzaG91bGQgYmUgdXNlZC4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNvbm5lY3Rp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRzLnNpemUoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBvdXRwdXRFbmFibGVkU3RhdGVDaGFuZ2VkKEF1ZGlvTm9kZU91dHB1dCYpOwogCitwcm90ZWN0
ZWQ6CiAgICAgdW5zaWduZWQgbWF4aW11bU51bWJlck9mQ2hhbm5lbHMoKSBjb25zdDsKIAorcHJp
dmF0ZToKKyAgICBSZWY8QmFzZUF1ZGlvQ29udGV4dD4gbV9jb250ZXh0OworCiAgICAgLy8gbV9y
ZW5kZXJpbmdPdXRwdXRzIGlzIGEgY29weSBvZiBtX291dHB1dHMgd2hpY2ggd2lsbCBuZXZlciBi
ZSBtb2RpZmllZCBkdXJpbmcgdGhlIGdyYXBoIHJlbmRlcmluZyBvbiB0aGUgYXVkaW8gdGhyZWFk
LgogICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgd2hpY2ggaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5n
IGNvZGUuCiAgICAgLy8gV2hlbmV2ZXIgbV9vdXRwdXRzIGlzIG1vZGlmaWVkLCB0aGUgY29udGV4
dCBpcyB0b2xkIHNvIGl0IGNhbiBsYXRlciB1cGRhdGUgbV9yZW5kZXJpbmdPdXRwdXRzIGZyb20g
bV9vdXRwdXRzIGF0IGEgc2FmZSB0aW1lLgogICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIG1fcmVu
ZGVyaW5nT3V0cHV0cyBpcyBpZGVudGljYWwgdG8gbV9vdXRwdXRzLgotICAgIFZlY3RvcjxBdWRp
b05vZGVPdXRwdXQqPiBtX3JlbmRlcmluZ091dHB1dHM7CisgICAgUmVuZGVyaW5nT3V0cHV0Q29s
bGVjdGlvbiBtX3JlbmRlcmluZ091dHB1dHM7CiAKICAgICAvLyBtX3JlbmRlcmluZ1N0YXRlTmVl
ZFVwZGF0aW5nIGtlZXBzIHRyYWNrIGlmIG1fb3V0cHV0cyBpcyBtb2RpZmllZC4KICAgICBib29s
IG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgeyBmYWxzZSB9OwogCi1wcml2YXRlOgogICAg
IC8vIG1fb3V0cHV0cyBjb250YWlucyB0aGUgQXVkaW9Ob2RlT3V0cHV0cyByZXByZXNlbnRpbmcg
Y3VycmVudCBjb25uZWN0aW9ucyB3aGljaCBhcmUgbm90IGRpc2FibGVkLgogICAgIC8vIFRoZSBy
ZW5kZXJpbmcgY29kZSBzaG91bGQgbmV2ZXIgdXNlIHRoaXMgZGlyZWN0bHksIGJ1dCBpbnN0ZWFk
IHVzZXMgbV9yZW5kZXJpbmdPdXRwdXRzLgogICAgIEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4g
bV9vdXRwdXRzOwotICAgIFZlY3RvcjxBdWRpb05vZGVPdXRwdXQqPiBtX3BlbmRpbmdSZW5kZXJp
bmdPdXRwdXRzOworICAgIE9wdGlvbmFsPFJlbmRlcmluZ091dHB1dENvbGxlY3Rpb24+IG1fcGVu
ZGluZ1JlbmRlcmluZ091dHB1dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVy
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFu
bmVyTm9kZS5jcHAKaW5kZXggNjIyNDQwYTk0ZWZjOTFkMjAyZThjNDkzN2ZkZjc3NzU5N2E2ODE5
MC4uYzM5ZWI1NzlkNzI5NTZlNTM1NDlhMjFhOTRmYzE0Yzk2YjhkMDA4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb1Bhbm5lck5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVkaW9QYW5uZXJO
b2RlLmNwcApAQCAtMzE5LDggKzMxOSw3IEBAIHZvaWQgV2ViS2l0QXVkaW9QYW5uZXJOb2RlOjpu
b3RpZnlBdWRpb1NvdXJjZXNDb25uZWN0ZWRUb05vZGUoQXVkaW9Ob2RlKiBub2RlLCBICiAgICAg
ICAgICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSBub2RlLT5pbnB1dChpKTsKIAogICAgICAg
ICAgICAgLy8gRm9yIGVhY2ggaW5wdXQsIGdvIHRocm91Z2ggYWxsIG9mIGl0cyBjb25uZWN0aW9u
cywgbG9va2luZyBmb3IgQXVkaW9CdWZmZXJTb3VyY2VOb2Rlcy4KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBpbnB1dC0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygp
OyArK2opIHsKLSAgICAgICAgICAgICAgICBBdWRpb05vZGVPdXRwdXQqIGNvbm5lY3RlZE91dHB1
dCA9IGlucHV0LT5yZW5kZXJpbmdPdXRwdXQoaik7CisgICAgICAgICAgICBmb3IgKGF1dG8qIGNv
bm5lY3RlZE91dHB1dCA6IGlucHV0LT5yZW5kZXJpbmdPdXRwdXRzKCkpIHsKICAgICAgICAgICAg
ICAgICBBdWRpb05vZGUqIGNvbm5lY3RlZE5vZGUgPSBjb25uZWN0ZWRPdXRwdXQtPm5vZGUoKTsK
ICAgICAgICAgICAgICAgICBpZiAodmlzaXRlZE5vZGVzLmNvbnRhaW5zKGNvbm5lY3RlZE5vZGUp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423789</attachid>
            <date>2021-03-19 15:38:54 -0700</date>
            <delta_ts>2021-03-22 11:51:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223529-20210319153853.patch</filename>
            <type>text/plain</type>
            <size>22097</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4NTQ0NWEzMzBkOGNj
YTA4OWUzNDJkMWIyYmI5ZWE3MTM5MDk0My4uNzg4NDIyNTAwMjU2MWY4ZjVlYmQ5MjQ3YzlkY2Mw
OWJiYTZlNDRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIxLTAzLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGVhcCBhbGxvY2F0
aW9uIHVuZGVyIEF1ZGlvTm9kZUlucHV0OjpkaXNhYmxlKCkgLyBBdWRpb05vZGVJbnB1dDo6ZW5h
YmxlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2
b2lkIGhlYXAgYWxsb2NhdGlvbiB1bmRlciBBdWRpb05vZGVJbnB1dDo6ZGlzYWJsZSgpIC8gQXVk
aW9Ob2RlSW5wdXQ6OmVuYWJsZSgpIHNpbmNlIHRob3NlIGNhbgorICAgICAgICBnZXQgY2FsbGVk
IG9uIHRoZSBhdWRpbyB0aHJlYWQuCisKKyAgICAgICAgQXVkaW9Ob2RlSW5wdXQgdXNlZCB0byBo
YXZlIGEgbV9kaXNhYmxlZE91dHB1dHMgY29udGFpbmVyIHRvIGtlZXAgZGlzYWJsZWQgb3V0cHV0
cyBzZXBhcmF0ZWQKKyAgICAgICAgZnJvbSBlbmFibGVkIG9uZXMgKGluIG1fb3V0cHV0cykuIElu
c3RlYWQsIHdlIG5vdyBzdG9yZSBhbGwgb3V0cHV0cyBpbiBtX291dHB1dHMgd2l0aCBhICdpc0Vu
YWJsZWQnCisgICAgICAgIGZsYWcuIEFzIGEgcmVzdWx0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBt
YWtlIGFueSBoZWFwIGFsbG9jYXRpb25zIHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nIGFuCisgICAg
ICAgIG91dHB1dCwgd2UgbWVyZWx5IG5lZWQgdG8gZmxpcCBhIGZsYWcgaW4gbV9vdXRwdXRzLgor
CisgICAgICAgIEZvciBjb252ZW5pZW5jZSwgc2luY2UgY2xpZW50cyBvZiByZW5kZXJpbmcgb3V0
cHV0cyBvbmx5IGNhcmUgYWJvdXQgZW5hYmxlZCBvdXRwdXRzLCBJIGludHJvZHVjZWQKKyAgICAg
ICAgYSBuZXcgUmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbiBjb250YWluZXIgd2l0aCBpdGVyYXRv
cnMuIFRoaXMgd2F5IGNsaWVudHMgZG8gbm90IG5lZWQgdG8gd29ycnkKKyAgICAgICAgYWJvdXQg
ZGlzYWJsZWQgb3V0cHV0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
SW5wdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZERpc2FibGVPdXRwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlSW5wdXQ6OmRpZEVuYWJsZU91dHB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb05vZGVJbnB1dDo6YnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZUlucHV0
OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVJbnB1dDo6
cHVsbCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b05vZGVPdXRwdXQ6OmVuYWJsZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OmNhbGN1bGF0ZUZpbmFsVmFs
dWVzKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpudW1iZXJPZkNvbm5l
Y3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjph
ZGRPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbW92
ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1bW1pbmdKdW5jdGlvbjo6dXBkYXRl
UmVuZGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246
Om1heGltdW1OdW1iZXJPZkNoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U3VtbWluZ0p1bmN0aW9uOjpkaWREaXNhYmxlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpkaWRFbmFibGVPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRlcmlu
Z091dHB1dDo6UmVuZGVyaW5nT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmlu
Z091dHB1dENvbGxlY3Rpb246OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5k
ZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1N1
bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0
aW9uOjpDb25zdEl0ZXJhdG9yOjpDb25zdEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjpDb25zdEl0ZXJh
dG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVu
Y3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9y
IT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRl
cmluZ091dHB1dENvbGxlY3Rpb246OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OlJlbmRlcmluZ091dHB1dENvbGxlY3Rp
b246OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9u
OjpSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OnJlbmRlcmluZ091dHB1dHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OmlzQ29ubmVjdGVkIGNvbnN0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVyTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb1Bhbm5lck5vZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nv
bm5lY3RlZFRvTm9kZSk6CisKIDIwMjEtMDMtMTkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDU5Ni4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAKaW5kZXgg
ODkyMGQ5MTZiMTM0ZmUwNzU5Yjc1YmJkN2Y4NjY2MmZkMjgyMWNkZC4uMDIxYjZiZWVhNGQxMTdj
ZjIzNzYwZTA1Y2NiZWM0YzM1ZGIzNGY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAKQEAgLTUzLDEzICs1Myw3IEBAIHZvaWQg
QXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCiAgICAgaWYg
KCFvdXRwdXQgfHwgIW5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhZGRQb3Rl
bnRpYWxseURpc2FibGVkT3V0cHV0ID0gW3RoaXNdKEF1ZGlvTm9kZU91dHB1dCYgb3V0cHV0KSB7
Ci0gICAgICAgIGlmIChvdXRwdXQuaXNFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gYWRk
T3V0cHV0KG91dHB1dCk7Ci0gICAgICAgIHJldHVybiBtX2Rpc2FibGVkT3V0cHV0cy5hZGQoJm91
dHB1dCkuaXNOZXdFbnRyeTsKLSAgICB9OwotCi0gICAgaWYgKGFkZFBvdGVudGlhbGx5RGlzYWJs
ZWRPdXRwdXQoKm91dHB1dCkpCisgICAgaWYgKGFkZE91dHB1dCgqb3V0cHV0KSkKICAgICAgICAg
b3V0cHV0LT5hZGRJbnB1dCh0aGlzKTsKIH0KIApAQCAtNzYsNDggKzcwLDIzIEBAIHZvaWQgQXVk
aW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCiAgICAgICAg
IG91dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJl
dHVybiBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHNpbmNlIHRoZSBub2RlIG1heSBiZSBkZWxldGVk
LgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8vIE90aGVyd2lzZSwgdHJ5IHRv
IGRpc2Nvbm5lY3QgZnJvbSBkaXNhYmxlZCBjb25uZWN0aW9ucy4KLSAgICBpZiAobV9kaXNhYmxl
ZE91dHB1dHMucmVtb3ZlKG91dHB1dCkpIHsKLSAgICAgICAgb3V0cHV0LT5yZW1vdmVJbnB1dCh0
aGlzKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVy
IHRoaXMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi0gICAgICAgIHJldHVybjsKLSAg
ICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBBdWRpb05vZGVJbnB1
dDo6ZGlzYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6
Om91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpCiB7CiAg
ICAgQVNTRVJUKGNvbnRleHQoKS5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0cHV0
ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9kaXNhYmxlZE91dHB1dHMuYWRkKG91dHB1dCk7Ci0gICAgYm9vbCB3YXNSZW1v
dmVkID0gcmVtb3ZlT3V0cHV0KCpvdXRwdXQpOwotICAgIEFTU0VSVF9VTlVTRUQod2FzUmVtb3Zl
ZCwgd2FzUmVtb3ZlZCk7CisgICAgQXVkaW9TdW1taW5nSnVuY3Rpb246Om91dHB1dEVuYWJsZWRT
dGF0ZUNoYW5nZWQob3V0cHV0KTsKIAogICAgIC8vIFByb3BhZ2F0ZSBkaXNhYmxlZCBzdGF0ZSB0
byBvdXRwdXRzLgotICAgIG5vZGUoKS0+ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSgpOwotfQot
Ci12b2lkIEF1ZGlvTm9kZUlucHV0OjplbmFibGUoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQoKS5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0
cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKKyAgICBBU1NFUlQo
bm9kZSgpKTsKKyAgICBpZiAoIW5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpOwotCi0gICAgLy8gTW92ZSBvdXRw
dXQgZnJvbSBkaXNhYmxlZCBsaXN0IHRvIGFjdGl2ZSBsaXN0LgotICAgIGFkZE91dHB1dCgqb3V0
cHV0KTsKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKLQotICAgIC8vIFBy
b3BhZ2F0ZSBlbmFibGVkIHN0YXRlIHRvIG91dHB1dHMuCi0gICAgbm9kZSgpLT5lbmFibGVPdXRw
dXRzSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAob3V0cHV0LmlzRW5hYmxlZCgpKQorICAgICAgICBu
b2RlKCktPmVuYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSgpOworICAgIGVsc2UKKyAgICAgICAgbm9k
ZSgpLT5kaXNhYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlSW5w
dXQ6OmRpZFVwZGF0ZSgpCkBAIC0xNTgsNyArMTI3LDcgQEAgQXVkaW9CdXMqIEF1ZGlvTm9kZUlu
cHV0OjpidXMoKQogCiAgICAgLy8gSGFuZGxlIHNpbmdsZSBjb25uZWN0aW9uIHNwZWNpYWxseSB0
byBhbGxvdyBmb3IgaW4tcGxhY2UgcHJvY2Vzc2luZy4KICAgICBpZiAobnVtYmVyT2ZSZW5kZXJp
bmdDb25uZWN0aW9ucygpID09IDEgJiYgbm9kZSgpLT5jaGFubmVsQ291bnRNb2RlKCkgPT0gQ2hh
bm5lbENvdW50TW9kZTo6TWF4KQotICAgICAgICByZXR1cm4gcmVuZGVyaW5nT3V0cHV0KDApLT5i
dXMoKTsKKyAgICAgICAgcmV0dXJuICgqcmVuZGVyaW5nT3V0cHV0cygpLmJlZ2luKCkpLT5idXMo
KTsKIAogICAgIC8vIE11bHRpcGxlIGNvbm5lY3Rpb25zIGNhc2Ugb3IgY29tcGxleCBDaGFubmVs
Q291bnRNb2RlIChvciBubyBjb25uZWN0aW9ucykuCiAgICAgcmV0dXJuIGludGVybmFsU3VtbWlu
Z0J1cygpOwpAQCAtMTg2LDcgKzE1NSw3IEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENv
bm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jCiAKICAg
ICBhdXRvIGludGVycHJldGF0aW9uID0gbm9kZSgpLT5jaGFubmVsSW50ZXJwcmV0YXRpb24oKTsK
IAotICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRzKSB7CisgICAgZm9y
IChhdXRvKiBvdXRwdXQgOiByZW5kZXJpbmdPdXRwdXRzKCkpIHsKICAgICAgICAgQVNTRVJUKG91
dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRwdXQuCkBAIC0y
MDEsMTYgKzE3MCwxNyBAQCBBdWRpb0J1cyogQXVkaW9Ob2RlSW5wdXQ6OnB1bGwoQXVkaW9CdXMq
IGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7CiAgICAgQVNTRVJUKGNvbnRl
eHQoKS5pc0F1ZGlvVGhyZWFkKCkpOwogCisgICAgYXV0byBudW1iZXJPZlJlbmRlcmluZ0Nvbm5l
Y3Rpb25zID0gdGhpcy0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOwogICAgIC8vIEhh
bmRsZSBzaW5nbGUgY29ubmVjdGlvbiBjYXNlLgotICAgIGlmIChudW1iZXJPZlJlbmRlcmluZ0Nv
bm5lY3Rpb25zKCkgPT0gMSAmJiBub2RlKCktPmNoYW5uZWxDb3VudE1vZGUoKSA9PSBDaGFubmVs
Q291bnRNb2RlOjpNYXgpIHsKKyAgICBpZiAobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucyA9
PSAxICYmIG5vZGUoKS0+Y2hhbm5lbENvdW50TW9kZSgpID09IENoYW5uZWxDb3VudE1vZGU6Ok1h
eCkgewogICAgICAgICAvLyBUaGUgb3V0cHV0IHdpbGwgb3B0aW1pemUgcHJvY2Vzc2luZyB1c2lu
ZyBpblBsYWNlQnVzIGlmIGl0J3MgYWJsZS4KLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRw
dXQgPSB0aGlzLT5yZW5kZXJpbmdPdXRwdXQoMCk7CisgICAgICAgIEF1ZGlvTm9kZU91dHB1dCog
b3V0cHV0ID0gKnJlbmRlcmluZ091dHB1dHMoKS5iZWdpbigpOwogICAgICAgICByZXR1cm4gb3V0
cHV0LT5wdWxsKGluUGxhY2VCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgfQogCiAgICAgQXVk
aW9CdXMqIGludGVybmFsU3VtbWluZ0J1cyA9IHRoaXMtPmludGVybmFsU3VtbWluZ0J1cygpOwog
Ci0gICAgaWYgKCFudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkpIHsKKyAgICBpZiAoIW51
bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMpIHsKICAgICAgICAgLy8gQXQgbGVhc3QsIGdlbmVy
YXRlIHNpbGVuY2UgaWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZy4KICAgICAgICAg
Ly8gRklYTUU6IGlmIHdlIHdhbnRlZCB0byBnZXQgZmFuY3ksIHdlIGNvdWxkIHByb3BhZ2F0ZSBh
ICdzaWxlbnQgaGludCcgaGVyZSB0byBvcHRpbWl6ZSB0aGUgZG93bnN0cmVhbSBncmFwaCBwcm9j
ZXNzaW5nLgogICAgICAgICBpbnRlcm5hbFN1bW1pbmdCdXMtPnplcm8oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaAppbmRleCAzODE3OGJk
Y2NmYmFhYjY0NTgyYTBjMmQ1MDYxNDkyNDM2NjNkMGJkLi40ZWM5YjUzNmZmNDVhNmZkMjgwOGJj
YmI0NjVhZjYyOTQzYzUzM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVJbnB1dC5oCkBAIC01NSwxMSArNTUsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOwogICAgIHZvaWQgZGlzY29ubmVjdChBdWRpb05v
ZGVPdXRwdXQqKTsKIAotICAgIC8vIGRpc2FibGUoKSB3aWxsIHRha2UgdGhlIG91dHB1dCBvdXQg
b2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0IGFuZCBzZXQgYXNpZGUgaW4gYSBkaXNhYmxl
ZCBsaXN0LgotICAgIC8vIGVuYWJsZSgpIHdpbGwgcHV0IHRoZSBvdXRwdXQgYmFjayBpbnRvIHRo
ZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlzdC4KICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRoIHRo
ZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGVuYWJsZShBdWRpb05vZGVPdXRwdXQq
KTsKLSAgICB2b2lkIGRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0Kik7CisgICAgdm9pZCBvdXRwdXRF
bmFibGVkU3RhdGVDaGFuZ2VkKEF1ZGlvTm9kZU91dHB1dCYpIGZpbmFsOwogCiAgICAgLy8gcHVs
bCgpIHByb2Nlc3NlcyBhbGwgb2YgdGhlIEF1ZGlvTm9kZXMgY29ubmVjdGVkIHRvIHVzLgogICAg
IC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGNvbm5lY3Rpb25zIGl0IHN1bXMgdGhlIHJlc3Vs
dCBpbnRvIGFuIGludGVybmFsIHN1bW1pbmcgYnVzLgpAQCAtODIsMTEgKzc5LDYgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBBdWRpb05vZGUqIG1fbm9kZTsKIAotICAgIC8vIG1fZGlzYWJsZWRP
dXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHdoaWNoIGFyZSBkaXNhYmxlZCAo
d2lsbCBub3QgYmUgcHJvY2Vzc2VkKSBieSB0aGUgYXVkaW8gZ3JhcGggcmVuZGVyaW5nLgotICAg
IC8vIEJ1dCwgZnJvbSBKYXZhU2NyaXB0J3MgcGVyc3BlY3RpdmUsIHRoZXNlIG91dHB1dHMgYXJl
IHN0aWxsIGNvbm5lY3RlZCB0byB1cy4KLSAgICAvLyBHZW5lcmFsbHksIHRoZXNlIHJlcHJlc2Vu
dCBkaXNhYmxlZCBjb25uZWN0aW9ucyBmcm9tICJub3RlcyIgd2hpY2ggaGF2ZSBmaW5pc2hlZCBw
bGF5aW5nIGJ1dCBhcmUgbm90IHlldCBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICBIYXNoU2V0PEF1
ZGlvTm9kZU91dHB1dCo+IG1fZGlzYWJsZWRPdXRwdXRzOwotCiAgICAgLy8gQ2FsbGVkIGZyb20g
Y29udGV4dCdzIGF1ZGlvIHRocmVhZC4KICAgICBBdWRpb0J1cyogaW50ZXJuYWxTdW1taW5nQnVz
KCk7CiAgICAgdm9pZCBzdW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6
ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKaW5kZXggYmEzYmM5MTlmYWFiNzJiNzNlNTFhZWQz
NzgyM2Y3MmM4MDYwNGI3ZS4uYTQwZWNlMzRkNGVmZTlmNDg5MjkwNDhjOTJiM2Y3NjkwMzIxZWU2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
T3V0cHV0LmNwcApAQCAtMjI1LDIyICsyMjUsMjQgQEAgdm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRp
c2FibGUoKQogewogICAgIEFTU0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cy5r
ZXlzKCkpCi0gICAgICAgICAgICBpbnB1dC0+ZGlzYWJsZSh0aGlzKTsKLSAgICAgICAgbV9pc0Vu
YWJsZWQgPSBmYWxzZTsKLSAgICB9CisgICAgaWYgKCFtX2lzRW5hYmxlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
bV9pbnB1dHMua2V5cygpKQorICAgICAgICBpbnB1dC0+b3V0cHV0RW5hYmxlZFN0YXRlQ2hhbmdl
ZCgqdGhpcyk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlT3V0cHV0OjplbmFibGUoKQogewogICAgIEFT
U0VSVChjb250ZXh0KCkuaXNHcmFwaE93bmVyKCkpOwogCi0gICAgaWYgKCFtX2lzRW5hYmxlZCkg
ewotICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMua2V5cygpKQotICAgICAgICAg
ICAgaW5wdXQtPmVuYWJsZSh0aGlzKTsKLSAgICAgICAgbV9pc0VuYWJsZWQgPSB0cnVlOwotICAg
IH0KKyAgICBpZiAobV9pc0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNFbmFi
bGVkID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMua2V5cygpKQorICAg
ICAgICBpbnB1dC0+b3V0cHV0RW5hYmxlZFN0YXRlQ2hhbmdlZCgqdGhpcyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9QYXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uY3BwCmluZGV4IDhkZGQ4NmM2NDEzYTMxZDJhMTA5NDM1MjYwM2IyMDk2MjJmNmFm
ZDYuLmZmNzkwNDk1MTQ5Yzc2YWNkZDAyN2NmZGU0OGEwNGQ4YjZiODIyNWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcApAQCAtMjgxLDcgKzI4
MSw3IEBAIHZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMoZmxvYXQqIHZhbHVl
cywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgQVNTRVJUKG51bWJlck9mVmFsdWVz
IDw9IEF1ZGlvVXRpbGl0aWVzOjpyZW5kZXJRdWFudHVtU2l6ZSk7CiAgICAgbV9zdW1taW5nQnVz
LT5zZXRDaGFubmVsTWVtb3J5KDAsIHZhbHVlcywgc2FtcGxlQWNjdXJhdGUgPyBudW1iZXJPZlZh
bHVlcyA6IDEpOwogCi0gICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMp
IHsKKyAgICBmb3IgKGF1dG8qIG91dHB1dCA6IHJlbmRlcmluZ091dHB1dHMoKSkgewogICAgICAg
ICBBU1NFUlQob3V0cHV0KTsKIAogICAgICAgICAvLyBSZW5kZXIgYXVkaW8gZnJvbSB0aGlzIG91
dHB1dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1N1bW1pbmdKdW5jdGlvbi5jcHAKaW5kZXggN2QxYTI3NGExYmI0OTJmYWMyYjA4Y2UzZmY1NDAw
MWEyMjJlMjI5ZS4uMTJjZGFiYTQ1MDdkYzIxNDcyMGY4Mjc0MDExNmU1OTBiMzAxZTgyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5j
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1p
bmdKdW5jdGlvbi5jcHAKQEAgLTYwLDEwICs2MCwxMyBAQCBib29sIEF1ZGlvU3VtbWluZ0p1bmN0
aW9uOjphZGRPdXRwdXQoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpCiAgICAgaWYgKCFtX291dHB1
dHMuYWRkKCZvdXRwdXQpLmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5k
aW5nUmVuZGVyaW5nT3V0cHV0cyA9IGNvcHlUb1ZlY3RvcihtX291dHB1dHMpOworICAgIGlmICgh
b3V0cHV0LmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9w
ZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAgICAgbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0
cy5lbXBsYWNlKG1fb3V0cHV0cyk7CiAgICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdSZW5kZXJp
bmdPdXRwdXRzLmFwcGVuZCgmb3V0cHV0KTsKKyAgICAgICAgbV9wZW5kaW5nUmVuZGVyaW5nT3V0
cHV0cy0+YXBwZW5kKG91dHB1dCk7CiAKICAgICBtYXJrUmVuZGVyaW5nU3RhdGVBc0RpcnR5KCk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NSwxMCArNzgsMTUgQEAgYm9vbCBBdWRpb1N1bW1pbmdK
dW5jdGlvbjo6cmVtb3ZlT3V0cHV0KEF1ZGlvTm9kZU91dHB1dCYgb3V0cHV0KQogICAgIGlmICgh
bV9vdXRwdXRzLnJlbW92ZSgmb3V0cHV0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMuaXNFbXB0eSgpKQotICAgICAgICBtX3BlbmRp
bmdSZW5kZXJpbmdPdXRwdXRzID0gY29weVRvVmVjdG9yKG1fb3V0cHV0cyk7Ci0gICAgZWxzZQot
ICAgICAgICBtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzLnJlbW92ZUZpcnN0KCZvdXRwdXQpOwor
ICAgIGlmICghb3V0cHV0LmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICghbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAgICAgbV9wZW5kaW5nUmVuZGVy
aW5nT3V0cHV0cy5lbXBsYWNlKG1fb3V0cHV0cyk7CisgICAgZWxzZSB7CisgICAgICAgIGJvb2wg
d2FzUmVtb3ZlZCA9IG1fcGVuZGluZ1JlbmRlcmluZ091dHB1dHMtPnJlbW92ZShvdXRwdXQpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHdhc1JlbW92ZWQsIHdhc1JlbW92ZWQpOworICAgIH0KIAog
ICAgIG1hcmtSZW5kZXJpbmdTdGF0ZUFzRGlydHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkw
LDkgKzk4LDEzIEBAIHZvaWQgQXVkaW9TdW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0
YXRlKCkKIAogICAgIGlmIChtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nICYmIGNhblVwZGF0
ZVN0YXRlKCkpIHsKICAgICAgICAgLy8gQ29weSBmcm9tIG1fb3V0cHV0cyB0byBtX3JlbmRlcmlu
Z091dHB1dHMuCi0gICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0cyA9IHN0ZDo6ZXhjaGFuZ2UobV9w
ZW5kaW5nUmVuZGVyaW5nT3V0cHV0cywgeyB9KTsKLSAgICAgICAgZm9yIChhdXRvJiBvdXRwdXQg
OiBtX3JlbmRlcmluZ091dHB1dHMpCi0gICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmlu
Z1N0YXRlKCk7CisgICAgICAgIGlmICghbV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0cykKKyAgICAg
ICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0cyA9IHsgfTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtX3JlbmRlcmluZ091dHB1dHMgPSAqc3RkOjpleGNoYW5nZShtX3BlbmRpbmdSZW5kZXJp
bmdPdXRwdXRzLCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgZm9yIChhdXRvKiBvdXRwdXQg
OiBtX3JlbmRlcmluZ091dHB1dHMpCisgICAgICAgICAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5k
ZXJpbmdTdGF0ZSgpOworICAgICAgICB9CiAKICAgICAgICAgZGlkVXBkYXRlKCk7CiAKQEAgLTEw
NCw2ICsxMTYsOSBAQCB1bnNpZ25lZCBBdWRpb1N1bW1pbmdKdW5jdGlvbjo6bWF4aW11bU51bWJl
ck9mQ2hhbm5lbHMoKSBjb25zdAogewogICAgIHVuc2lnbmVkIG1heENoYW5uZWxzID0gMDsKICAg
ICBmb3IgKGF1dG8qIG91dHB1dCA6IG1fb3V0cHV0cykgeworICAgICAgICBpZiAoIW91dHB1dC0+
aXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAvLyBVc2Ugb3V0
cHV0KCktPm51bWJlck9mQ2hhbm5lbHMoKSBpbnN0ZWFkIG9mIG91dHB1dC0+YnVzKCktPm51bWJl
ck9mQ2hhbm5lbHMoKSwKICAgICAgICAgLy8gYmVjYXVzZSB0aGUgY2FsbGluZyBvZiBBdWRpb05v
ZGVPdXRwdXQ6OmJ1cygpIGlzIG5vdCBzYWZlIGhlcmUuCiAgICAgICAgIG1heENoYW5uZWxzID0g
c3RkOjptYXgobWF4Q2hhbm5lbHMsIG91dHB1dC0+bnVtYmVyT2ZDaGFubmVscygpKTsKQEAgLTEx
MSw2ICsxMjYsMzAgQEAgdW5zaWduZWQgQXVkaW9TdW1taW5nSnVuY3Rpb246Om1heGltdW1OdW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3QKICAgICByZXR1cm4gbWF4Q2hhbm5lbHM7CiB9CiAKK3ZvaWQg
QXVkaW9TdW1taW5nSnVuY3Rpb246Om91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQoQXVkaW9Ob2Rl
T3V0cHV0JiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS5pc0dyYXBoT3duZXIoKSk7
CisgICAgaWYgKCFtX3BlbmRpbmdSZW5kZXJpbmdPdXRwdXRzKQorICAgICAgICBtX3BlbmRpbmdS
ZW5kZXJpbmdPdXRwdXRzLmVtcGxhY2UobV9vdXRwdXRzKTsKKyAgICBlbHNlCisgICAgICAgIG1f
cGVuZGluZ1JlbmRlcmluZ091dHB1dHMtPnVwZGF0ZWRFbmFibGVkU3RhdGUob3V0cHV0KTsKKyAg
ICBtYXJrUmVuZGVyaW5nU3RhdGVBc0RpcnR5KCk7Cit9CisKK2lubGluZSBBdWRpb1N1bW1pbmdK
dW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6UmVuZGVyaW5nT3V0cHV0OjpSZW5k
ZXJpbmdPdXRwdXQoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCisgICAgOiBvdXRwdXQob3V0cHV0
KQorICAgICwgaXNFbmFibGVkKG91dHB1dC0+aXNFbmFibGVkKCkpCit7IH0KKwordm9pZCBXZWJD
b3JlOjpBdWRpb1N1bW1pbmdKdW5jdGlvbjo6UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbjo6dXBk
YXRlZEVuYWJsZWRTdGF0ZShBdWRpb05vZGVPdXRwdXQmIG91dHB1dCkKK3sKKyAgICBhdXRvIGlu
ZGV4ID0gbV9vdXRwdXRzLmZpbmQoJm91dHB1dCk7CisgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZv
dW5kKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X291dHB1dHNbaW5kZXhdLmlzRW5hYmxlZCA9IG91dHB1dC5pc0VuYWJsZWQoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rp
b24uaAppbmRleCBhMTRiYTI2NDc5ZDAxODYwYjI3MjE0NDI5NzYyYmM1YjAxMjVkNzllLi4wNzli
YjQyNDExOWVlNzVkMzEwMzFmZGJlYzc0ODZkNzUxODIzZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5oCkBAIC0y
NSw2ICsyNSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5j
bHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKQEAgLTQ4LDExICs0OSw3NiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBtdXN0
IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaW4gdGhlIGF1
ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVt
LgogICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKIAorICAgIGNsYXNzIFJlbmRlcmlu
Z091dHB1dENvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgUmVuZGVyaW5nT3V0cHV0
Q29sbGVjdGlvbigpID0gZGVmYXVsdDsKKyAgICAgICAgUmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlv
bihjb25zdCBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+JiBvdXRwdXRzKQorICAgICAgICAgICAg
OiBtX291dHB1dHMoY29weVRvVmVjdG9yT2Y8UmVuZGVyaW5nT3V0cHV0PihvdXRwdXRzKSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgICAgdm9pZCBhcHBl
bmQoQXVkaW9Ob2RlT3V0cHV0JiBvdXRwdXQpIHsgbV9vdXRwdXRzLmFwcGVuZCgmb3V0cHV0KTsg
fQorICAgICAgICBib29sIHJlbW92ZShBdWRpb05vZGVPdXRwdXQmIG91dHB1dCkgeyByZXR1cm4g
bV9vdXRwdXRzLnJlbW92ZUZpcnN0KCZvdXRwdXQpOyB9CisgICAgICAgIHZvaWQgdXBkYXRlZEVu
YWJsZWRTdGF0ZShBdWRpb05vZGVPdXRwdXQmKTsKKworICAgICAgICBzdHJ1Y3QgUmVuZGVyaW5n
T3V0cHV0IHsKKyAgICAgICAgICAgIFJlbmRlcmluZ091dHB1dChBdWRpb05vZGVPdXRwdXQqKTsK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb05vZGVPdXRwdXQqIG90aGVy
KSBjb25zdCB7IHJldHVybiBvdXRwdXQgPT0gb3RoZXI7IH0KKyAgICAgICAgICAgIEF1ZGlvTm9k
ZU91dHB1dCogb3V0cHV0OworICAgICAgICAgICAgYm9vbCBpc0VuYWJsZWQ7CisgICAgICAgIH07
CisKKyAgICAgICAgY2xhc3MgQ29uc3RJdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHNpemVfdDsKKyAgICAgICAgICAgIHVzaW5n
IHZhbHVlX3R5cGUgPSBBdWRpb05vZGVPdXRwdXQqOworICAgICAgICAgICAgdXNpbmcgcG9pbnRl
ciA9IEF1ZGlvTm9kZU91dHB1dCoqOworICAgICAgICAgICAgdXNpbmcgcmVmZXJlbmNlID0gQXVk
aW9Ob2RlT3V0cHV0KiY7CisgICAgICAgICAgICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0
ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CisKKyAgICAgICAgICAgIENvbnN0SXRlcmF0b3IoY29u
c3QgVmVjdG9yPFJlbmRlcmluZ091dHB1dD4mIG91dHB1dHMsIFZlY3RvcjxSZW5kZXJpbmdPdXRw
dXQ+Ojpjb25zdF9pdGVyYXRvciBwb3NpdGlvbikKKyAgICAgICAgICAgICAgICA6IG1fcG9zaXRp
b24ocG9zaXRpb24pCisgICAgICAgICAgICAgICAgLCBtX2VuZChvdXRwdXRzLmVuZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNraXBEaXNhYmxlZE91dHB1dHMoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uLT5vdXRwdXQ7IH0KKyAgICAgICAgICAgIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgICAgICAgICAgY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgICAgIENvbnN0SXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9u
ICE9IG1fZW5kKTsKKyAgICAgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgICAgICAg
ICAgc2tpcERpc2FibGVkT3V0cHV0cygpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdm9pZCBza2lw
RGlzYWJsZWRPdXRwdXRzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
bV9wb3NpdGlvbiAhPSBtX2VuZCAmJiAhbV9wb3NpdGlvbi0+aXNFbmFibGVkKQorICAgICAgICAg
ICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZl
Y3RvcjxSZW5kZXJpbmdPdXRwdXQ+Ojpjb25zdF9pdGVyYXRvciBtX3Bvc2l0aW9uOworICAgICAg
ICAgICAgVmVjdG9yPFJlbmRlcmluZ091dHB1dD46OmNvbnN0X2l0ZXJhdG9yIG1fZW5kOworICAg
ICAgICB9OworCisgICAgICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBD
b25zdEl0ZXJhdG9yIHsgbV9vdXRwdXRzLCBtX291dHB1dHMuYmVnaW4oKSB9OyB9CisgICAgICAg
IENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvciB7IG1fb3V0
cHV0cywgbV9vdXRwdXRzLmVuZCgpIH07IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFZlY3Rv
cjxSZW5kZXJpbmdPdXRwdXQ+IG1fb3V0cHV0czsKKyAgICB9OworCiAgICAgLy8gUmVuZGVyaW5n
IGNvZGUgYWNjZXNzZXMgaXRzIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgY29ubmVjdGlvbnMgaGVy
ZS4KKyAgICBjb25zdCBSZW5kZXJpbmdPdXRwdXRDb2xsZWN0aW9uJiByZW5kZXJpbmdPdXRwdXRz
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzOyB9CiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nT3V0
cHV0cy5zaXplKCk7IH0KLSAgICBBdWRpb05vZGVPdXRwdXQqIHJlbmRlcmluZ091dHB1dCh1bnNp
Z25lZCBpKSB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1dHNbaV07IH0KLSAgICBjb25zdCBBdWRp
b05vZGVPdXRwdXQqIHJlbmRlcmluZ091dHB1dCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmluZ091dHB1dHNbaV07IH0KLSAgICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID4gMDsgfQorICAgIGJvb2wgaXND
b25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhbV9yZW5kZXJpbmdPdXRwdXRzLmlzRW1wdHkoKTsg
fQogCiAgICAgdmlydHVhbCBib29sIGNhblVwZGF0ZVN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRVcGRhdGUoKSA9IDA7CkBAIC02MiwyOSArMTI4LDI3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgbWFya1JlbmRlcmluZ1N0YXRlQXNEaXJ0eSgpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgUmVm
PEJhc2VBdWRpb0NvbnRleHQ+IG1fY29udGV4dDsKLQotICAgIC8vIG51bWJlck9mQ29ubmVjdGlv
bnMoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIGF1ZGlvIHJlbmRlcmluZyB0aHJl
YWQuCi0gICAgLy8gSW5zdGVhZCBudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkgYW5kIHJl
bmRlcmluZ091dHB1dCgpIHNob3VsZCBiZSB1c2VkLgotICAgIHVuc2lnbmVkIG51bWJlck9mQ29u
bmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX291dHB1dHMuc2l6ZSgpOyB9CisgICAgdmlydHVh
bCB2b2lkIG91dHB1dEVuYWJsZWRTdGF0ZUNoYW5nZWQoQXVkaW9Ob2RlT3V0cHV0Jik7CiAKK3By
b3RlY3RlZDoKICAgICB1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Owog
Citwcml2YXRlOgorICAgIFJlZjxCYXNlQXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7CisKICAgICAv
LyBtX3JlbmRlcmluZ091dHB1dHMgaXMgYSBjb3B5IG9mIG1fb3V0cHV0cyB3aGljaCB3aWxsIG5l
dmVyIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZ3JhcGggcmVuZGVyaW5nIG9uIHRoZSBhdWRpbyB0
aHJlYWQuCiAgICAgLy8gVGhpcyBpcyB0aGUgbGlzdCB3aGljaCBpcyB1c2VkIGJ5IHRoZSByZW5k
ZXJpbmcgY29kZS4KICAgICAvLyBXaGVuZXZlciBtX291dHB1dHMgaXMgbW9kaWZpZWQsIHRoZSBj
b250ZXh0IGlzIHRvbGQgc28gaXQgY2FuIGxhdGVyIHVwZGF0ZSBtX3JlbmRlcmluZ091dHB1dHMg
ZnJvbSBtX291dHB1dHMgYXQgYSBzYWZlIHRpbWUuCiAgICAgLy8gTW9zdCBvZiB0aGUgdGltZSwg
bV9yZW5kZXJpbmdPdXRwdXRzIGlzIGlkZW50aWNhbCB0byBtX291dHB1dHMuCi0gICAgVmVjdG9y
PEF1ZGlvTm9kZU91dHB1dCo+IG1fcmVuZGVyaW5nT3V0cHV0czsKKyAgICBSZW5kZXJpbmdPdXRw
dXRDb2xsZWN0aW9uIG1fcmVuZGVyaW5nT3V0cHV0czsKIAogICAgIC8vIG1fcmVuZGVyaW5nU3Rh
dGVOZWVkVXBkYXRpbmcga2VlcHMgdHJhY2sgaWYgbV9vdXRwdXRzIGlzIG1vZGlmaWVkLgogICAg
IGJvb2wgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyB7IGZhbHNlIH07CiAKLXByaXZhdGU6
CiAgICAgLy8gbV9vdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHJlcHJlc2Vu
dGluZyBjdXJyZW50IGNvbm5lY3Rpb25zIHdoaWNoIGFyZSBub3QgZGlzYWJsZWQuCiAgICAgLy8g
VGhlIHJlbmRlcmluZyBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhpcyBkaXJlY3RseSwgYnV0IGlu
c3RlYWQgdXNlcyBtX3JlbmRlcmluZ091dHB1dHMuCiAgICAgSGFzaFNldDxBdWRpb05vZGVPdXRw
dXQqPiBtX291dHB1dHM7Ci0gICAgVmVjdG9yPEF1ZGlvTm9kZU91dHB1dCo+IG1fcGVuZGluZ1Jl
bmRlcmluZ091dHB1dHM7CisgICAgT3B0aW9uYWw8UmVuZGVyaW5nT3V0cHV0Q29sbGVjdGlvbj4g
bV9wZW5kaW5nUmVuZGVyaW5nT3V0cHV0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVkaW9Q
YW5uZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVk
aW9QYW5uZXJOb2RlLmNwcAppbmRleCA2MjI0NDBhOTRlZmM5MWQyMDJlOGM0OTM3ZmRmNzc3NTk3
YTY4MTkwLi5jMzllYjU3OWQ3Mjk1NmU1MzU0OWEyMWE5NGZjMTRjOTZiOGQwMDg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvUGFubmVyTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb1Bh
bm5lck5vZGUuY3BwCkBAIC0zMTksOCArMzE5LDcgQEAgdm9pZCBXZWJLaXRBdWRpb1Bhbm5lck5v
ZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nvbm5lY3RlZFRvTm9kZShBdWRpb05vZGUqIG5vZGUsIEgK
ICAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IG5vZGUtPmlucHV0KGkpOwogCiAg
ICAgICAgICAgICAvLyBGb3IgZWFjaCBpbnB1dCwgZ28gdGhyb3VnaCBhbGwgb2YgaXRzIGNvbm5l
Y3Rpb25zLCBsb29raW5nIGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzLgotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGlucHV0LT5udW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rp
b25zKCk7ICsraikgewotICAgICAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogY29ubmVjdGVk
T3V0cHV0ID0gaW5wdXQtPnJlbmRlcmluZ091dHB1dChqKTsKKyAgICAgICAgICAgIGZvciAoYXV0
byogY29ubmVjdGVkT3V0cHV0IDogaW5wdXQtPnJlbmRlcmluZ091dHB1dHMoKSkgewogICAgICAg
ICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGVkTm9kZSA9IGNvbm5lY3RlZE91dHB1dC0+bm9k
ZSgpOwogICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkTm9kZXMuY29udGFpbnMoY29ubmVjdGVk
Tm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>