<?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>47239</bug_id>
          
          <creation_ts>2010-10-05 18:18:56 -0700</creation_ts>
          <short_desc>Generate the messages sent to the WebPageProxy</short_desc>
          <delta_ts>2010-10-11 17:07:51 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47297</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290021</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-05 18:18:56 -0700</bug_when>
    <thetext>Generate the messages sent to the WebPageProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290028</commentid>
    <comment_count>1</comment_count>
      <attachid>69877</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-05 18:28:19 -0700</bug_when>
    <thetext>Created attachment 69877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290084</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-10-05 21:33:01 -0700</bug_when>
    <thetext>I don&apos;t know what &quot;Generate the messages sent to the WebPageProxy&quot; means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290094</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-05 22:15:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I don&apos;t know what &quot;Generate the messages sent to the WebPageProxy&quot; means.

Fair enough. We currently use an adhoc mechanism for passing messages from one process to the other in WebKit2, where we use generic In() and Out() classes to encode/decode data over the wire.  We are moving a system where we generate specialized typed structs from .messages.in files to make some of the work a little more type safe.

This patch converts messages being sent from the WebProcess to the WebPageProxy to use this new generated technique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290203</commentid>
    <comment_count>4</comment_count>
      <attachid>69877</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-10-06 04:46:09 -0700</bug_when>
    <thetext>Comment on attachment 69877
Patch

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

&gt; WebKit2/ChangeLog:48
&gt; +        * UIProcess/WebPageProxy.cpp:
&gt; +        (WebKit::WebPageProxy::didReceiveMessage):
&gt; +        (WebKit::WebPageProxy::didReceiveSyncMessage):
&gt; +        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didCommitLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didFinishLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didFailLoadForFrame):
&gt; +        (WebKit::WebPageProxy::didReceiveTitleForFrame):
&gt; +        (WebKit::WebPageProxy::didFirstLayoutForFrame):
&gt; +        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
&gt; +        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
&gt; +        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
&gt; +        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):

All this boilerplate isn&apos;t really helpful. Summarizing the kinds of changes made (&quot;Updated to pass a message struct&quot;, &quot;Added new files to the project&quot;, etc.) would be nice. You could remove the individual function names if they all have the same description.

&gt; WebKit2/Scripts/webkit2/messages.py:160
&gt;          &apos;uint16_t&apos;,
&gt;          &apos;uint32_t&apos;,
&gt;          &apos;uint64_t&apos;,
&gt; +        &apos;int8_t&apos;,
&gt; +        &apos;int16_t&apos;,
&gt; +        &apos;int32_t&apos;,
&gt; +        &apos;int64_t&apos;,
&gt;      ])

Maybe we should sort this list.

&gt; WebKit2/Scripts/webkit2/messages.py:333
&gt;      special_cases = {
&gt;          &apos;WTF::String&apos;: &apos;&quot;ArgumentCoders.h&quot;&apos;,
&gt; +        &apos;WebKit::InjectedBundleUserMessageEncoder&apos;: &apos;&quot;InjectedBundleUserMessageCoders.h&quot;&apos;,
&gt;      }

This one, too.

&gt; WebKit2/Scripts/webkit2/messages.py:403
&gt; +    for message in receiver.messages:
&gt; +        if message.reply_parameters is not None:
&gt; +            for reply_parameter in message.reply_parameters:
&gt; +                type = reply_parameter.type
&gt; +                argument_encoder_headers = argument_coder_headers_for_type(type)
&gt; +                if argument_encoder_headers:
&gt; +                    headers.update(argument_encoder_headers)
&gt; +                    continue
&gt; +
&gt; +                type_headers = headers_for_type(type)
&gt; +                headers.update(type_headers)
&gt; +

Looks like you could have used your iterreplyparameters function here. My guess is that you didn&apos;t because you needed the &quot;is not None&quot; check. But iterreplyparameters can do that! (reply_parameter for message in self.messages if message.reply_parameters is not None for reply_parameter in message.reply_parameters)

&gt; WebKit2/Shared/StringPairVector.h:38
&gt; +// This class is a hack to work around the fact that the IPC message generator
&gt; +// cannot deal with class templates with more than one paramter.
&gt; +class StringPairVector {
&gt; +public:

:-(

Obviously we should make the generator smarter!

&gt; WebKit2/UIProcess/WebPageProxy.cpp:624
&gt; -void WebPageProxy::didFailProvisionalLoadForFrame(WebFrameProxy* frame, APIObject* userData)
&gt; +void WebPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
&gt;  {
&gt; -    m_loaderClient.didFailProvisionalLoadWithErrorForFrame(this, frame, userData);
&gt; +    RefPtr&lt;APIObject&gt; userData;
&gt; +    WebContextUserMessageDecoder messageDecoder(userData, pageNamespace()-&gt;context());
&gt; +    if (!arguments-&gt;decode(messageDecoder))
&gt; +        return;

It would be nice to be able to get rid of all this repeated WebContextUserMessageDecoder code.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:744
&gt; +void WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const String&amp; url, uint64_t listenerID)
&gt;  {
&gt; +    WebFrameProxy* frame = process()-&gt;webFrame(frameID);
&gt; +    NavigationType navigationType = static_cast&lt;NavigationType&gt;(opaqueNavigationType);
&gt; +    WebEvent::Modifiers modifiers = static_cast&lt;WebEvent::Modifiers&gt;(opaqueModifiers);
&gt; +    WebMouseEvent::Button mouseButton = static_cast&lt;WebMouseEvent::Button&gt;(opaqueMouseButton);

Maybe someday we can teach the generator how to convert the types for us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290422</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-06 10:31:55 -0700</bug_when>
    <thetext>Landed in r69210.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290536</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 13:11:52 -0700</bug_when>
    <thetext>This seems to somehow have broken Qt:

../../../webkit2/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:33:34: error: WebPageProxyMessages.h: No such file or directory
../../../webkit2/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp: In member function ‘virtual void WebKit::WebEditorClient::registerCommandForUndo(WTF::PassRefPtr&lt;WebCore::EditCommand&gt;)’:
../../../webkit2/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:214: error: ‘Messages’ has not been declared
../../../webkit2/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp: In member function ‘virtual void WebKit::WebEditorClient::clearUndoRedoOperations()’:
../../../webkit2/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:223: error: ‘Messages’ has not been declared
...

Maybe WebPageProxyMessages.h is just missing in the build system</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290537</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 13:14:23 -0700</bug_when>
    <thetext>During qmake I get the following:

WARNING: Failure to find: generated/WebPageProxyMessageReceiver.cpp
WARNING: Failure to find: generated/WebPageProxyMessages.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290540</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 13:22:00 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; During qmake I get the following:
&gt; 
&gt; WARNING: Failure to find: generated/WebPageProxyMessageReceiver.cpp
&gt; WARNING: Failure to find: generated/WebPageProxyMessages.h

From DerivedSources.pro:

UIProcess/WebPageProxy/WebProcess.messages.in

^ this seems wrong

Shouldn&apos;t this be WebKit2/UIProcess/WebPageProxy.messages.in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290546</commentid>
    <comment_count>9</comment_count>
      <attachid>69877</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 13:31:09 -0700</bug_when>
    <thetext>Comment on attachment 69877
Patch

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

&gt; WebKit2/DerivedSources.pro:55
&gt; +processmessageheader_generator.commands = python $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py  $${SRC_ROOT_DIR}/WebKit2/UIProcess/WebPageProxy.messages.in &gt; $$OUTPUT_DIR/WebKit2/generated/WebPageProxyMessages.h

processmessageheader_generator is already used elsewhere, so you need to choose another name or it will get overridden.

&gt; WebKit2/DerivedSources.pro:56
&gt; +processmessageheader_generator.depends  = $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py $${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebProcess.messages.in

$${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebProcess.messages.in should be $${SRC_ROOT_DIR}/WebKit2/UIProcess/WebPageProxy.messages.in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290547</commentid>
    <comment_count>10</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-10-06 13:34:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 69877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69877&amp;action=review
&gt; 
&gt; &gt; WebKit2/DerivedSources.pro:55
&gt; &gt; +processmessageheader_generator.commands = python $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py  $${SRC_ROOT_DIR}/WebKit2/UIProcess/WebPageProxy.messages.in &gt; $$OUTPUT_DIR/WebKit2/generated/WebPageProxyMessages.h
&gt; 
&gt; processmessageheader_generator is already used elsewhere, so you need to choose another name or it will get overridden.
&gt; 
&gt; &gt; WebKit2/DerivedSources.pro:56
&gt; &gt; +processmessageheader_generator.depends  = $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py $${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebProcess.messages.in
&gt; 
&gt; $${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebProcess.messages.in should be $${SRC_ROOT_DIR}/WebKit2/UIProcess/WebPageProxy.messages.in

And also:

./WebKit2/Platform/CoreIPC/qt/ConnectionQt.cpp:31:#include &quot;WebPageProxyMessageKinds.h&quot;

should be changed to include the new WebPageProxyMessages.h to fix the Qt build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290552</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-06 13:37:23 -0700</bug_when>
    <thetext>Guys, the culprit patch landed 3 hours ago, and the Qt bot is still red.

I _strongly_ ask you to use EWS not to break the build!

If you break the build accidentally, you should fix it as soon 
as possible or roll out the patch. All WebKit developers have to 
respect this policy, you shouldn&apos;t ignore the redness of the Qt bot.

I don&apos;t know why do you break the Qt build regularly and leave the bot red ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290554</commentid>
    <comment_count>12</comment_count>
      <attachid>69877</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-06 13:42:43 -0700</bug_when>
    <thetext>Comment on attachment 69877
Patch

Rolled out by http://trac.webkit.org/changeset/69229 , because it broke Windows and Qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290627</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-06 15:47:04 -0700</bug_when>
    <thetext>I was actually hoping the EWS bots would run, but, after many hours of being up for review, they still had not.  Please note, WebKit2 is still experimental and in state where big changes are going to happen from time to time, so please expect build breakages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290628</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-06 15:48:49 -0700</bug_when>
    <thetext>It would also be helpful it the Qt build moved to using DerivedSources.make instead of rolling its own. This would cause less headaches in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290640</commentid>
    <comment_count>15</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-06 16:06:54 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; It would also be helpful it the Qt build moved to using DerivedSources.make instead of rolling its own. This would cause less headaches in the future.

We can&apos;t use that because we are using a totally different toolchain where qmake is the meta-generator. Please note that EWS does not run for patches that got r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290644</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-06 16:11:09 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I was actually hoping the EWS bots would run, but, after many hours of being up for review, they still had not.  
It isn&apos;t true. Qt EWS ran at 2010-10-05 18:32 PST.
(You submitted the patch at 2010-10-05 18:28 PST)
But unfortunately the patch didn&apos;t applied to ToT,
it caused the purple EWS bubbles ...

&gt;Please note, WebKit2 is still experimental and in state where big changes are going to happen from time to time, so please expect build breakages.
I think it is a lame excuse. Build breakages in the trunk for core
builders are absolutely unacceptable. The main goal of the EWS&apos;s is 
not to break the build and not to block others work. 

The correct way should be followed by all developers:
1.) Upload patch with r?
2.) Wait for green EWS bubbles (It takes only 5-10 minutes on Qt.)
3.) If all bubbles are green and the patch is reviewed, commit it.
4.) If one of the bubbles are red, try to fix the build, and goto 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291012</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-07 07:53:25 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I was actually hoping the EWS bots would run, but, after many hours of being up for review, they still had not.  Please note, WebKit2 is still experimental and in state where big changes are going to happen from time to time, so please expect build breakages.

I agree that WebKit2 is still experimental and big refactoring will happen. I don&apos;t want to hinter this in any way, and am OK with a breakage from time to time, if everyone are interested in working together to fix the issues as soon as possible - just like when Adam Roben pinged me on IRC some time ago about an upcoming patch.

As we expect the build breakage, maybe we should not build webkit2 by default on the core builders and have separate builders for that until WebKit2 has become a more stable code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291107</commentid>
    <comment_count>18</comment_count>
      <attachid>70114</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 10:35:21 -0700</bug_when>
    <thetext>Created attachment 70114
Updated Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291108</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 10:36:26 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; I was actually hoping the EWS bots would run, but, after many hours of being up for review, they still had not.  
&gt; It isn&apos;t true. Qt EWS ran at 2010-10-05 18:32 PST.
&gt; (You submitted the patch at 2010-10-05 18:28 PST)
&gt; But unfortunately the patch didn&apos;t applied to ToT,
&gt; it caused the purple EWS bubbles ...

Interesting, I didn&apos;t realize that is what purple meant.  I will keep that in mind next time and upload a more up-to-date patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291109</commentid>
    <comment_count>20</comment_count>
      <attachid>70114</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-07 10:37:27 -0700</bug_when>
    <thetext>Comment on attachment 70114
Updated Patch

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

&gt; WebKit2/DerivedSources.pro:56
&gt; +pageproxymessageheader_generator.depends  = $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py $${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebPageProxy.messages.in

IS this right? Isn&apos;t it just $${SRC_ROOT_DIR}/UIProcess/WebPageProxy.messages.in, thus no WebPageProxy sub dir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291111</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 10:38:19 -0700</bug_when>
    <thetext>Attachment 70114 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Scripts/webkit2/messages.py:196:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKit2/Scripts/webkit2/messages.py:325:  multiple statements on one line (semicolon)  [pep8/E702] [5]
WebKit2/UIProcess/WebPageProxy.cpp:881:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291129</commentid>
    <comment_count>22</comment_count>
      <attachid>70117</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 10:51:37 -0700</bug_when>
    <thetext>Created attachment 70117
Updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291131</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 10:54:18 -0700</bug_when>
    <thetext>Attachment 70117 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Scripts/webkit2/messages.py:196:  expected 2 blank lines, found 1  [pep8/E302] [5]
WebKit2/Scripts/webkit2/messages.py:325:  multiple statements on one line (semicolon)  [pep8/E702] [5]
WebKit2/UIProcess/WebPageProxy.cpp:881:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291132</commentid>
    <comment_count>24</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-07 10:54:50 -0700</bug_when>
    <thetext>Attachment 70114 did not build on qt:
Build output: http://queues.webkit.org/results/4176136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291133</commentid>
    <comment_count>25</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 10:55:01 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Attachment 70114 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
&gt; WebKit2/Scripts/webkit2/messages.py:196:  expected 2 blank lines, found 1  [pep8/E302] [5]
&gt; WebKit2/Scripts/webkit2/messages.py:325:  multiple statements on one line (semicolon)  [pep8/E702] [5]
&gt; WebKit2/UIProcess/WebPageProxy.cpp:881:  More than one command on the same line  [whitespace/newline] [4]
&gt; Total errors found: 3 in 26 files
&gt; 
&gt; 

Fixed all these locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291141</commentid>
    <comment_count>26</comment_count>
      <attachid>70117</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-07 11:02:03 -0700</bug_when>
    <thetext>Comment on attachment 70117
Updated.

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

&gt; WebKit2/DerivedSources.pro:56
&gt; +pageproxymessageheader_generator.depends  = $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py $${SRC_ROOT_DIR}/UIProcess/WebPageProxy/WebPageProxy.messages.in

You forgot to add WebKit2 to the path:

pageproxymessageheader_generator.depends = $${SRC_ROOT_DIR}/WebKit2/Scripts/generate-messages-header.py $${SRC_ROOT_DIR}/WebKit2/UIProcess/WebPageProxy/WebPageProxy.messages.in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291142</commentid>
    <comment_count>27</comment_count>
      <attachid>70118</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 11:03:02 -0700</bug_when>
    <thetext>Created attachment 70118
Updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291146</commentid>
    <comment_count>28</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-07 11:09:21 -0700</bug_when>
    <thetext>You can click on the purple bobble to find out what when wrong. It seems to not be able to apply the patch due to the xcode file:

Hunk #11 FAILED at 1947.
Hunk #12 FAILED at 2246.
2 out of 12 hunks FAILED -- saving rejects to file WebKit2/WebKit2.xcodeproj/project.pbxproj.rej</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291150</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-07 11:12:12 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; You can click on the purple bobble to find out what when wrong. It seems to not be able to apply the patch due to the xcode file:
&gt; 
&gt; Hunk #11 FAILED at 1947.
&gt; Hunk #12 FAILED at 2246.
&gt; 2 out of 12 hunks FAILED -- saving rejects to file WebKit2/WebKit2.xcodeproj/project.pbxproj.rej

It seems http://trac.webkit.org/changeset/69323 broke the appliable of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291158</commentid>
    <comment_count>30</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-10-07 11:20:29 -0700</bug_when>
    <thetext>I&apos;ll land this now and make sure that any Qt build errors are resolved quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291162</commentid>
    <comment_count>31</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-10-07 11:32:19 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; I&apos;ll land this now and make sure that any Qt build errors are resolved quickly.

Thank you very much for doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291168</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-07 11:42:13 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; I&apos;ll land this now and make sure that any Qt build errors are resolved quickly.

I tried it locally, and I got the following build error:

In file included from ../../../WebKit2/UIProcess/API/qt/ClientImpl.cpp:27:
../../../WebKit2/UIProcess/API/qt/qwkpage_p.h:56: error: ‘WebPageProxy’ has not been declared

You can fix it easily with adding a &quot;using namespace WebKit;&quot; to qwkpage_p.h,
because WebPageProxy class is defined in WebKit namespace. It works for me locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291183</commentid>
    <comment_count>33</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-10-07 12:33:01 -0700</bug_when>
    <thetext>Committed r69329: &lt;http://trac.webkit.org/changeset/69329&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69877</attachid>
            <date>2010-10-05 18:28:19 -0700</date>
            <delta_ts>2010-10-07 10:35:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gen.diff</filename>
            <type>text/plain</type>
            <size>136513</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE2NCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQwIEBACisyMDEwLTEwLTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR2VuZXJh
dGUgdGhlIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIFdlYlBhZ2VQcm94eQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzkKKworICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAgICAq
IFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRzLmg6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQ
Qy9IYW5kbGVNZXNzYWdlLmg6CisgICAgICAgIChDb3JlSVBDOjpoYW5kbGVNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL0Nv
cmVJUENTdXBwb3J0L1dlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpT
dHJpbmdQYWlyVmVjdG9yOjpTdHJpbmdQYWlyVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6U3Ry
aW5nUGFpclZlY3Rvcjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U3RyaW5nUGFpclZlY3Rv
cjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6U3RyaW5nUGFpclZlY3Rvcjo6c3RyaW5nUGFp
clZlY3Rvcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6
cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdl
X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENv
bW1hbmRQcm94eTo6dW5hcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJv
eHk6OnJlYXBwbHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm9ybUNsaWVudDo6d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRGYWlsTG9hZEZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJ1bkphdmFT
Y3JpcHRBbGVydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlw
dENvbmZpcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQ
cm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Om1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb250ZW50c1NpemVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEFkZEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0l0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQ3VycmVudEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kRm9y
VW5kbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xlYXJBbGxFZGl0Q29tbWFu
ZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFZhbGlkYXRlTWVudUl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93
aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlZ2lzdGVyRWRpdENv
bW1hbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdl
YktpdDIucHJvOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6dGFrZUZvY3VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNo
cm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OnNldFN0YXR1c2JhclRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OmNvbnRlbnRzU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZWdp
c3RlckNvbW1hbmRGb3JVbmRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpj
bGVhclVuZG9SZWRvT3BlcmF0aW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFs
TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZEZhaWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpcnN0TGF5b3V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRl
ckNsaWVudDo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3Rp
ZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6cG9zdFBy
b2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjphZGRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OmdvVG9JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OmJhY2tJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OmN1cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OmZvcndhcmRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6Oml0ZW1BdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OmJhY2tMaXN0Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQ
cm94eTo6Zm9yd2FyZExpc3RDb3VudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Y2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VuZENsb3NlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6bW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OndoZWVsRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjprZXlFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnZhbGlkYXRlTWVudUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojp0b3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2hvdyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U291cmNlRm9yRnJhbWUpOgorICAgICAgICAqIHdp
bi9XZWJLaXQyLnZjcHJvajoKKwogMjAxMC0xMC0wNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBX
ZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktpdDIvRGVyaXZlZFNvdXJjZXMu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL1BsdWdpbnMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9XZWJQ
YWdlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MgXAorICAgICQoV2ViS2l0MikvVUlQcm9j
ZXNzIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9QbHVnaW5zIFwKICMKIApAQCAtMTIsNiAr
MTMsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAog
ICAgIFBsdWdpblByb3h5IFwKICAgICBXZWJQYWdlIFwKKyAgICBXZWJQYWdlUHJveHkgXAogICAg
IFdlYlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25uZWN0aW9uIFwKICMKSW5kZXg6IFdlYktp
dDIvRGVyaXZlZFNvdXJjZXMucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvRGVyaXZlZFNvdXJj
ZXMucHJvCShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxOCBAQCBtZXNzYWdlcmVjZWl2ZXJfZ2VuZXJhdG9y
LnRhcmdldCAgID0gJCR7CiBnZW5lcmF0ZWRfZmlsZXMuZGVwZW5kcyAgICAgICAgICAgICs9IG1l
c3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IKIFFNQUtFX0VYVFJBX1RBUkdFVFMgICAgICAgICAgICAg
ICAgKz0gbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvcgogCitwcm9jZXNzbWVzc2FnZWhlYWRlcl9n
ZW5lcmF0b3IuY29tbWFuZHMgPSBweXRob24gJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1Njcmlw
dHMvZ2VuZXJhdGUtbWVzc2FnZXMtaGVhZGVyLnB5ICAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiA+ICQkT1VUUFVUX0RJUi9XZWJLaXQy
L2dlbmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdlcy5oCitwcm9jZXNzbWVzc2FnZWhlYWRlcl9n
ZW5lcmF0b3IuZGVwZW5kcyAgPSAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5l
cmF0ZS1tZXNzYWdlcy1oZWFkZXIucHkgJCR7U1JDX1JPT1RfRElSfS9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5L1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KK3Byb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVy
YXRvci50YXJnZXQgICA9ICQke09VVFBVVF9ESVJ9L1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgKK2dlbmVyYXRlZF9maWxlcy5kZXBlbmRzICAgICAgICAgICAgICAgICAr
PSBwcm9jZXNzbWVzc2FnZWhlYWRlcl9nZW5lcmF0b3IKK1FNQUtFX0VYVFJBX1RBUkdFVFMgICAg
ICAgICAgICAgICAgICAgICArPSBwcm9jZXNzbWVzc2FnZWhlYWRlcl9nZW5lcmF0b3IKKworcHJv
Y2Vzc21lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IuY29tbWFuZHMgPSBweXRob24gJCR7U1JDX1JP
T1RfRElSfS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weSAgJCR7
U1JDX1JPT1RfRElSfS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4g
PiAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUGFnZVByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcAorcHJvY2Vzc21lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IuZGVwZW5kcyAgPSAkJHtT
UkNfUk9PVF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5
ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCitwcm9jZXNzbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvci50YXJnZXQgICA9ICQke09VVFBV
VF9ESVJ9L1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
K2dlbmVyYXRlZF9maWxlcy5kZXBlbmRzICAgICAgICAgICAgICAgICAgICs9IHByb2Nlc3NtZXNz
YWdlcmVjZWl2ZXJfZ2VuZXJhdG9yCitRTUFLRV9FWFRSQV9UQVJHRVRTICAgICAgICAgICAgICAg
ICAgICAgICArPSBwcm9jZXNzbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvcgorCiBwcm9jZXNzbWVz
c2FnZWhlYWRlcl9nZW5lcmF0b3IuY29tbWFuZHMgPSBweXRob24gJCR7U1JDX1JPT1RfRElSfS9X
ZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZXMtaGVhZGVyLnB5ICAkJHtTUkNfUk9PVF9E
SVJ9L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluID4gJCRPVVRQVVRf
RElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlByb2Nlc3NNZXNzYWdlcy5oCiBwcm9jZXNzbWVzc2Fn
ZWhlYWRlcl9nZW5lcmF0b3IuZGVwZW5kcyAgPSAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvU2Ny
aXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIucHkgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogcHJvY2Vzc21lc3NhZ2VoZWFkZXJf
Z2VuZXJhdG9yLnRhcmdldCAgID0gJCR7T1VUUFVUX0RJUn0vV2ViS2l0Mi9nZW5lcmF0ZWQvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1dlYktp
dDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTAgKzE0MSwxMiBAQCBERUZJTkVTICs9IEJV
SUxESU5HX1FUX18KIAogV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUyA9IFwKICAgICAkJE9VVFBV
VF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUGFnZU1lc3NhZ2VzLmggXAorICAgICQkT1VUUFVU
X0RJUi9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdlcy5oIFwKICAgICAkJE9V
VFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUHJvY2Vzc01lc3NhZ2VzLmgKIAogV0VCS0lU
Ml9HRU5FUkFURURfU09VUkNFUyA9IFwKICAgICAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0
ZWQvV2ViUGFnZU1lc3NhZ2VSZWNlaXZlci5jcHAgXAorICAgICQkT1VUUFVUX0RJUi9XZWJLaXQy
L2dlbmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKICAgICAkJE9VVFBV
VF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIAog
SEVBREVSUyArPSBcCkBAIC0xNzYsNyArMTc4LDYgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVk
L0FQSS9jL1dLVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0L0RyYXdp
bmdBcmVhTWVzc2FnZUtpbmRzLmggXAogICAgIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5n
QXJlYVByb3h5TWVzc2FnZUtpbmRzLmggXAotICAgIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQ
YWdlUHJveHlNZXNzYWdlS2luZHMuaCBcCiAgICAgU2hhcmVkL0NhY2hlTW9kZWwuaCBcCiAgICAg
U2hhcmVkL0RyYXdpbmdBcmVhQmFzZS5oIFwKICAgICBTaGFyZWQvSW1tdXRhYmxlQXJyYXkuaCBc
CkBAIC0xODUsNiArMTg2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL011dGFibGVEaWN0
aW9uYXJ5LmggXAogICAgIFNoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggXAogICAgIFNo
YXJlZC9Ob3RJbXBsZW1lbnRlZC5oIFwKKyAgICBTaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oIFwK
ICAgICBTaGFyZWQvcXQvTWFwcGVkTWVtb3J5LmggXAogICAgIFNoYXJlZC9xdC9QbGF0Zm9ybUNl
cnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaCBcCkluZGV4OiBX
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYg
KzIwOCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
LCB0eXBlbmFtZSBUNT4gY2xhc3MgQXJndW1lbnRzNSA6IEFyZ3VtZW50czQ8VDEsIFQyLCBUMywg
VDQ+IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFQxIEZpcnN0QXJndW1lbnRUeXBlOworICAgIHR5
cGVkZWYgVDIgU2Vjb25kQXJndW1lbnRUeXBlOworICAgIHR5cGVkZWYgVDMgVGhpcmRBcmd1bWVu
dFR5cGU7CisgICAgdHlwZWRlZiBUNCBGb3VydGhBcmd1bWVudFR5cGU7CisgICAgdHlwZWRlZiBU
NSBGaWZ0aEFyZ3VtZW50VHlwZTsKKwogICAgIEFyZ3VtZW50czUoVDEgdDEsIFQyIHQyLCBUMyB0
MywgVDQgdDQsIFQ1IHQ1KQogICAgICAgICA6IEFyZ3VtZW50czQ8VDEsIFQyLCBUMywgVDQ+KHQx
LCB0MiwgdDMsIHQ0KQogICAgICAgICAsIG1fdmFsdWUodDUpCkluZGV4OiBXZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9IYW5kbGVNZXNzYWdlLmgJKHJldmlzaW9uIDY5MTE5KQorKysgV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKwogI2lmbmRlZiBIYW5kbGVNZXNzYWdlX2gKICNkZWZpbmUgSGFu
ZGxlTWVzc2FnZV9oCiAKQEAgLTIxLDYgKzQ2LDEyIEBAIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1
bWVudERlY29kZXIqIGFyZ3UKICAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3VtZW50KTsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQz4KK3ZvaWQgaGFuZGxlTWVzc2FnZShB
cmd1bWVudERlY29kZXIqIGFyZ3VtZW50cywgQyogb2JqZWN0LCB2b2lkIChDOjoqZnVuY3Rpb24p
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbiko
YXJndW1lbnRzKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5h
bWUgUDEsIHR5cGVuYW1lIFAyPgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnRzLCBDKiBvYmplY3QsIHZvaWQgKEM6OipmdW5jdGlvbikoUDEsIFAyKSkKIHsKQEAg
LTMzLDYgKzY0LDE1IEBAIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1bWVudERlY29kZXIqIGFyZ3UK
ICAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50KTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgUDE+Cit2b2lk
IGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9p
ZCAoQzo6KmZ1bmN0aW9uKShQMSwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikpCit7CisgICAg
dHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6
VHlwZSBmaXJzdEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1
bWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJn
dW1lbnQsIGFyZ3VtZW50cyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDM+CiB2b2lkIGhhbmRsZU1lc3Nh
Z2UoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0
aW9uKShQMSwgUDIsIFAzKSkKIHsKQEAgLTQ4LDYgKzg4LDkwIEBAIHZvaWQgaGFuZGxlTWVzc2Fn
ZShBcmd1bWVudERlY29kZXIqIGFyZ3UKICAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJn
dW1lbnQsIHNlY29uZEFyZ3VtZW50LCB0aGlyZEFyZ3VtZW50KTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyPgordm9pZCBoYW5k
bGVNZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzLCBDKiBvYmplY3QsIHZvaWQgKEM6
OipmdW5jdGlvbikoUDEsIFAyLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSkKK3sKKyAgICB0
eXBlbmFtZSBSZW1vdmVSZWZlcmVuY2U8dHlwZW5hbWUgVDo6Rmlyc3RBcmd1bWVudFR5cGU+OjpU
eXBlIGZpcnN0QXJndW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShmaXJzdEFyZ3Vt
ZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBl
bmFtZSBUOjpTZWNvbmRBcmd1bWVudFR5cGU+OjpUeXBlIHNlY29uZEFyZ3VtZW50OworICAgIGlm
ICghYXJndW1lbnRzLT5kZWNvZGUoc2Vjb25kQXJndW1lbnQpKQorICAgICAgICByZXR1cm47Cisg
ICAgKG9iamVjdC0+KmZ1bmN0aW9uKShmaXJzdEFyZ3VtZW50LCBzZWNvbmRBcmd1bWVudCwgYXJn
dW1lbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUg
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQ+Cit2b2lkIGhhbmRsZU1l
c3NhZ2UoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1
bmN0aW9uKShQMSwgUDIsIFAzLCBQNCkpCit7CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNl
PHR5cGVuYW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6VHlwZSBmaXJzdEFyZ3VtZW50OworICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1bWVudCkpCisgICAgICAgIHJldHVybjsK
KyAgICB0eXBlbmFtZSBSZW1vdmVSZWZlcmVuY2U8dHlwZW5hbWUgVDo6U2Vjb25kQXJndW1lbnRU
eXBlPjo6VHlwZSBzZWNvbmRBcmd1bWVudDsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKHNl
Y29uZEFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVy
ZW5jZTx0eXBlbmFtZSBUOjpUaGlyZEFyZ3VtZW50VHlwZT46OlR5cGUgdGhpcmRBcmd1bWVudDsK
KyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKHRoaXJkQXJndW1lbnQpKQorICAgICAgICByZXR1
cm47CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OkZvdXJ0aEFyZ3Vt
ZW50VHlwZT46OlR5cGUgZm91cnRoQXJndW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShmb3VydGhBcmd1bWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICAob2JqZWN0LT4qZnVuY3Rp
b24pKGZpcnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50LCB0aGlyZEFyZ3VtZW50LCBmb3VydGhB
cmd1bWVudCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDM+Cit2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0aW9uKShQMSwg
UDIsIFAzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSkKK3sKKyAgICB0eXBlbmFtZSBSZW1v
dmVSZWZlcmVuY2U8dHlwZW5hbWUgVDo6Rmlyc3RBcmd1bWVudFR5cGU+OjpUeXBlIGZpcnN0QXJn
dW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShmaXJzdEFyZ3VtZW50KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpTZWNv
bmRBcmd1bWVudFR5cGU+OjpUeXBlIHNlY29uZEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUoc2Vjb25kQXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgdHlwZW5hbWUg
UmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlRoaXJkQXJndW1lbnRUeXBlPjo6VHlwZSB0aGly
ZEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUodGhpcmRBcmd1bWVudCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJndW1lbnQsIHNl
Y29uZEFyZ3VtZW50LCB0aGlyZEFyZ3VtZW50LCBhcmd1bWVudHMpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDU+Cit2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0aW9uKShQMSwg
UDIsIFAzLCBQNCwgUDUpKQoreworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFt
ZSBUOjpGaXJzdEFyZ3VtZW50VHlwZT46OlR5cGUgZmlyc3RBcmd1bWVudDsKKyAgICBpZiAoIWFy
Z3VtZW50cy0+ZGVjb2RlKGZpcnN0QXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgdHlw
ZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlNlY29uZEFyZ3VtZW50VHlwZT46OlR5
cGUgc2Vjb25kQXJndW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShzZWNvbmRBcmd1
bWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICB0eXBlbmFtZSBSZW1vdmVSZWZlcmVuY2U8dHlw
ZW5hbWUgVDo6VGhpcmRBcmd1bWVudFR5cGU+OjpUeXBlIHRoaXJkQXJndW1lbnQ7CisgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZSh0aGlyZEFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpGb3VydGhBcmd1bWVudFR5cGU+
OjpUeXBlIGZvdXJ0aEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZm91cnRo
QXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNl
PHR5cGVuYW1lIFQ6OkZpZnRoQXJndW1lbnRUeXBlPjo6VHlwZSBmaWZ0aEFyZ3VtZW50OworICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlmdGhBcmd1bWVudCkpCisgICAgICAgIHJldHVybjsK
KyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50LCB0
aGlyZEFyZ3VtZW50LCBmb3VydGhBcmd1bWVudCwgZmlmdGhBcmd1bWVudCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIFA0Pgordm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2Rl
ciogYXJndW1lbnRzLCBDKiBvYmplY3QsIHZvaWQgKEM6OipmdW5jdGlvbikoUDEsIFAyLCBQMywg
UDQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopKQoreworICAgIHR5cGVuYW1lIFJlbW92ZVJl
ZmVyZW5jZTx0eXBlbmFtZSBUOjpGaXJzdEFyZ3VtZW50VHlwZT46OlR5cGUgZmlyc3RBcmd1bWVu
dDsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKGZpcnN0QXJndW1lbnQpKQorICAgICAgICBy
ZXR1cm47CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlNlY29uZEFy
Z3VtZW50VHlwZT46OlR5cGUgc2Vjb25kQXJndW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRl
Y29kZShzZWNvbmRBcmd1bWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICB0eXBlbmFtZSBSZW1v
dmVSZWZlcmVuY2U8dHlwZW5hbWUgVDo6VGhpcmRBcmd1bWVudFR5cGU+OjpUeXBlIHRoaXJkQXJn
dW1lbnQ7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZSh0aGlyZEFyZ3VtZW50KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpGb3Vy
dGhBcmd1bWVudFR5cGU+OjpUeXBlIGZvdXJ0aEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUoZm91cnRoQXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgKG9iamVjdC0+
KmZ1bmN0aW9uKShmaXJzdEFyZ3VtZW50LCBzZWNvbmRBcmd1bWVudCwgdGhpcmRBcmd1bWVudCwg
Zm91cnRoQXJndW1lbnQsIGFyZ3VtZW50cyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEMsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgUDY+CiB2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMsIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0aW9uKShQMSwg
UDIsIFAzLCBQNCwgUDUsIFA2KSkKIHsKQEAgLTEwOSw2ICsyMzMsNTIgQEAgdm9pZCBoYW5kbGVN
ZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndQogICAgIChvYmplY3QtPipmdW5jdGlvbikoZmly
c3RBcmd1bWVudCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBQMj4KK3ZvaWQgaGFuZGxlTWVzc2FnZShBcmd1bWVudERlY29kZXIq
IGFyZ3VtZW50cywgQXJndW1lbnRFbmNvZGVyKiByZXBseSwgQyogb2JqZWN0LCB2b2lkIChDOjoq
ZnVuY3Rpb24pKFAxLCBQMikpCit7CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVu
YW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6VHlwZSBmaXJzdEFyZ3VtZW50OworICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpTZWNvbmRBcmd1bWVudFR5cGU+
OjpUeXBlIHNlY29uZEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoc2Vjb25k
QXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZp
cnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQywgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyPgordm9pZCBoYW5kbGVNZXNzYWdl
KEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzLCBBcmd1bWVudEVuY29kZXIqIHJlcGx5LCBDKiBv
YmplY3QsIHZvaWQgKEM6OipmdW5jdGlvbikoUDEsIGNvbnN0IFAyJikpCit7CisgICAgdHlwZW5h
bWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6VHlwZSBm
aXJzdEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1bWVudCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFt
ZSBUOjpTZWNvbmRBcmd1bWVudFR5cGU+OjpUeXBlIHNlY29uZEFyZ3VtZW50OworICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoc2Vjb25kQXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgUjE+Cit2b2lkIGhh
bmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIEFyZ3VtZW50RW5jb2Rlciog
cmVwbHksIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0aW9uKShSMSYpKQoreworICAgIHR5cGVu
YW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpSZXBseTo6Rmlyc3RBcmd1bWVudFR5cGU+
OjpUeXBlIGZpcnN0UmVwbHlBcmd1bWVudDsKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGZpcnN0
UmVwbHlBcmd1bWVudCk7CisgICAgcmVwbHktPmVuY29kZShmaXJzdFJlcGx5QXJndW1lbnQpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBSMSwgdHlwZW5h
bWUgUjI+Cit2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIEFy
Z3VtZW50RW5jb2RlciogcmVwbHksIEMqIG9iamVjdCwgdm9pZCAoQzo6KmZ1bmN0aW9uKShSMSYs
IFIyJikpCit7CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlJlcGx5
OjpGaXJzdEFyZ3VtZW50VHlwZT46OlR5cGUgZmlyc3RSZXBseUFyZ3VtZW50OworICAgIHR5cGVu
YW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpSZXBseTo6U2Vjb25kQXJndW1lbnRUeXBl
Pjo6VHlwZSBzZWNvbmRSZXBseUFyZ3VtZW50OworICAgIChvYmplY3QtPipmdW5jdGlvbikoZmly
c3RSZXBseUFyZ3VtZW50LCBzZWNvbmRSZXBseUFyZ3VtZW50KTsKKyAgICByZXBseS0+ZW5jb2Rl
KGZpcnN0UmVwbHlBcmd1bWVudCk7CisgICAgcmVwbHktPmVuY29kZShzZWNvbmRSZXBseUFyZ3Vt
ZW50KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIFIxPgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndW1l
bnRzLCBBcmd1bWVudEVuY29kZXIqIHJlcGx5LCBDKiBvYmplY3QsIHZvaWQgKEM6OipmdW5jdGlv
bikoUDEsIFIxJikpCiB7CkBAIC0xMjEsNiArMjkxLDIyIEBAIHZvaWQgaGFuZGxlTWVzc2FnZShB
cmd1bWVudERlY29kZXIqIGFyZ3UKICAgICByZXBseS0+ZW5jb2RlKGZpcnN0UmVwbHlBcmd1bWVu
dCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIFAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgUjE+Cit2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMsIEFyZ3VtZW50RW5jb2RlciogcmVwbHksIEMqIG9iamVjdCwgdm9pZCAo
Qzo6KmZ1bmN0aW9uKShQMSwgUDIsIFIxJikpCit7CisgICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJl
bmNlPHR5cGVuYW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6VHlwZSBmaXJzdEFyZ3VtZW50Owor
ICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1bWVudCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpTZWNvbmRBcmd1
bWVudFR5cGU+OjpUeXBlIHNlY29uZEFyZ3VtZW50OworICAgIGlmICghYXJndW1lbnRzLT5kZWNv
ZGUoc2Vjb25kQXJndW1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdHlwZW5hbWUg
UmVtb3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlJlcGx5OjpGaXJzdEFyZ3VtZW50VHlwZT46OlR5
cGUgZmlyc3RSZXBseUFyZ3VtZW50OworICAgIChvYmplY3QtPipmdW5jdGlvbikoZmlyc3RBcmd1
bWVudCwgc2Vjb25kQXJndW1lbnQsIGZpcnN0UmVwbHlBcmd1bWVudCk7CisgICAgcmVwbHktPmVu
Y29kZShmaXJzdFJlcGx5QXJndW1lbnQpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBDLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBS
MT4KIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cywgQXJndW1l
bnRFbmNvZGVyKiByZXBseSwgQyogb2JqZWN0LCB2b2lkIChDOjoqZnVuY3Rpb24pKFAxLCBQMiwg
UDMsIFIxJikpCiB7CkBAIC0xNjUsMjIgKzM1MSw2IEBAIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1
bWVudERlY29kZXIqIGFyZ3UKICAgICByZXBseS0+ZW5jb2RlKGZpcnN0UmVwbHlBcmd1bWVudCk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgUjE+Ci12b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVy
KiBhcmd1bWVudHMsIEFyZ3VtZW50RW5jb2RlciogcmVwbHksIEMqIG9iamVjdCwgdm9pZCAoQzo6
KmZ1bmN0aW9uKShQMSwgUDIsIFIxJikpCi17Ci0gICAgdHlwZW5hbWUgUmVtb3ZlUmVmZXJlbmNl
PHR5cGVuYW1lIFQ6OkZpcnN0QXJndW1lbnRUeXBlPjo6VHlwZSBmaXJzdEFyZ3VtZW50OwotICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUoZmlyc3RBcmd1bWVudCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHR5cGVuYW1lIFJlbW92ZVJlZmVyZW5jZTx0eXBlbmFtZSBUOjpTZWNvbmRBcmd1bWVu
dFR5cGU+OjpUeXBlIHNlY29uZEFyZ3VtZW50OwotICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
c2Vjb25kQXJndW1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdHlwZW5hbWUgUmVt
b3ZlUmVmZXJlbmNlPHR5cGVuYW1lIFQ6OlJlcGx5OjpGaXJzdEFyZ3VtZW50VHlwZT46OlR5cGUg
Zmlyc3RSZXBseUFyZ3VtZW50OwotICAgIChvYmplY3QtPipmdW5jdGlvbikoZmlyc3RBcmd1bWVu
dCwgc2Vjb25kQXJndW1lbnQsIGZpcnN0UmVwbHlBcmd1bWVudCk7Ci0gICAgcmVwbHktPmVuY29k
ZShmaXJzdFJlcGx5QXJndW1lbnQpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNl
bmRpZiAvLyBIYW5kbGVNZXNzYWdlX2gKSW5kZXg6IFdlYktpdDIvU2NyaXB0cy93ZWJraXQyL21l
c3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2Vz
LnB5CShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2Vz
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw5IEBAIGNsYXNzIE1lc3NhZ2VSZWNlaXZl
cihvYmplY3QpOgogICAgIGRlZiBpdGVycGFyYW1ldGVycyhzZWxmKToKICAgICAgICAgcmV0dXJu
IChwYXJhbWV0ZXIgZm9yIG1lc3NhZ2UgaW4gc2VsZi5tZXNzYWdlcyBmb3IgcGFyYW1ldGVyIGlu
IG1lc3NhZ2UucGFyYW1ldGVycykKIAorICAgIGRlZiBpdGVycmVwbHlwYXJhbWV0ZXJzKHNlbGYp
OgorICAgICAgICByZXR1cm4gKHJlcGx5X3BhcmFtZXRlciBmb3IgbWVzc2FnZSBpbiBzZWxmLm1l
c3NhZ2VzIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzKQor
CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHBhcnNlKGNscywgZmlsZSk6CiAgICAgICAgIGRl
c3RpbmF0aW9uID0gTm9uZQpAQCAtMTUwLDYgKzE1MywxMCBAQCBkZWYgZnVuY3Rpb25fcGFyYW1l
dGVyX3R5cGUodHlwZSk6CiAgICAgICAgICd1aW50MTZfdCcsCiAgICAgICAgICd1aW50MzJfdCcs
CiAgICAgICAgICd1aW50NjRfdCcsCisgICAgICAgICdpbnQ4X3QnLAorICAgICAgICAnaW50MTZf
dCcsCisgICAgICAgICdpbnQzMl90JywKKyAgICAgICAgJ2ludDY0X3QnLAogICAgIF0pCiAKICAg
ICBpZiB0eXBlIGluIGJ1aWx0aW5fdHlwZXM6CkBAIC0zMjIsNiArMzI5LDcgQEAgZGVmIGFyZ3Vt
ZW50X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZQogCiAgICAgc3BlY2lhbF9jYXNlcyA9IHsK
ICAgICAgICAgJ1dURjo6U3RyaW5nJzogJyJBcmd1bWVudENvZGVycy5oIicsCisgICAgICAgICdX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogJyJJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlQ29kZXJzLmgiJywKICAgICB9CiAKICAgICBpZiB0eXBlIGluIHNwZWNpYWxf
Y2FzZXM6CkBAIC0zODEsNiArMzg5LDE4IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
ZmlsZSk6CiAgICAgICAgIHR5cGVfaGVhZGVycyA9IGhlYWRlcnNfZm9yX3R5cGUodHlwZSkKICAg
ICAgICAgaGVhZGVycy51cGRhdGUodHlwZV9oZWFkZXJzKQogCisgICAgZm9yIG1lc3NhZ2UgaW4g
cmVjZWl2ZXIubWVzc2FnZXM6CisgICAgICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5y
ZXBseV9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIHR5cGUgPSByZXBseV9wYXJhbWV0ZXIu
dHlwZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50X2VuY29kZXJfaGVhZGVycyA9IGFyZ3VtZW50
X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZSkKKyAgICAgICAgICAgICAgICBpZiBhcmd1bWVu
dF9lbmNvZGVyX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGFy
Z3VtZW50X2VuY29kZXJfaGVhZGVycykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKwor
ICAgICAgICAgICAgICAgIHR5cGVfaGVhZGVycyA9IGhlYWRlcnNfZm9yX3R5cGUodHlwZSkKKyAg
ICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZSh0eXBlX2hlYWRlcnMpCisKICAgICByZXN1bHQg
PSBbXQogCiAgICAgcmVzdWx0LmFwcGVuZChfbGljZW5zZV9oZWFkZXIpCkluZGV4OiBXZWJLaXQy
L1NoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQv
U3RyaW5nUGFpclZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvU3RyaW5n
UGFpclZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTdHJpbmdQYWlyVmVjdG9yX2gKKyNkZWZpbmUgU3RyaW5nUGFpclZlY3Rvcl9oCisK
KyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8v
IFRoaXMgY2xhc3MgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgdGhlIElQ
QyBtZXNzYWdlIGdlbmVyYXRvcgorLy8gY2Fubm90IGRlYWwgd2l0aCBjbGFzcyB0ZW1wbGF0ZXMg
d2l0aCBtb3JlIHRoYW4gb25lIHBhcmFtdGVyLgorY2xhc3MgU3RyaW5nUGFpclZlY3RvciB7Citw
dWJsaWM6CisgICAgU3RyaW5nUGFpclZlY3RvcigpCisgICAgeworICAgIH0KKworICAgIFN0cmlu
Z1BhaXJWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBzdHJpbmdQYWly
VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdQYWlyVmVjdG9yLnN3YXAoc3RyaW5nUGFp
clZlY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc3Ry
aW5nUGFpclZlY3Rvcik7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU3RyaW5nUGFpclZlY3RvciYgc3RyaW5nUGFpclZl
Y3RvcikKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoc3RyaW5nUGFpclZl
Y3Rvci5tX3N0cmluZ1BhaXJWZWN0b3IpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHN0cmluZ1BhaXJWZWN0b3IoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZ1BhaXJWZWN0b3I7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPiA+IG1fc3RyaW5nUGFpclZlY3RvcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gU3RyaW5nUGFpclZlY3Rvcl9oCkluZGV4OiBXZWJLaXQy
L1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdl
S2luZHMuaAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9y
dC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKLSNk
ZWZpbmUgV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKLQotI2luY2x1ZGUgIk1lc3NhZ2VJRC5o
IgotCi0vLyBNZXNzYWdlcyBzZW50IGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBXZWJQYWdl
UHJveHkuCi0KLW5hbWVzcGFjZSBXZWJQYWdlUHJveHlNZXNzYWdlIHsKLQotZW51bSBLaW5kIHsK
LSAgICBDcmVhdGVOZXdQYWdlLAotICAgIFNob3dQYWdlLAotICAgIFJ1bkphdmFTY3JpcHRBbGVy
dCwKLSAgICBSdW5KYXZhU2NyaXB0Q29uZmlybSwKLSAgICBSdW5KYXZhU2NyaXB0UHJvbXB0LAot
Ci0gICAgQ2xvc2VQYWdlLAotICAgIENvbnRlbnRzU2l6ZUNoYW5nZWQsCi0gICAgRGVjaWRlUG9s
aWN5Rm9yTUlNRVR5cGUsCi0gICAgRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAg
ICBEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24sCi0gICAgRGlkQ2hhbmdlUHJvZ3Jlc3Ms
Ci0gICAgRGlkQ29tbWl0TG9hZEZvckZyYW1lLAotICAgIERpZENyZWF0ZU1haW5GcmFtZSwKLSAg
ICBEaWRDcmVhdGVTdWJGcmFtZSwKLSAgICBEaWRGYWlsTG9hZEZvckZyYW1lLAotICAgIERpZEZh
aWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKLSAgICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZSwKLSAgICBEaWRGaW5pc2hMb2FkRm9yRnJhbWUsCi0gICAgRGlkRmluaXNoUHJvZ3Jlc3Ms
Ci0gICAgRGlkRmlyc3RMYXlvdXRGb3JGcmFtZSwKLSAgICBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JGcmFtZSwKLSAgICBEaWRHZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiwKLSAgICBEaWRHZXRTb3VyY2VGb3JGcmFtZSwKLSAgICBEaWRSZWNlaXZlRXZlbnQsCi0g
ICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCi0g
ICAgRGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUsCi0gICAgRGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFy
Y2h5LAotICAgIERpZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSwKLSAgICBEaWRTZXRGcmFtZSwK
LSAgICBEaWRTdGFydFByb2dyZXNzLAotICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUsCi0gICAgRGlkVmFsaWRhdGVNZW51SXRlbSwKLSAgICBNb3VzZURpZE1vdmVPdmVyRWxlbWVu
dCwKLSAgICBTZXRDdXJzb3IsCi0gICAgU2V0U3RhdHVzVGV4dCwKLSAgICBTZXRUb29sVGlwLAot
ICAgIFRha2VGb2N1cywKLSAgICBXaWxsU3VibWl0Rm9ybSwKLQotICAgIEJhY2tGb3J3YXJkQWRk
SXRlbSwKLSAgICBCYWNrRm9yd2FyZEdvVG9JdGVtLAotICAgIEJhY2tGb3J3YXJkQmFja0l0ZW0s
Ci0gICAgQmFja0ZvcndhcmRDdXJyZW50SXRlbSwKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRJdGVt
LAotICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgsCi0gICAgQmFja0ZvcndhcmRCYWNrTGlzdENv
dW50LAotICAgIEJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCwKLQotICAgIFJlZ2lzdGVyRWRp
dENvbW1hbmRGb3JVbmRvLAotICAgIENsZWFyQWxsRWRpdENvbW1hbmRzLAotCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIERpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcsCi0jZW5kaWYKLX07Ci0KLX0KLQotbmFtZXNwYWNlIENvcmVJUEMgewotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBNZXNzYWdlS2luZFRyYWl0czxXZWJQYWdlUHJveHlNZXNzYWdlOjpLaW5kPiB7IAot
ICAgIHN0YXRpYyBjb25zdCBNZXNzYWdlQ2xhc3MgbWVzc2FnZUNsYXNzID0gTWVzc2FnZUNsYXNz
V2ViUGFnZVByb3h5OwotfTsKLQotfQotCi0jZW5kaWYgLy8gV2ViUGFnZVByb3h5TWVzc2FnZUtp
bmRzX2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDY5MTE5KQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIFBhZ2VDbGllbnRfaAogI2RlZmluZSBQYWdlQ2xpZW50X2gKIAorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ4LDggKzQ5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSA9IDA7CiAKLSAgICBlbnVtIFVuZG9P
clJlZG8geyBVbmRvLCBSZWRvIH07Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1h
bmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENv
bW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50
IHN0YXRlKSA9IDA7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJv
eHkuY3BwCShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21t
YW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgV2ViRWRp
dENvbW1hbmRQcm94eTo6dW5hcHBseSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGFnZS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9j
b21tYW5kSUQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENv
bW1hbmRGb3JSZWRvKHRoaXMpOworICAgIG1fcGFnZS0+cmVnaXN0ZXJFZGl0Q29tbWFuZCh0aGlz
LCBXZWJQYWdlUHJveHk6OlVuZG8pOwogfQogCiB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJl
YXBwbHkoKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBw
bHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhZ2UtPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVhcHBseUVkaXRDb21tYW5kKG1fY29tbWFuZElEKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5yZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh0aGlzKTsK
KyAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQodGhpcywgV2ViUGFnZVByb3h5OjpSZWRv
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJGb3JtQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3Jt
Q2xpZW50LmNwcAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3Jt
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIFdlYkZvcm1D
bGllbnQ6OmluaXRpYWxpemUoY29uc3QgV0tQCiAgICAgICAgIG1lbXNldCgmbV9wYWdlRm9ybUNs
aWVudCwgMCwgc2l6ZW9mKG1fcGFnZUZvcm1DbGllbnQpKTsKIH0KIAotYm9vbCBXZWJGb3JtQ2xp
ZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBXZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFtZSwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmplY3QqIHVzZXJEYXRhLCBXZWJGb3Jt
U3VibWlzc2lvbkxpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQorYm9vbCBXZWJGb3JtQ2xpZW50Ojp3
aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBX
ZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFtZSwgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmplY3QqIHVzZXJEYXRhLCBXZWJGb3Jt
U3VibWlzc2lvbkxpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQogewogICAgIGlmICghbV9wYWdlRm9y
bUNsaWVudC53aWxsU3VibWl0Rm9ybSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkZvcm1DbGllbnQuaAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJGb3JtQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogICAgIFdlYkZvcm1DbGllbnQoKTsKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgV0tQ
YWdlRm9ybUNsaWVudCopOwogCi0gICAgYm9vbCB3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkq
LCBXZWJGcmFtZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTdHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgV2ViRm9y
bVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5Kik7IAorICAgIGJvb2wgd2lsbFN1Ym1pdEZvcm0oV2Vi
UGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSU9iamVjdCog
dXNlckRhdGEsIFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVuZXJQcm94eSopOyAKIAogcHJpdmF0ZToK
ICAgICBXS1BhZ2VGb3JtQ2xpZW50IG1fcGFnZUZvcm1DbGllbnQ7CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY5MTE5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rvci5oIgogI2lu
Y2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0uaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKQEAgLTQzLDcgKzQ0LDYg
QEAKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU5hbWVzcGFjZS5oIgotI2luY2x1ZGUg
IldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVz
c2FnZXMuaCIKQEAgLTU0MCwzNDkgKzU0MCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZShDb3IKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN3aXRjaCAobWVz
c2FnZUlELmdldDxXZWJQYWdlUHJveHlNZXNzYWdlOjpLaW5kPigpKSB7Ci0gICAgICAgIGNhc2Ug
V2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ3JlYXRlTWFpbkZyYW1lOiB7Ci0gICAgICAgICAgICB1
aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShmcmFt
ZUlEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRDcmVhdGVNYWlu
RnJhbWUoZnJhbWVJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENyZWF0ZVN1YkZyYW1lOiB7Ci0gICAgICAgICAg
ICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShm
cmFtZUlEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRDcmVhdGVT
dWJGcmFtZShmcmFtZUlEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFt
ZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyB1
cmw7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAg
ICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwg
cGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50
cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCB1cmwsIG1lc3NhZ2VEZWNvZGVyKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVybCwgdXNlckRhdGEu
Z2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQ
YWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAg
IFN0cmluZyB1cmw7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwot
ICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1
c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCB1cmwsIG1lc3NhZ2VEZWNv
ZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpLCB1cmwsIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAg
ICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRh
dGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZEZhaWxQcm92aXNpb25hbExv
YWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5nZXQoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OkRpZENvbW1pdExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3Qg
ZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICAgICAgICAgIFBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbzsKLQotICAgICAgICAgICAgUmVmUHRy
PEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAgICAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VE
ZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQo
KSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZy
YW1lSUQsIG1pbWVUeXBlLCBjZXJ0aWZpY2F0ZUluZm8sIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgICAgICAgICAgZGlkQ29tbWl0TG9hZEZvckZy
YW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIG1pbWVUeXBlLCBjZXJ0aWZpY2F0ZUlu
Zm8sIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0
cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdl
RGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0
KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChm
cmFtZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUocHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaW5pc2hMb2FkRm9yRnJh
bWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0
cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdl
RGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0
KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChm
cmFtZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgZGlkRmluaXNoTG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJ
RCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmFpbExvYWRGb3JGcmFtZTogewotICAg
ICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLQotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVj
dD4gdXNlckRhdGE7Ci0gICAgICAgICAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1l
c3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAg
ICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1l
c3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBk
aWRGYWlsTG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRh
LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWU6IHsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0KLSAgICAgICAg
ICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVz
ZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgp
LT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJ
UEM6Ok91dChmcmFtZUlELCB0aXRsZSwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHByb2Nlc3Mo
KS0+d2ViRnJhbWUoZnJhbWVJRCksIHRpdGxlLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRp
ZEZpcnN0TGF5b3V0Rm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0K
LSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2Vi
Q29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5h
bWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVj
b2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBm
cmFtZUlEOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAg
ICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRh
dGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRh
LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5OiB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1
c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2Fn
ZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBkaWRS
ZWNlaXZlV2ViUGFnZVByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50
cyk7CiAKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZy
YW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICBkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkocHJvY2VzcygpLT53ZWJGcmFtZShm
cmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRTdGFydFByb2dyZXNzOgotICAg
ICAgICAgICAgZGlkU3RhcnRQcm9ncmVzcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ2hhbmdlUHJvZ3Jlc3M6IHsKLSAgICAgICAg
ICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUodmFs
dWUpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRpZENoYW5nZVByb2dy
ZXNzKHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
V2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoUHJvZ3Jlc3M6Ci0gICAgICAgICAgICBkaWRG
aW5pc2hQcm9ncmVzcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZUV2ZW50OiB7Ci0gICAgICAgICAgICB1aW50MzJfdCB0
eXBlOwotICAgICAgICAgICAgYm9vbCBoYW5kbGVkOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dHMtPmRlY29kZShDb3JlSVBDOjpPdXQodHlwZSwgaGFuZGxlZCkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVFdmVudCgoV2ViRXZlbnQ6OlR5cGUpdHlw
ZSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlRha2VGb2N1czogewotICAgICAgICAgICAgLy8gRklYTUU6
IFVzZSBlbnVtIGhlcmUuCi0gICAgICAgICAgICBib29sIGRpcmVjdGlvbjsKLSAgICAgICAgICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUoZGlyZWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB0YWtlRm9jdXMoZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsK
LSAgICAgICAgICAgIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlOwotICAgICAgICAgICAgdWludDMy
X3QgbW9kaWZpZXJzOwotICAgICAgICAgICAgaW50MzJfdCBtb3VzZUJ1dHRvbjsKLSAgICAgICAg
ICAgIFN0cmluZyB1cmw7Ci0gICAgICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwotICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbmF2aWdh
dGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJRCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24ocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgc3RhdGljX2Nhc3Q8TmF2aWdh
dGlvblR5cGU+KG5hdmlnYXRpb25UeXBlKSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVy
cz4obW9kaWZpZXJzKSwgc3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihtb3VzZUJ1
dHRvbiksIHVybCwgbGlzdGVuZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbjogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIHVp
bnQzMl90IG5hdmlnYXRpb25UeXBlOwotICAgICAgICAgICAgdWludDMyX3QgbW9kaWZpZXJzOwot
ICAgICAgICAgICAgaW50MzJfdCBtb3VzZUJ1dHRvbjsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7
Ci0gICAgICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbmF2aWdhdGlvblR5cGUsIG1vZGlm
aWVycywgbW91c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJRCkpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpLCBzdGF0aWNfY2FzdDxOYXZpZ2F0aW9uVHlwZT4obmF2aWdh
dGlvblR5cGUpLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpLCBz
dGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KG1vdXNlQnV0dG9uKSwgdXJsLCBsaXN0
ZW5lcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTUlNRVR5cGU6IHsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgTUlNRVR5cGU7Ci0gICAgICAg
ICAgICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLSAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIE1JTUVU
eXBlLCB1cmwsIGxpc3RlbmVySUQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
LCBNSU1FVHlwZSwgdXJsLCBsaXN0ZW5lcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6V2lsbFN1Ym1pdEZvcm06IHsK
LSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICB1aW50NjRfdCBzb3Vy
Y2VGcmFtZUlEOwotICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4g
PiB0ZXh0RmllbGRWYWx1ZXM7Ci0gICAgICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwotCi0g
ICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNv
bnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1l
c3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgc291cmNlRnJhbWVJRCwgdGV4dEZpZWxkVmFsdWVzLCBs
aXN0ZW5lcklELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgd2lsbFN1Ym1pdEZvcm0ocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwg
cHJvY2VzcygpLT53ZWJGcmFtZShzb3VyY2VGcmFtZUlEKSwgdGV4dEZpZWxkVmFsdWVzLCB1c2Vy
RGF0YS5nZXQoKSwgbGlzdGVuZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZTogewotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICAgICAgICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQ7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENv
cmVJUEM6Ok91dChyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBkaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUocmVzdWx0U3Ry
aW5nLCBjYWxsYmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVz
ZW50YXRpb246IHsKLSAgICAgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgICAgICAg
ICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgZGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50
YXRpb24ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0U291cmNlRm9y
RnJhbWU6IHsKLSAgICAgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgICAgICAgICB1
aW50NjRfdCBjYWxsYmFja0lEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShD
b3JlSVBDOjpPdXQocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgZGlkR2V0U291cmNlRm9yRnJhbWUocmVzdWx0U3RyaW5nLCBj
YWxsYmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
V2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0VG9vbFRpcDogewotICAgICAgICAgICAgU3RyaW5nIHRv
b2xUaXA7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKHRvb2xUaXApKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHNldFRvb2xUaXAodG9vbFRpcCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1l
c3NhZ2U6OlNldEN1cnNvcjogewotI2lmIFVTRShMQVpZX05BVElWRV9DVVJTT1IpCi0gICAgICAg
ICAgICBDdXJzb3IgY3Vyc29yOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShj
dXJzb3IpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHNldEN1cnNvcihj
dXJzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNob3dQYWdlOiB7Ci0gICAgICAgICAgICBzaG93UGFn
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdl
UHJveHlNZXNzYWdlOjpDbG9zZVBhZ2U6IHsKLSAgICAgICAgICAgIGNsb3NlUGFnZSgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNz
YWdlOjpCYWNrRm9yd2FyZEFkZEl0ZW06IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGl0ZW1JRDsK
LSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGl0ZW1JRCkp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFkZEl0ZW1Ub0JhY2tGb3J3
YXJkTGlzdChwcm9jZXNzKCktPndlYkJhY2tGb3J3YXJkSXRlbShpdGVtSUQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6
QmFja0ZvcndhcmRHb1RvSXRlbTogewotICAgICAgICAgICAgdWludDY0X3QgaXRlbUlEOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoaXRlbUlEKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZ29Ub0l0ZW1JbkJhY2tGb3J3YXJk
TGlzdChwcm9jZXNzKCktPndlYkJhY2tGb3J3YXJkSXRlbShpdGVtSUQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6Q29u
dGVudHNTaXplQ2hhbmdlZDogewotICAgICAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICAg
ICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGZyYW1lSUQsIHNpemUpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb250ZW50c1NpemVDaGFuZ2VkKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJ
RCksIHNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
ZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRTdGF0dXNUZXh0OiB7Ci0gICAgICAgICAgICBTdHJpbmcg
dGV4dDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KHRl
eHQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZXRTdGF0dXNUZXh0
KHRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQ
YWdlUHJveHlNZXNzYWdlOjpSZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbzogewotICAgICAgICAg
ICAgdWludDY0X3QgY29tbWFuZElEOwotICAgICAgICAgICAgdWludDMyX3QgZWRpdEFjdGlvbjsK
LSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNvbW1hbmRJ
RCwgZWRpdEFjdGlvbikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKGNvbW1hbmRJRCwgc3Rh
dGljX2Nhc3Q8RWRpdEFjdGlvbj4oZWRpdEFjdGlvbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpDbGVhckFsbEVkaXRD
b21tYW5kczoKLSAgICAgICAgICAgIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRWYWxpZGF0ZU1l
bnVJdGVtOiB7Ci0gICAgICAgICAgICBpbnQgc3RhdGU7Ci0gICAgICAgICAgICBib29sIGlzRW5h
YmxlZDsKLSAgICAgICAgICAgIFN0cmluZyBjb21tYW5kTmFtZTsKLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0
YXRlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9wYWdlQ2xpZW50
LT5zZXRFZGl0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6IHsKLSAgICAgICAgICAgIHVpbnQzMl90IG1v
ZGlmaWVyczsKLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAg
ICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0
YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChtb2RpZmllcnMsIG1lc3NhZ2VEZWNvZGVyKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxl
bWVudChzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpLCB1c2VyRGF0
YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMsIENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciogcmVwbHkpCkBAIC04OTIsMTA1ICs1NTEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd2l0
Y2ggKG1lc3NhZ2VJRC5nZXQ8V2ViUGFnZVByb3h5TWVzc2FnZTo6S2luZD4oKSkgewotICAgICAg
ICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNyZWF0ZU5ld1BhZ2U6IHsKLSAgICAgICAgICAg
IFJlZlB0cjxXZWJQYWdlUHJveHk+IG5ld1BhZ2UgPSBjcmVhdGVOZXdQYWdlKCk7Ci0gICAgICAg
ICAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBp
ZiAobmV3UGFnZSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHNp
emUuCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IG5ld1BhZ2UtPmNyZWF0aW9uUGFyYW1l
dGVycyhJbnRTaXplKDEwMCwgMTAwKSk7Ci0gICAgICAgICAgICAgICAgcmVwbHktPmVuY29kZShD
b3JlSVBDOjpJbihuZXdQYWdlLT5wYWdlSUQoKSwgcGFyYW1ldGVycykpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PigwKSwgcGFyYW1ldGVycykpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdl
OjpSdW5KYXZhU2NyaXB0QWxlcnQ6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0g
ICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2UpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBydW5KYXZhU2NyaXB0QWxlcnQocHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKSwgbWVzc2FnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFTY3JpcHRDb25maXJtOiB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGVuY29kZSBzb21ldGhpbmcg
aW4gdGhlIGNhc2UgdGhhdCB0aGUgYXJndW1lbnRzIGRvIG5vdCBkZWNvZGUgY29ycmVjdGx5Lgot
ICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdl
OwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJ
RCwgbWVzc2FnZSkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgYm9v
bCByZXN1bHQgPSBydW5KYXZhU2NyaXB0Q29uZmlybShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1l
SUQpLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4ocmVz
dWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6IHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcHJvYmFibHkgZW5jb2RlIHNvbWV0aGluZyBpbiB0aGUgY2FzZSB0aGF0
IHRoZSBhcmd1bWVudHMgZG8gbm90IGRlY29kZSBjb3JyZWN0bHkuCi0gICAgICAgICAgICB1aW50
NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBT
dHJpbmcgZGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShD
b3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcnVuSmF2YVNjcmlw
dFByb21wdChwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBtZXNzYWdlLCBkZWZhdWx0VmFs
dWUpOwotICAgICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihyZXN1bHQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlN
ZXNzYWdlOjpCYWNrRm9yd2FyZEJhY2tJdGVtOiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBiYWNrSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOwotICAg
ICAgICAgICAgdWludDY0X3QgYmFja0l0ZW1JRCA9IGJhY2tJdGVtID8gYmFja0l0ZW0tPml0ZW1J
RCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oYmFja0l0ZW1J
RCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdl
UHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEN1cnJlbnRJdGVtOiB7Ci0gICAgICAgICAgICBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtKiBjdXJyZW50SXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJy
ZW50SXRlbSgpOwotICAgICAgICAgICAgdWludDY0X3QgY3VycmVudEl0ZW1JRCA9IGN1cnJlbnRJ
dGVtID8gY3VycmVudEl0ZW0tPml0ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNv
ZGUoQ29yZUlQQzo6SW4oY3VycmVudEl0ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEZvcndh
cmRJdGVtOiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmb3J3YXJkSXRl
bSA9IG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpOwotICAgICAgICAgICAgdWludDY0
X3QgZm9yd2FyZEl0ZW1JRCA9IGZvcndhcmRJdGVtID8gZm9yd2FyZEl0ZW0tPml0ZW1JRCgpIDog
MDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oZm9yd2FyZEl0ZW1JRCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJv
eHlNZXNzYWdlOjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OiB7Ci0gICAgICAgICAgICBpbnQgaXRl
bUluZGV4OwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQo
aXRlbUluZGV4KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4
KGl0ZW1JbmRleCk7Ci0gICAgICAgICAgICB1aW50NjRfdCBpdGVtSUQgPSBpdGVtID8gaXRlbS0+
aXRlbUlEKCkgOiAwOwotICAgICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihpdGVt
SUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50OiB7Ci0gICAgICAgICAgICBp
bnQgYmFja0xpc3RDb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0LT5iYWNrTGlzdENvdW50KCk7Ci0g
ICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKGJhY2tMaXN0Q291bnQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50OiB7Ci0gICAgICAgICAgICBpbnQgZm9y
d2FyZExpc3RDb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Ci0g
ICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKGZvcndhcmRMaXN0Q291bnQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENoYW5nZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmc6IHsKLSAgICAgICAgICAgIGJvb2wgY29tcG9zaXRpbmc7Ci0gICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChjb21wb3NpdGluZykp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkQ2hhbmdlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyhjb21wb3NpdGluZyk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2Rl
KGRyYXdpbmdBcmVhKCktPmluZm8oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICB9CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHJlcGx5LgorICAgIGRpZFJl
Y2VpdmVTeW5jV2ViUGFnZVByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3Vt
ZW50cywgcmVwbHkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQpCkBAIC0xMDI4LDkxICs1OTAsMTc5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRGaW5pc2hQcm9ncmVzcygpCiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoUHJv
Z3Jlc3ModGhpcyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgQVBJ
T2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1
c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVy
KHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVu
dHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZy
YW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwogICAgIGZy
YW1lLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZCh1cmwpOwotICAgIG1fbG9hZGVyQ2xpZW50LmRp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAg
ICBtX2xvYWRlckNsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZy
YW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB1cmwsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogYXJndW1lbnRzKQogeworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwor
ICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEs
IHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2Rl
KG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSog
ZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCiAgICAgZnJhbWUtPmRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCh1cmwpOwotICAgIG1fbG9hZGVy
Q2xpZW50LmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJE
YXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxQcm92aXNpb25hbExv
YWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9s
b2FkZXJDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKHRoaXMs
IGZyYW1lLCB1c2VyRGF0YSk7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAg
V2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFn
ZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVz
c2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFt
ZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKKyAgICBtX2xvYWRlckNsaWVudC5k
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJE
YXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgUGxh
dGZvcm1DZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgQVBJT2JqZWN0KiB1c2VyRGF0
YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbywgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMp
CiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJN
ZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5j
b250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+
d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFtZS0+c2V0TUlNRVR5cGUobWltZVR5cGUpOwog
ICAgIGZyYW1lLT5zZXRDZXJ0aWZpY2F0ZUluZm8oV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUo
Y2VydGlmaWNhdGVJbmZvKSk7CiAgICAgZnJhbWUtPmRpZENvbW1pdExvYWQoKTsKLSAgICBtX2xv
YWRlckNsaWVudC5kaWRDb21taXRMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsK
KyAgICBtX2xvYWRlckNsaWVudC5kaWRDb21taXRMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVz
ZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQor
dm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1f
bG9hZGVyQ2xpZW50LmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1
c2VyRGF0YSk7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4
dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFj
ZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29k
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKKyAgICBtX2xvYWRlckNsaWVudC5kaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExv
YWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFy
Z3VtZW50cykKIHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250
ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNw
YWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVj
b2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJv
Y2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwogICAgIGZyYW1lLT5kaWRGaW5pc2hMb2FkKCk7
Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1
c2VyRGF0YSk7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lKHRoaXMs
IGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWls
TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQor
dm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGll
bnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEpOwor
ICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2Fn
ZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4
dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0
IFN0cmluZyYgdGl0bGUsIEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB0
aXRsZSwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CisgICAgUmVmUHRy
PEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBt
ZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJ
RCk7CisKICAgICBmcmFtZS0+ZGlkUmVjZWl2ZVRpdGxlKHRpdGxlKTsKIAogICAgIC8vIENhY2hl
IHRoZSB0aXRsZSBmb3IgdGhlIG1haW4gZnJhbWUgaW4gdGhlIHBhZ2UuCiAgICAgaWYgKGZyYW1l
ID09IG1fbWFpbkZyYW1lKQogICAgICAgICBtX3BhZ2VUaXRsZSA9IHRpdGxlOwogCi0gICAgbV9s
b2FkZXJDbGllbnQuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodGhpcywgdGl0bGUsIGZyYW1lLCB1
c2VyRGF0YSk7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodGhp
cywgdGl0bGUsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpkaWRGaXJzdExheW91dEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3Qq
IHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0g
ICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRV
c2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2Uo
KS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RMYXlv
dXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQu
ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJE
YXRhKTsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNl
ck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCkt
PmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2Rlcikp
CisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2Vzcygp
LT53ZWJGcmFtZShmcmFtZUlEKTsKKworICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkoV2ViRnJh
bWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlbW92
ZUZyYW1lRnJvbUhpZXJhcmNoeSh0aGlzLCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVz
c2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBp
ZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
OworCisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHRoaXMs
IGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKIC8vIFBvbGljeUNsaWVudAogCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJGcmFtZVByb3h5
KiBmcmFtZSwgTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIFdlYkV2ZW50OjpNb2RpZmll
cnMgbW9kaWZpZXJzLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24gbW91c2VCdXR0b24sIGNvbnN0IFN0
cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQordm9pZCBXZWJQYWdlUHJveHk6OmRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3Bh
cXVlTmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFx
dWVNb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7
CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
OworICAgIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlID0gc3RhdGljX2Nhc3Q8TmF2aWdh
dGlvblR5cGU+KG9wYXF1ZU5hdmlnYXRpb25UeXBlKTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJz
IG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9wYXF1ZU1vZGlm
aWVycyk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uID0gc3RhdGljX2Nh
c3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihvcGFxdWVNb3VzZUJ1dHRvbik7CisgICAgCiAgICAg
UmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0
VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxpc3RlbmVySUQpOwogICAgIGlmICghbV9wb2xpY3lDbGll
bnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih0aGlzLCBuYXZpZ2F0aW9uVHlwZSwg
bW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAg
ICAgICBsaXN0ZW5lci0+dXNlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xp
Y3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViRnJhbWVQcm94eSogZnJhbWUsIE5hdmlnYXRpb25UeXBl
IG5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgV2ViTW91c2VF
dmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlz
dGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVpbnQz
Ml90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3QgU3Ry
aW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7CisgICAgV2ViRnJhbWVQcm94eSogZnJh
bWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE5hdmlnYXRpb25UeXBlIG5h
dmlnYXRpb25UeXBlID0gc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG9wYXF1ZU5hdmlnYXRp
b25UeXBlKTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0
PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9wYXF1ZU1vZGlmaWVycyk7CisgICAgV2ViTW91c2VFdmVu
dDo6QnV0dG9uIG1vdXNlQnV0dG9uID0gc3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9u
PihvcGFxdWVNb3VzZUJ1dHRvbik7CisKICAgICBSZWZQdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5PiBsaXN0ZW5lciA9IGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkobGlzdGVu
ZXJJRCk7CiAgICAgaWYgKCFtX3BvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24odGhpcywgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwg
ZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkKICAgICAgICAgbGlzdGVuZXItPnVzZSgpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoV2ViRnJhbWVQcm94eSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRf
dCBsaXN0ZW5lcklEKQordm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck1JTUVUeXBl
KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYg
dXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQogeworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0g
cHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBSZWZQdHI8V2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9IGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHko
bGlzdGVuZXJJRCk7CiAgICAgaWYgKCFtX3BvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JNSU1F
VHlwZSh0aGlzLCBNSU1FVHlwZSwgdXJsLCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAgICAg
ICBsaXN0ZW5lci0+dXNlKCk7CkBAIC0xMTIwLDE4ICs3NzAsMzIgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRlY2lkZVBvbGljeUZvck1JTUVUeQogCiAvLyBGb3JtQ2xpZW50CiAKLXZvaWQgV2ViUGFn
ZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShXZWJGcmFtZVByb3h5KiBmcmFtZSwgV2ViRnJhbWVQcm94
eSogc291cmNlRnJhbWUsIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHRleHRG
aWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3Zv
aWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBzb3VyY2VGcmFtZUlELCBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMs
IHVpbnQ2NF90IGxpc3RlbmVySUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRz
KQogeworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2Vy
TWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+
Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCkt
PndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lUHJveHkqIHNvdXJjZUZyYW1lID0gcHJv
Y2VzcygpLT53ZWJGcmFtZShzb3VyY2VGcmFtZUlEKTsKKwogICAgIFJlZlB0cjxXZWJGb3JtU3Vi
bWlzc2lvbkxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJhbWUtPnNldFVwRm9ybVN1Ym1pc3Np
b25MaXN0ZW5lclByb3h5KGxpc3RlbmVySUQpOwotICAgIGlmICghbV9mb3JtQ2xpZW50LndpbGxT
dWJtaXRGb3JtKHRoaXMsIGZyYW1lLCBzb3VyY2VGcmFtZSwgdGV4dEZpZWxkVmFsdWVzLCB1c2Vy
RGF0YSwgbGlzdGVuZXIuZ2V0KCkpKQorICAgIGlmICghbV9mb3JtQ2xpZW50LndpbGxTdWJtaXRG
b3JtKHRoaXMsIGZyYW1lLCBzb3VyY2VGcmFtZSwgdGV4dEZpZWxkVmFsdWVzLnN0cmluZ1BhaXJW
ZWN0b3IoKSwgdXNlckRhdGEuZ2V0KCksIGxpc3RlbmVyLmdldCgpKSkKICAgICAgICAgbGlzdGVu
ZXItPmNvbnRpbnVlU3VibWlzc2lvbigpOwogfQogCiAvLyBVSUNsaWVudAogCi1QYXNzUmVmUHRy
PFdlYlBhZ2VQcm94eT4gV2ViUGFnZVByb3h5OjpjcmVhdGVOZXdQYWdlKCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjcmVhdGVOZXdQYWdlKHVpbnQ2NF90JiBuZXdQYWdlSUQsIFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMmIG5ld1BhZ2VQYXJhbWV0ZXJzKQogewotICAgIHJldHVybiBtX3VpQ2xpZW50
LmNyZWF0ZU5ld1BhZ2UodGhpcyk7CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbmV3UGFnZSA9
IG1fdWlDbGllbnQuY3JlYXRlTmV3UGFnZSh0aGlzKTsKKyAgICBpZiAobmV3UGFnZSkgeworICAg
ICAgICAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCBzaXplLgorICAgICAgICBuZXdQYWdlSUQgPSBu
ZXdQYWdlLT5wYWdlSUQoKTsKKyAgICAgICAgbmV3UGFnZVBhcmFtZXRlcnMgPSBuZXdQYWdlLT5j
cmVhdGlvblBhcmFtZXRlcnMoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIH0gZWxzZQorICAgICAg
ICBuZXdQYWdlSUQgPSAwOwogfQogICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dQYWdlKCkK
QEAgLTExNDQsMTkgKzgwOCwxOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xvc2VQYWdlKCkKICAg
ICBtX3VpQ2xpZW50LmNsb3NlKHRoaXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2
YVNjcmlwdEFsZXJ0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRB
bGVydCh0aGlzLCBtZXNzYWdlLCBmcmFtZSk7CisgICAgbV91aUNsaWVudC5ydW5KYXZhU2NyaXB0
QWxlcnQodGhpcywgbWVzc2FnZSwgcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSk7CiB9CiAK
LWJvb2wgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0Q29uZmlybShXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFT
Y3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgYm9v
bCYgcmVzdWx0KQogewotICAgIHJldHVybiBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJt
KHRoaXMsIG1lc3NhZ2UsIGZyYW1lKTsKKyAgICByZXN1bHQgPSBtX3VpQ2xpZW50LnJ1bkphdmFT
Y3JpcHRDb25maXJtKHRoaXMsIG1lc3NhZ2UsIHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCkp
OwogfQogCi1TdHJpbmcgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVs
dFZhbHVlKQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1
ZSwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIG1fdWlDbGllbnQucnVuSmF2YVNjcmlw
dFByb21wdCh0aGlzLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIGZyYW1lKTsKKyAgICByZXN1bHQg
PSBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZh
bHVlLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtMTE2NCw0OCArODI4LDg1
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFMKICAgICBtX3VpQ2xp
ZW50LnNldFN0YXR1c1RleHQodGhpcywgdGV4dCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJ
T2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxl
bWVudCh1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnRzKQogewotICAgIG1fdWlDbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodGhp
cywgbW9kaWZpZXJzLCB1c2VyRGF0YSk7CisKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0
YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJE
YXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRl
Y29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ob3Bh
cXVlTW9kaWZpZXJzKTsKKworICAgIG1fdWlDbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
dGhpcywgbW9kaWZpZXJzLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
Ojpjb250ZW50c1NpemVDaGFuZ2VkKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplKQordm9pZCBXZWJQYWdlUHJveHk6OmNvbnRlbnRzU2l6ZUNoYW5nZWQo
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBt
X3VpQ2xpZW50LmNvbnRlbnRzU2l6ZUNoYW5nZWQodGhpcywgc2l6ZSwgZnJhbWUpOworICAgIG1f
dWlDbGllbnQuY29udGVudHNTaXplQ2hhbmdlZCh0aGlzLCBzaXplLCBwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpKTsKIH0KIAogLy8gQmFja0ZvcndhcmRMaXN0CiAKLXZvaWQgV2ViUGFnZVBy
b3h5OjphZGRJdGVtVG9CYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRl
bSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlE
KQogewotICAgIG1fYmFja0ZvcndhcmRMaXN0LT5hZGRJdGVtKGl0ZW0pOworICAgIG1fYmFja0Zv
cndhcmRMaXN0LT5hZGRJdGVtKHByb2Nlc3MoKS0+d2ViQmFja0ZvcndhcmRJdGVtKGl0ZW1JRCkp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z29Ub0l0ZW1JbkJhY2tGb3J3YXJkTGlzdChXZWJC
YWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJk
R29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1Rv
SXRlbShpdGVtKTsKKyAgICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0ocHJvY2VzcygpLT53
ZWJCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSk7CiB9CiAKLS8vIFVuZG8gbWFuYWdlbWVudAordm9p
ZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0l0ZW0odWludDY0X3QmIGl0ZW1JRCkKK3sK
KyAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBiYWNrSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0
LT5iYWNrSXRlbSgpOworICAgIGl0ZW1JRCA9IGJhY2tJdGVtID8gYmFja0l0ZW0tPml0ZW1JRCgp
IDogMDsKK30KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRv
KHVpbnQ2NF90IGNvbW1hbmRJRCwgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQordm9pZCBXZWJQYWdl
UHJveHk6OmJhY2tGb3J3YXJkQ3VycmVudEl0ZW0odWludDY0X3QmIGl0ZW1JRCkKIHsKLSAgICBy
ZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhXZWJFZGl0Q29tbWFuZFByb3h5OjpjcmVhdGUoY29t
bWFuZElELCBlZGl0QWN0aW9uLCB0aGlzKSk7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
Y3VycmVudEl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKTsKKyAgICBpdGVt
SUQgPSBjdXJyZW50SXRlbSA/IGN1cnJlbnRJdGVtLT5pdGVtSUQoKSA6IDA7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit2b2lkIFdlYlBhZ2VQcm94eTo6
YmFja0ZvcndhcmRGb3J3YXJkSXRlbSh1aW50NjRfdCYgaXRlbUlEKQogewotICAgIG1fcGFnZUNs
aWVudC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
KiBmb3J3YXJkSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpOworICAgIGl0
ZW1JRCA9IGZvcndhcmRJdGVtID8gZm9yd2FyZEl0ZW0tPml0ZW1JRCgpIDogMDsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8V2Vi
RWRpdENvbW1hbmRQcm94eT4gY29tbWFuZFByb3h5KQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tG
b3J3YXJkSXRlbUF0SW5kZXgoaW50MzJfdCBpbmRleCwgdWludDY0X3QmIGl0ZW1JRCkKIHsKLSAg
ICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZFByb3h5LCBQYWdlQ2xp
ZW50OjpVbmRvKTsKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9y
d2FyZExpc3QtPml0ZW1BdEluZGV4KGluZGV4KTs7CisgICAgaXRlbUlEID0gaXRlbSA/IGl0ZW0t
Pml0ZW1JRCgpIDogMDsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1h
bmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFuZFByb3h5KQor
dm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xpc3RDb3VudChpbnQzMl90JiBjb3Vu
dCkKIHsKLSAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZFByb3h5
LCBQYWdlQ2xpZW50OjpSZWRvKTsKKyAgICBjb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0LT5iYWNr
TGlzdENvdW50KCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEZvcndhcmRM
aXN0Q291bnQoaW50MzJfdCYgY291bnQpCit7CisgICAgY291bnQgPSBtX2JhY2tGb3J3YXJkTGlz
dC0+Zm9yd2FyZExpc3RDb3VudCgpOworfQorCisvLyBVbmRvIG1hbmFnZW1lbnQKKwordm9pZCBX
ZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJ
RCwgdWludDMyX3QgZWRpdEFjdGlvbikKK3sKKyAgICByZWdpc3RlckVkaXRDb21tYW5kKFdlYkVk
aXRDb21tYW5kUHJveHk6OmNyZWF0ZShjb21tYW5kSUQsIHN0YXRpY19jYXN0PEVkaXRBY3Rpb24+
KGVkaXRBY3Rpb24pLCB0aGlzKSwgVW5kbyk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpjbGVh
ckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbV9wYWdlQ2xpZW50LT5jbGVhckFsbEVkaXRDb21t
YW5kcygpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNz
UmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmRQcm94eSwgVW5kb09yUmVkbyB1bmRv
T3JSZWRvKQoreworICAgIG1fcGFnZUNsaWVudC0+cmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5k
UHJveHksIHVuZG9PclJlZG8pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6YWRkRWRpdENvbW1h
bmQoV2ViRWRpdENvbW1hbmRQcm94eSogY29tbWFuZCkKQEAgLTEyNDEsOCArOTQyLDE1IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRDdXJzb3IoY29uc3QgV2ViQ28KICAgICBtX3BhZ2VDbGllbnQt
PnNldEN1cnNvcihjdXJzb3IpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2
ZW50KFdlYkV2ZW50OjpUeXBlIHR5cGUsIGJvb2wgaGFuZGxlZCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpkaWRWYWxpZGF0ZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNF
bmFibGVkLCBpbnQzMl90IHN0YXRlKQoreworICAgIG1fcGFnZUNsaWVudC0+c2V0RWRpdENvbW1h
bmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVk
KQogeworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6VHlw
ZT4ob3BhcXVlVHlwZSk7CisKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VNb3ZlOgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzA0LDEzICsxMDEyLDE2
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRTb3VyY2VGb3JGcmFtZSgKICAgICBjYWxsYmFj
ay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHJlc3VsdFN0cmluZy5pbXBsKCkpOwog
fQogCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNvbXBvc2l0aW5nKQordm9p
ZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBjb21w
b3NpdGluZywgRHJhd2luZ0FyZWFCYXNlOjpEcmF3aW5nQXJlYUluZm8mIGRyYXdpbmdBcmVhSW5m
bykKIHsKICAgICBpZiAoY29tcG9zaXRpbmcpCiAgICAgICAgIGRpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpOwogICAgIGVsc2UKICAgICAgICAgZGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CisKKyAgICBkcmF3aW5nQXJlYUluZm8gPSBkcmF3aW5nQXJlYSgpLT5pbmZvKCk7
CiB9CiAjZW5kaWYKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDY5
MTE5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKIGNsYXNzIE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQ7CiBjbGFzcyBQYWdlQ2xpZW50OwogY2xhc3MgUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm87CitjbGFzcyBTdHJpbmdQYWlyVmVjdG9yOwogY2xhc3MgV2ViQmFja0ZvcndhcmRM
aXN0OwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYkRhdGE7CkBAIC0x
ODgsMTAgKzE4OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRMZWF2ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKTsKICNlbmRpZgogCisgICAgZW51bSBVbmRvT3JSZWRvIHsgVW5kbywgUmVkbyB9
OwogICAgIHZvaWQgYWRkRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSopOwogICAgIHZv
aWQgcmVtb3ZlRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSopOwotICAgIHZvaWQgcmVn
aXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Pik7
Ci0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkVkaXRD
b21tYW5kUHJveHk+KTsKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxX
ZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkq
IHByb2Nlc3MoKSBjb25zdDsKICAgICBXZWJQYWdlTmFtZXNwYWNlKiBwYWdlTmFtZXNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlTmFtZXNwYWNlLmdldCgpOyB9CkBAIC0yMTAsNTMgKzIxMSw2
NCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBB
UElUeXBlOyB9CiAKKyAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgV2ViUGFnZVByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZVdlYlBhZ2VQcm94eU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKik7CisgICAgQ29yZUlQQzo6U3luY1JlcGx5TW9kZSBkaWRSZWNlaXZlU3lu
Y1dlYlBhZ2VQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVy
Kik7CisKICAgICB2b2lkIGRpZENyZWF0ZU1haW5GcmFtZSh1aW50NjRfdCBmcmFtZUlEKTsKICAg
ICB2b2lkIGRpZENyZWF0ZVN1YkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpOwogCi0gICAgdm9pZCBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBjb25zdCBTdHJp
bmcmLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBjb25zdCBTdHJpbmcmLCBBUElP
YmplY3QqKTsKLSAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFt
ZVByb3h5KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUoV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvJiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRGaW5pc2hEb2N1bWVudExvYWRG
b3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRGaW5pc2hM
b2FkRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkRmFp
bExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRS
ZWNlaXZlVGl0bGVGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgQVBJT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBkaWRGaXJzdExheW91dEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBB
UElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZy
YW1lKFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CisgICAgdm9pZCBkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmlu
ZyYsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgU3RyaW5nJiwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRGYWls
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8mLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOworICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkRmFpbExvYWRGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVUaXRsZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkRmlyc3RMYXlvdXRGb3JGcmFt
ZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lk
IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkUmVtb3ZlRnJhbWVGcm9t
SGllcmFyY2h5KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwog
ICAgIHZvaWQgZGlkU3RhcnRQcm9ncmVzcygpOwogICAgIHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3Mo
ZG91YmxlKTsKICAgICB2b2lkIGRpZEZpbmlzaFByb2dyZXNzKCk7CiAgICAgCi0gICAgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYkZyYW1lUHJveHkqLCBXZWJDb3JlOjpO
YXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycywgV2ViTW91c2VFdmVudDo6QnV0dG9u
LCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7Ci0gICAgdm9pZCBkZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViRnJhbWVQcm94eSosIFdlYkNvcmU6Ok5hdmln
YXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJzLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24sIGNv
bnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKLSAgICB2b2lkIGRlY2lkZVBv
bGljeUZvck1JTUVUeXBlKFdlYkZyYW1lUHJveHkqLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBj
b25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmln
YXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0
IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKKyAgICB2b2lkIGRlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9u
VHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBjb25zdCBTdHJp
bmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JN
SU1FVHlwZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBT
dHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CiAKLSAgICB2b2lkIHdpbGxTdWJtaXRG
b3JtKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVByb3h5KiBmcmFtZVNvdXJjZSwgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmpl
Y3QqIHVzZXJEYXRhLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKKyAgICB2b2lkIHdpbGxTdWJtaXRG
b3JtKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHNvdXJjZUZyYW1lSUQsIGNvbnN0IFN0cmlu
Z1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVuZXJJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKik7CiAKLSAgICBQYXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gY3Jl
YXRlTmV3UGFnZSgpOworICAgIHZvaWQgY3JlYXRlTmV3UGFnZSh1aW50NjRfdCYgbmV3UGFnZUlE
LCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBzaG93UGFnZSgpOwogICAg
IHZvaWQgY2xvc2VQYWdlKCk7Ci0gICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViRnJhbWVQ
cm94eSosIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV2Vi
RnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBydW5KYXZhU2Ny
aXB0UHJvbXB0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlc3VsdCk7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0
UHJvbXB0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFN0
cmluZyYgcmVzdWx0KTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJFdmVudDo6TW9kaWZpZXJzLCBBUElP
YmplY3QqKTsKLSAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoV2ViRnJhbWVQcm94eSosIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KHVpbnQzMl90IG1vZGlmaWVycywgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9p
ZCBjb250ZW50c1NpemVDaGFuZ2VkKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKTsKIAogICAgIC8vIEJhY2svRm9yd2FyZCBsaXN0IG1hbmFnZW1lbnQKLSAgICB2b2lk
IGFkZEl0ZW1Ub0JhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7Ci0gICAg
dm9pZCBnb1RvSXRlbUluQmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsK
KyAgICB2b2lkIGJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQpOworICAgIHZvaWQg
YmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQpOworICAgIHZvaWQgYmFja0Zvcndh
cmRCYWNrSXRlbSh1aW50NjRfdCYgaXRlbUlEKTsKKyAgICB2b2lkIGJhY2tGb3J3YXJkQ3VycmVu
dEl0ZW0odWludDY0X3QmIGl0ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEZvcndhcmRJdGVt
KHVpbnQ2NF90JiBpdGVtSUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRJdGVtQXRJbmRleChpbnQz
Ml90IGluZGV4LCB1aW50NjRfdCYgaXRlbUlEKTsKKyAgICB2b2lkIGJhY2tGb3J3YXJkQmFja0xp
c3RDb3VudChpbnQzMl90JiBjb3VudCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEZvcndhcmRMaXN0
Q291bnQoaW50MzJfdCYgY291bnQpOwogCiAgICAgLy8gVW5kbyBtYW5hZ2VtZW50Ci0gICAgdm9p
ZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1aW50NjRfdCBjb21tYW5kSUQsIFdlYkNvcmU6
OkVkaXRBY3Rpb24pOworICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0
X3QgY29tbWFuZElELCB1aW50MzJfdCBlZGl0QWN0aW9uKTsKICAgICB2b2lkIGNsZWFyQWxsRWRp
dENvbW1hbmRzKCk7CiAKICAgICB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7CiAgICAg
dm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZvaWQgZGlkVmFsaWRhdGVNZW51SXRlbShjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSk7CiAKLSAg
ICB2b2lkIGRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlwZSwgYm9vbCBoYW5kbGVkKTsKKyAg
ICB2b2lkIGRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQp
OwogCiAgICAgdm9pZCBkaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiwg
dWludDY0X3QpOwogICAgIHZvaWQgZGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiwgdWludDY0X3QpOwpAQCAtMjY1LDcgKzI3Nyw3IEBAIHByaXZhdGU6
CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIHZvaWQgZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNvbXBv
c2l0aW5nKTsKKyAgICB2b2lkIGRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBj
b21wb3NpdGluZywgRHJhd2luZ0FyZWFCYXNlOjpEcmF3aW5nQXJlYUluZm8mKTsKICNlbmRpZiAg
ICAKIAogICAgIFBhZ2VDbGllbnQqIG1fcGFnZUNsaWVudDsKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKKyAgICAjIFVJIG1lc3NhZ2VzLgorICAgIENyZWF0ZU5ld1BhZ2Uo
KSAtPiAodWludDY0X3QgbmV3UGFnZUlELCBXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMgbmV3UGFnZVBhcmFtZXRlcnMpCisgICAgU2hvd1BhZ2UoKQorICAgIENsb3NlUGFnZSgpCisg
ICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIG1lc3Nh
Z2UpIC0+ICgpCisgICAgUnVuSmF2YVNjcmlwdENvbmZpcm0odWludDY0X3QgZnJhbWVJRCwgV1RG
OjpTdHJpbmcgbWVzc2FnZSkgLT4gKGJvb2wgcmVzdWx0KQorICAgIFJ1bkphdmFTY3JpcHRQcm9t
cHQodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgbWVzc2FnZSwgV1RGOjpTdHJpbmcgZGVm
YXVsdFZhbHVlKSAtPiAoV1RGOjpTdHJpbmcgcmVzdWx0KQorICAgIE1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlRW5jb2RlciB1c2VyRGF0YSk7CisgICAgQ29udGVudHNTaXplQ2hhbmdlZCh1aW50NjRfdCBm
cmFtZUlELCBXZWJDb3JlOjpJbnRTaXplIG5ld1NpemUpCisgICAgRGlkUmVjZWl2ZUV2ZW50KHVp
bnQzMl90IHR5cGUsIGJvb2wgaGFuZGxlZCkKKyAgICBEaWRWYWxpZGF0ZU1lbnVJdGVtKFdURjo6
U3RyaW5nIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSkKKyAgICBT
ZXRDdXJzb3IoV2ViQ29yZTo6Q3Vyc29yIGN1cnNvcikKKyAgICBTZXRTdGF0dXNUZXh0KFdURjo6
U3RyaW5nIHN0YXR1c1RleHQpCisgICAgU2V0VG9vbFRpcChXVEY6OlN0cmluZyB0b29sVGlwKQor
ICAgIFRha2VGb2N1cyhib29sIGRpcmVjdGlvbikKKworICAgICMgUG9saWN5IG1lc3NhZ2VzLgor
ICAgIERlY2lkZVBvbGljeUZvck1JTUVUeXBlKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5n
IE1JTUVUeXBlLCBXVEY6OlN0cmluZyB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCisgICAgRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBu
YXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBX
VEY6OlN0cmluZyB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCisgICAgRGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBl
LCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIFdURjo6U3RyaW5nIHVy
bCwgdWludDY0X3QgbGlzdGVuZXJJRCkKKworICAgICMgUHJvZ3Jlc3MgbWVzc2FnZXMuCisgICAg
RGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlIHZhbHVlKQorICAgIERpZEZpbmlzaFByb2dyZXNzKCkK
KyAgICBEaWRTdGFydFByb2dyZXNzKCkKKworICAgICMgRnJhbWUgbGlmZXRpbWUgbWVzc2FnZXMu
CisgICAgRGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCisgICAgRGlkQ3JlYXRl
U3ViRnJhbWUodWludDY0X3QgZnJhbWVJRCkKKworICAgICMgRnJhbWUgbG9hZCBtZXNzYWdlcy4K
KyAgICBEaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcg
bWltZVR5cGUsIFdlYktpdDo6UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZv
LCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAg
IERpZEZhaWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRGYWlsUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyIHVzZXJEYXRhKQorICAgIERpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlE
LCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAg
IERpZEZpcnN0TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVk
QnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6
U3RyaW5nIHVybCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2Vy
RGF0YSkKKyAgICBEaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkodWludDY0X3QgZnJhbWVJRCwg
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBE
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3Ry
aW5nIHVybCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0
YSkKKyAgICBEaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0
cmluZyB0aXRsZSwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2Vy
RGF0YSkKKworICAgICMgRm9ybXMgbWVzc2FnZXMuCisgICAgV2lsbFN1Ym1pdEZvcm0odWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3Qgc291cmNlRnJhbWVJRCwgV2ViS2l0OjpTdHJpbmdQYWlyVmVj
dG9yIHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVuZXJJRCwgV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKworICAgICMgQ2FsbGJhY2sgbWVz
c2FnZXMuCisgICAgRGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpT
dHJpbmcgcmVzdWx0U3RyaW5nLCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAgIERpZEdldFNvdXJj
ZUZvckZyYW1lKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkK
KyAgICBEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoV1RGOjpTdHJpbmcgcmVzdWx0U3RyaW5n
LCB1aW50NjRfdCBjYWxsYmFja0lEKQorCisgICAgIyBCYWNrRm9yd2FyZCBtZXNzYWdlcy4KKyAg
ICBCYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkR29U
b0l0ZW0odWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkQmFja0l0ZW0oKSAtPiAodWlu
dDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkQ3VycmVudEl0ZW0oKSAtPiAodWludDY0X3Qg
aXRlbUlEKQorICAgIEJhY2tGb3J3YXJkRm9yd2FyZEl0ZW0oKSAtPiAodWludDY0X3QgaXRlbUlE
KQorICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgodWludDY0X3QgaXRlbUlEKSAtPiAodWludDY0
X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCgpIC0+IChpbnQzMl90IGl0
ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSAtPiAoaW50MzJfdCBpdGVt
SUQpCisKKyAgICAjIFVuZG9SZWRvIG1lc3NhZ2VzLgorICAgIFJlZ2lzdGVyRWRpdENvbW1hbmRG
b3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgdWludDMyX3QgZWRpdEFjdGlvbikKKyAgICBDbGVh
ckFsbEVkaXRDb21tYW5kcygpCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgIyBBY2NlbGVyYXRlZCBjb21wc2l0aW5nIG1lc3NhZ2VzLgorICAgIERpZENoYW5nZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBjb21wb3NpdGluZykgLT4gKFdlYktpdDo6RHJhd2luZ0Fy
ZWFCYXNlOjpEcmF3aW5nQXJlYUluZm8gbmV3RHJhd2luZ0FyZWEpCisjZW5kaWYKK30KSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDY5
MTE5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHRv
b2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgU3RyaW5nJiBuZXdU
b29sVGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNv
ciYpOwogCi0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4sIFVuZG9PclJlZG8pOworICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQ
YXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
OwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2b2lkIHNldEVkaXRDb21t
YW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBz
dGF0ZSk7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIE5T
U3RyaW5nKiBuYW1lRm9yRWRpdEFjdGlvbihFZGl0QQogICAgIHJldHVybiBuaWw7CiB9CiAKLXZv
aWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0
Q29tbWFuZFByb3h5PiBwcnBDb21tYW5kLCBVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1h
bmRQcm94eT4gcHJwQ29tbWFuZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8p
CiB7CiAgICAgUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQgPSBwcnBDb21tYW5k
OwogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0ZXJFZGl0
Q29tbWFuZAogICAgIE5TU3RyaW5nICphY3Rpb25OYW1lID0gbmFtZUZvckVkaXRBY3Rpb24oY29t
bWFuZC0+ZWRpdEFjdGlvbigpKTsKIAogICAgIE5TVW5kb01hbmFnZXIgKnVuZG9NYW5hZ2VyID0g
W21fd2tWaWV3IHVuZG9NYW5hZ2VyXTsKLSAgICBbdW5kb01hbmFnZXIgcmVnaXN0ZXJVbmRvV2l0
aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6KCh1bmRvT3JSZWRvID09IFVuZG8p
ID8gQHNlbGVjdG9yKHVuZG9FZGl0aW5nOikgOiBAc2VsZWN0b3IocmVkb0VkaXRpbmc6KSkgb2Jq
ZWN0OmNvbW1hbmRPYmpDLmdldCgpXTsKKyAgICBbdW5kb01hbmFnZXIgcmVnaXN0ZXJVbmRvV2l0
aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6KCh1bmRvT3JSZWRvID09IFdlYlBh
Z2VQcm94eTo6VW5kbykgPyBAc2VsZWN0b3IodW5kb0VkaXRpbmc6KSA6IEBzZWxlY3RvcihyZWRv
RWRpdGluZzopKSBvYmplY3Q6Y29tbWFuZE9iakMuZ2V0KCldOwogICAgIGlmIChhY3Rpb25OYW1l
KQogICAgICAgICBbdW5kb01hbmFnZXIgc2V0QWN0aW9uTmFtZTphY3Rpb25OYW1lXTsKIH0KSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJKHJldmlzaW9uIDY5MTE5KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgUVdLUGFnZVByaXZhdGU6OnRvb2xUaXBDaGFuZ2VkKGNvbnMKICAg
ICBlbWl0IHEtPnN0YXR1c0Jhck1lc3NhZ2UoUVN0cmluZyhuZXdUb29sdGlwKSk7CiB9CiAKLXZv
aWQgUVdLUGFnZVByaXZhdGU6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0
Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbykKK3ZvaWQgUVdLUGFnZVByaXZhdGU6OnJlZ2lzdGVy
RWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5
OjpVbmRvT3JSZWRvKQogewogfQogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdr
cGFnZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2Vf
cC5oCShyZXZpc2lvbiA2OTExOSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdl
X3AuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKICAgICB2aXJ0dWFsIHZv
aWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRp
cENoYW5nZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0
Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRp
dENvbW1hbmQoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdl
UHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5k
cygpOwogCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QpOwpJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1NzIsNyBA
QCB2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDCiAgICAgOjpTZXRDdXJz
b3IocGxhdGZvcm1DdXJzb3IpOwogfQogCi12b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbykKK3ZvaWQgV2Vi
Vmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCiB7CiB9CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHRvb2xU
aXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwotICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94
eT4sIFVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBh
c3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgV1RGOjpTdHJpbmcmLCBib29sLCBpbnQpOwog
CkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjkxMTkpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTg5LDggKzE4OSw2IEBACiAJCUJDMTExQjUxMTEyRjYxOTIwMDMz
N0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMTExQjRDMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1w
bC5tbSAqLzsgfTsKIAkJQkMxMTFCNUQxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFC
NUIxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oICovOyB9OwogCQlCQzExMUI1
RTExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8q
IFdlYkV2ZW50RmFjdG9yeS5tbSAqLzsgfTsKLQkJQkMxMTFCNjQxMTJGNjM4MzAwMzM3QkFCIC8q
IFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMxMTFCNjExMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94
eU1lc3NhZ2VLaW5kcy5oICovOyB9OwotCQlCQzExMUI2NTExMkY2MzgzMDAzMzdCQUIgLyogV2Vi
UHJvY2Vzc01lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMxMTFCNjIxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlByb2Nlc3NNZXNzYWdl
S2luZHMuaCAqLzsgfTsKIAkJQkMxMzFCQzkxMTcyNkMyODAwQjY5NzI3IC8qIENvcmVJUENNZXNz
YWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMTMxQkM4MTE3MjZDMjgwMEI2OTcyNyAvKiBDb3JlSVBDTWVzc2FnZUtpbmRzLmggKi87IH07
CiAJCUJDMTRERjc3MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0REY3
NTEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oICovOyB9Owog
CQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0REY3
NjEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHAgKi87IH07
CkBAIC0zNTEsNiArMzQ5LDkgQEAKIAkJQkNCOUY4QjAxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBv
bGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCOUY4QUUxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5oICovOyB9Owog
CQlCQ0JDQjBDQjEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQ0IwQ0ExMjE1RTMy
MTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuaCAqLzsgfTsKIAkJQkNCQ0IwQ0QxMjE1
RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQ0IwQ0MxMjE1RTMzQTAwREU1OUNBIC8q
IEltbXV0YWJsZURpY3Rpb25hcnkuY3BwICovOyB9OworCQlCQ0JEMzkxNDEyNUJCMUE4MDBEMkMy
OUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEyMTI1QkIxQTgwMEQyQzI5RiAvKiBX
ZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlCQ0JEMzkxNTEyNUJCMUE4
MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlCQ0JEM0MzQjEyNUJGQTdBMDBEMkMyOUYgLyog
U3RyaW5nUGFpclZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3IuaCAq
LzsgfTsKIAkJQkNDNTZGNzkxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NkY3NzExNTk5NTdEMDAx
Q0NBRjkgLyogTWFjaFBvcnQuaCAqLzsgfTsKIAkJQkNDNTcxNUIxMTVBREFFRjAwMUNDQUY5IC8q
IFdlYlN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFj
ZS5oICovOyB9OwogCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJm
YWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkND
NTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSAqLzsgfTsKQEAg
LTY0MSw4ICs2NDIsNiBAQAogCQlCQzExMUI0QzExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVu
dEltcGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlQ2xp
ZW50SW1wbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCNUIxMTJGNjI5
ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50RmFjdG9yeS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMxMTFCNjExMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBh
Z2VQcm94eU1lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkMxMTFCNjIxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlByb2Nlc3NNZXNzYWdlS2luZHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEzMUJDODExNzI2QzI4MDBCNjk3MjcgLyog
Q29yZUlQQ01lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JlSVBDTWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTRE
Rjc1MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNERGNzYxMjBCNUI3OTAwODI2QzBDIC8q
IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04MDMsNiArODAyLDEwIEBACiAJCUJDQjlGOEFFMTEyNEUwNzcwMEEx
MzdFMCAvKiBXZWJQb2xpY3lDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUG9saWN5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQkNC
MENBMTIxNUUzMjEwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltbXV0YWJsZURpY3Rpb25hcnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNCQ0IwQ0MxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURp
Y3Rpb25hcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1tdXRh
YmxlRGljdGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQkQzOEZB
MTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0JEMzkxMjEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBh
Z2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JEM0MzQTEyNUJGQTdBMDBEMkMyOUYgLyogU3Ry
aW5nUGFpclZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQ
YWlyVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzU2Rjc3MTE1OTk1
N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNoUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M1NzE1OTExNUFE
QUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0M1NzE1QTExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtSW50ZXJm
YWNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMCw2ICsxMTMzLDcgQEAK
IAkJCQkxQTBGMjlDQTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5oICovLAog
CQkJCUJDMUREN0IxMTE0REMzOTYwMDVBREFGMyAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCAq
LywKIAkJCQlCQ0Y1MDcyNjEyNDMyOUFBMDA1OTU1QUUgLyogV2ViQ2VydGlmaWNhdGVJbmZvLmgg
Ki8sCisJCQkJQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3IuaCAq
LywKIAkJCQk1MTU3OEI4MjEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oICovLAogCQkJCTUx
NkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovLAogCQkJCUJDMDMyREFGMTBG
NDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudC5oICovLApAQCAtMTMzMCw2ICsxMzM0LDcgQEAKIAkJ
CQlCQ0VFOThDNTExMzMxNEQ3MDA2QkNDMjQgLyogV2ViUGFnZU5hbWVzcGFjZS5oICovLAogCQkJ
CUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLAogCQkJCUJD
MDMyRENCMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKKwkJCQlCQ0JEMzhG
QTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUJD
QjlGOEFEMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lDbGllbnQuY3BwICovLAogCQkJCUJD
QjlGOEFFMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lDbGllbnQuaCAqLywKIAkJCQlCQ0Q1
OTdGRTExMkI1N0JFMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5jZXMuY3BwICovLApAQCAtMTQ2MCw4
ICsxNDY1LDYgQEAKIAkJCQlCQzlFOTY5OTExNDU3RURFMDA4NzBFNzEgLyogRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VLaW5kcy5oICovLAogCQkJCUJDQjI4Q0JGMTIwMjMzRDkwMDdEOTlCQyAvKiBJ
bmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oICovLAogCQkJCUJDQ0I3NUM1MTIwM0ExQ0UwMDIy
MkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggKi8sCi0JCQkJQkMxMTFCNjExMTJGNjM4
MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oICovLAotCQkJCUJDMTExQjYy
MTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmggKi8sCiAJCQkJQkNC
NzM0NkQxMUNFRTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBDb3JlSVBDU3VwcG9ydDsKQEAgLTE3MDIsNiArMTcwNSw4IEBA
CiAJCQkJMUE4RUZBNkYxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCAq
LywKIAkJCQlDMENFNzI5RTEyNDdFNzFEMDBCQzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCiAJCQkJQzBDRTcyOUYxMjQ3RTcxRDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdl
cy5oICovLAorCQkJCUJDQkQzOTEyMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBX
ZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgx
MjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJ
CQlCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5j
cHAgKi8sCkBAIC0xODA3LDcgKzE4MTIsNiBAQAogCQkJCUJDMDMyRDhGMTBGNDM3QTAwMDU4QzE1
QSAvKiBXZWJQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VFOThDNzExMzMxNEQ3MDA2QkND
MjQgLyogV2ViUGFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJERDExMEY0
Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxMTFC
NjQxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOUY4QjAxMTI0RTA3NzAwQTEzN0UwIC8qIFdl
YlBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNENTk3RkYxMTJCNTdCRTAwRUM4
QzIzIC8qIFdlYlByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTE4MTUsNyArMTgxOSw2
IEBACiAJCQkJQkMwMzJEOTcxMEY0MzdBRjAwNThDMTVBIC8qIFdlYlByb2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNkZBMDIwMTFFMTUyODcwMERCMTM3MSAvKiBXZWJQcm9jZXNzTWFpbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJERDMxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlByb2Nl
c3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzExMUI2NTExMkY2MzgzMDAzMzdCQUIg
LyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJERDUx
MEY0Mzg5RjAwNThDMTVBIC8qIFdlYlByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNCNzM0NkUxMUNFRTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDNTcxNUIxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3Rl
bUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTM4LDYgKzE5NDEsOCBAQAogCQkJCUJD
MzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzMwNjZCRjEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzMwNjgyNDEyNUE2Qjk0MDBFNzEyNzggLyogV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNCRDM5MTUxMjVCQjFBODAwRDJD
MjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0JEM0Mz
QjEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xOTg3LDYgKzE5OTIsNyBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxREVCOTFCMTA4NzMzREE1MDAxMEU5Q0QgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJLaXQyIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlW
ZXJzaW9uID0gIlhjb2RlIDMuMSI7CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlF
bmdsaXNoLApAQCAtMjIzNCw2ICsyMjQwLDcgQEAKIAkJCQlCQzMwNjVDNDEyNTkyRjg5MDBFNzEy
NzggLyogV2ViUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2NkJFMTI1QTQ0
MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMzA2ODI1MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDQkQzOTE0MTI1QkIxQTgwMEQyQzI5RiAv
KiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAkocmV2aXNpb24gNjkxMTkpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3Rv
cmUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKQordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiB3aW5kb3dS
ZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC05OCw4ICs5OCw3IEBAIGJvb2wg
V2ViQ2hyb21lQ2xpZW50OjpjYW5UYWtlRm9jdXMoRm9jdXMKIAogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlRha2VG
b2N1cywgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCA/IHRydWUgOiBm
YWxzZSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlRha2VGb2N1cyhkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25G
b3J3YXJkID8gdHJ1ZSA6IGZhbHNlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopCkBAIC0xMTEsMTAgKzExMCw5
IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW0KIHsKICAgICB1aW50
NjRfdCBuZXdQYWdlSUQgPSAwOwogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1l
dGVyczsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6Q3JlYXRlTmV3UGFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29y
ZUlQQzo6SW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29yZUlQQzo6T3V0KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5l
Y3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZSgp
LAorICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6UmVw
bHkobmV3UGFnZUlELCBwYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCks
IENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCkBAIC0yMzYsMTAgKzIzNCw4IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZh
U2NyaXB0QWxlcnQKICAgICAvLyBOb3RpZnkgdGhlIGJ1bmRsZSBjbGllbnQuCiAgICAgbV9wYWdl
LT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFTY3JpcHRBbGVydChtX3BhZ2Us
IGFsZXJ0VGV4dCwgd2ViRnJhbWUpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQs
IG1fcGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb3JlSVBDOjpJbih3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBhbGVydFRleHQpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6
T3V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIGFsZXJ0VGV4dCksCisgICAgICAgIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5w
YWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KTsKIH0KIAogYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQpAQCAtMjUwLDEyICsyNDYsOSBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6
cnVuSmF2YVNjcmlwdENvbmZpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCku
d2lsbFJ1bkphdmFTY3JpcHRDb25maXJtKG1fcGFnZSwgbWVzc2FnZSwgd2ViRnJhbWUpOwogCiAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6UnVuSmF2YVNjcmlwdENv
bmZpcm0sIG1fcGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKHdlYkZyYW1lLT5mcmFtZUlEKCksIG1l
c3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb3JlSVBDOjpPdXQocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkg
eworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJh
bWVJRCgpLCBtZXNzYWdlKSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
dW5KYXZhU2NyaXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNjcsMTIgKzI2MCw5IEBAIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXAKICAgICAvLyBOb3RpZnkgdGhlIGJ1bmRs
ZSBjbGllbnQuCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkph
dmFTY3JpcHRQcm9tcHQobV9wYWdlLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHdlYkZyYW1lKTsK
IAotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhX
ZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0UHJvbXB0LCBtX3BhZ2UtPnBhZ2VJRCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3JlSVBDOjpJbih3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Jl
SVBDOjpPdXQocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIG1l
c3NhZ2UsIGRlZmF1bHRWYWx1ZSksCisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwg
Q29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KIAogICAgIHJldHVybiAhcmVzdWx0LmlzTnVsbCgpOwogfQpAQCAtMjgyLDcgKzI3Miw3
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRTdGF0dXNiYXJUZXh0KGMKICAgICAvLyBOb3Rp
ZnkgdGhlIGJ1bmRsZSBjbGllbnQuCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50
KCkud2lsbFNldFN0YXR1c2JhclRleHQobV9wYWdlLCBzdGF0dXNiYXJUZXh0KTsKIAotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdl
OjpTZXRTdGF0dXNUZXh0LCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGF0dXNiYXJUZXh0KTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2V0U3RhdHVzVGV4dChzdGF0dXNiYXJUZXh0KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKQEAg
LTM0Myw4ICszMzMsOCBAQCBQbGF0Zm9ybVBhZ2VDbGllbnQgV2ViQ2hyb21lQ2xpZW50OjpwbGF0
CiB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSogZnJhbWUs
IGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0g
IHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSktPndlYkZyYW1lKCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNvbnRlbnRzU2l6ZUNoYW5nZWQsIG1fcGFnZS0+
cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
cmVJUEM6OkluKHdlYkZyYW1lLT5mcmFtZUlEKCksIHNpemUpKTsKKworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDb250
ZW50c1NpemVDaGFuZ2VkKHdlYkZyYW1lLT5mcmFtZUlEKCksIHNpemUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmlldyhjb25z
dCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0CkBAIC0zNjUsNyArMzU1LDcgQEAg
dm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVVSUNsaWVudCgpLm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgaGl0
VGVzdFJlc3VsdCwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJGbGFn
cyksIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpN
b3VzZURpZE1vdmVPdmVyRWxlbWVudCwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obW9k
aWZpZXJGbGFncywgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0
KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1vZGlmaWVyRmxhZ3Ms
IEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25z
dCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJlY3Rpb24pCkBAIC0zNzYsNyArMzY2LDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3QgUwogICAgICAgICByZXR1cm47CiAg
ICAgbV9jYWNoZWRUb29sVGlwID0gdG9vbFRpcDsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRUb29sVGlwLCBtX3Bh
Z2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2NhY2hlZFRvb2xUaXApKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0VG9vbFRpcChtX2NhY2hlZFRvb2xUaXApLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKikKQEAgLTQ3Niw3ICs0NjYsNyBAQCB2b2lk
IFdlYkNocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzCiB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQogewogI2lmIFVTRShMQVpZX05BVElW
RV9DVVJTT1IpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OlNldEN1cnNvciwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6
SW4oY3Vyc29yKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJzb3IpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjkxMTkpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVz
c2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KQEAgLTIxMSw4ICsyMTEsNyBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJDb21tYW5kRm9yCiAgICAgbV9wYWdlLT5hZGRX
ZWJFZGl0Q29tbWFuZCh3ZWJDb21tYW5kLT5jb21tYW5kSUQoKSwgd2ViQ29tbWFuZC5nZXQoKSk7
CiAgICAgdWludDMyX3QgZWRpdEFjdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3ZWJDb21t
YW5kLT5jb21tYW5kKCktPmVkaXRpbmdBY3Rpb24oKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6UmVnaXN0ZXJFZGl0
Q29tbWFuZEZvclVuZG8sIG1fcGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKHdlYkNvbW1hbmQtPmNvbW1hbmRJRCgp
LCBlZGl0QWN0aW9uKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdl
YkNvbW1hbmQtPmNvbW1hbmRJRCgpLCBlZGl0QWN0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQ
dHI8RWRpdENvbW1hbmQ+KQpAQCAtMjIxLDcgKzIyMCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpyZWdpc3RlckNvbW1hbmRGb3IKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNsZWFyVW5kb1Jl
ZG9PcGVyYXRpb25zKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6Q2xlYXJBbGxFZGl0Q29tbWFuZHMsIG1fcGFnZS0+
cGFnZUlEKCksIENvcmVJUEM6OkluKCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDbGVhckFsbEVkaXRDb21tYW5k
cygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmNhblVu
ZG8oKSBjb25zdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2OTExOSkKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8uaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rv
ci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkVy
cm9ycy5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCkBAIC0zOCw3ICszOSw3IEBACiAjaW5jbHVk
ZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25E
YXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgpAQCAtMTI1LDcgKzEyNiw4
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVAKICAgICB3ZWJQYWdl
LT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNo
eSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJv
Y2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFn
ZVByb3h5TWVzc2FnZTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5LCB3ZWJQYWdlLT5wYWdl
SUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVtb3ZlRnJh
bWVGcm9tSGllcmFyY2h5KG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOworCiB9CiAK
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDMoKQpAQCAtMjIz
LDcgKzIyNSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKICAg
ICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJE
YXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlE
KCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgdXJsLCBJbmplY3RlZEJ1bmRsZVVz
ZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJ
RCgpLCB1cmwsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgp
KSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpCkBAIC0yOTUsNyArMjk3LDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdAogICAgIHdlYlBhZ2UtPmluamVj
dGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh3
ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vz
cy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFn
ZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgdXJsLCBJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIHVybCwgSW5qZWN0
ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFn
ZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQpAQCAtMzEwLDcgKzMxMiw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1
bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHdlYlBhZ2UsIHRpdGxl
LCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBD
OjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIHRpdGxlLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVRpdGxlRm9y
RnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCB0aXRsZSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2Fn
ZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUljb25zKCkKQEAgLTMzMSw3
ICszMzMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvCiAgICAg
d2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRDb21taXRMb2FkRm9yRnJh
bWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVBy
b2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRpZENvbW1pdExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCks
IENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UubWltZVR5cGUoKSwgUGxh
dGZvcm1DZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ29tbWl0TG9hZEZvckZy
YW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UubWltZVR5cGUoKSwgUGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1
c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKQEAgLTM0Niw3ICszNDgsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZhCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGll
bnQoKS5kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUod2ViUGFnZSwgbV9m
cmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJ
UEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29k
ZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZhaWxQcm92aXNpb25hbExvYWRG
b3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKICAgICAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgbG9hZCBsaXN0ZW5lciwgbm90aWZ5IGl0LgogICAgIGlmIChXZWJGcmFtZTo6
TG9hZExpc3RlbmVyKiBsb2FkTGlzdGVuZXIgPSBtX2ZyYW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAg
LTM2NSw3ICszNjcsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZh
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGYWlsTG9hZFdp
dGhFcnJvckZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5v
dGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGYWlsTG9hZEZvckZyYW1lLCB3ZWJQYWdl
LT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFp
bExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIC8v
IElmIHdlIGhhdmUgYSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdlYkZyYW1l
OjpMb2FkTGlzdGVuZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5lcigpKQpA
QCAtMzg0LDcgKzM4Niw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
RmkKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8v
IE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JG
cmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwg
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwg
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFn
ZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZEZpbmlzaExvYWQoKQpAQCAtMzk5LDcgKzQwMSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkRmkKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVu
dCgpLmRpZEZpbmlzaExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAK
ICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoTG9hZEZvckZy
YW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmluaXNoTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRC
dW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlE
KCkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAg
ICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9h
ZExpc3RlbmVyKCkpCkBAIC00MTgsNyArNDIwLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRGaQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50
KCkuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAK
ICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmlyc3RMYXlvdXRGb3JG
cmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwg
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdl
SUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKQEAgLTQzMyw3ICs0MzUsNyBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVM
b2FkZXJDbGllbnQoKS5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh3ZWJQ
YWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4K
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5
TWVzc2FnZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUsIHdlYlBhZ2Ut
PnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAogRnJhbWUqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0
ZVBhZ2UoKQpAQCAtNTE0LDggKzUxNiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGVjaWQKICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gbV9mcmFtZS0+c2V0VXBQb2xp
Y3lMaXN0ZW5lcihmdW5jdGlvbik7CiAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSByZXF1ZXN0LnVy
bCgpLnN0cmluZygpOyAvLyBGSVhNRTogUGFzcyBlbnRpcmUgcmVxdWVzdC4KIAotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpE
ZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSwgd2ViUGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1l
SUQoKSwgTUlNRVR5cGUsIHVybCwgbGlzdGVuZXJJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZShtX2ZyYW1lLT5mcmFtZUlEKCksIE1JTUVUeXBlLCB1cmwsIGxpc3RlbmVy
SUQpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25z
dCBTdHJpbmcmIGZyYW1lTmFtZSkKQEAgLTUzNCw4ICs1MzUsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgdWludDMyX3QgbW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBpbnQzMl90IG1v
dXNlQnV0dG9uID0gbW91c2VCdXR0b25Gb3JOYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rp
b24pOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbiwgd2ViUGFnZS0+
cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
cmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywg
bW91c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwgbW9k
aWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2
aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCkBAIC01NjAsOCArNTYwLDcgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgIHVpbnQzMl90IG1vZGlmaWVy
cyA9IG1vZGlmaWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CiAgICAg
aW50MzJfdCBtb3VzZUJ1dHRvbiA9IG1vdXNlQnV0dG9uRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZp
Z2F0aW9uQWN0aW9uKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
LCB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwg
bW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSk7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0
aW9uVHlwZSwgbW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSwgd2ViUGFn
ZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxQb2xp
Y3lDaGVjaygpCkBAIC01OTIsOSArNTkxLDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hXaWxsUwogCiAKICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gbV9mcmFtZS0+c2V0
VXBQb2xpY3lMaXN0ZW5lcihmdW5jdGlvbik7CisgICAgU3RyaW5nUGFpclZlY3RvciB2YWx1ZXNW
ZWN0b3IodmFsdWVzKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpXaWxsU3VibWl0Rm9ybSwgd2ViUGFnZS0+cGFnZUlE
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6
OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgc291cmNlRnJhbWUtPmZyYW1lSUQoKSwgdmFsdWVzLCBs
aXN0ZW5lcklELCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6V2lsbFN1Ym1pdEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3Vy
Y2VGcmFtZS0+ZnJhbWVJRCgpLCB2YWx1ZXNWZWN0b3IsIGxpc3RlbmVySUQsIEluamVjdGVkQnVu
ZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJl
c291cmNlKERvY3VtZW50TG9hZGVyKikKQEAgLTYzMCwyMSArNjI5LDIyIEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZUVzdGkKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIGlmIChXZWJQYWdlKiB3
ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkU3RhcnRQcm9ncmVzcywg
d2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCkpOworICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3Rh
cnRQcm9ncmVzcygpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7CiAg
ICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgZG91
YmxlIHByb2dyZXNzID0gd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVk
UHJvZ3Jlc3MoKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENoYW5nZVByb2dyZXNzLCB3ZWJQYWdlLT5wYWdl
SUQoKSwgQ29yZUlQQzo6SW4ocHJvZ3Jlc3MpKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZVBy
b2dyZXNzKHByb2dyZXNzKSwgd2ViUGFnZS0+cGFnZUlEKCkpOworCiAgICAgfQogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigp
CiB7CiAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNz
YWdlOjpEaWRGaW5pc2hQcm9ncmVzcywgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCkp
OworICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoUHJvZ3Jlc3MoKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJl
YWR5KGJvb2wpCkBAIC05NDgsNyArOTQ4LDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OgogICAgIFJlZlB0cjxXZWJGcmFtZT4gc3ViZnJhbWUgPSBXZWJGcmFtZTo6
Y3JlYXRlU3ViZnJhbWUod2ViUGFnZSwgbmFtZSwgb3duZXJFbGVtZW50KTsKIAogICAgIC8vIE5v
dGlmeSB0aGUgVUkgcHJvY2VzcyB0aGF0IHN1YmZyYW1lIGhhcyBiZWVuIGFkZGVkLgotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdl
OjpEaWRDcmVhdGVTdWJGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKHN1YmZy
YW1lLT5mcmFtZUlEKCkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ3JlYXRlU3ViRnJhbWUoc3ViZnJhbWUt
PmZyYW1lSUQoKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIEZyYW1lKiBjb3JlU3ViZnJh
bWUgPSBzdWJmcmFtZS0+Y29yZUZyYW1lKCk7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAJKHJldmlzaW9u
IDY5MTE5KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtMTE5
LDcgKzExOSw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW0oUGEKIAog
ICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IHBycEl0ZW07CiAgICAgdWludDY0X3QgaXRl
bUlEID0gaGlzdG9yeUl0ZW1Ub0lETWFwKCkuZ2V0KGl0ZW0pOwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2Fy
ZEFkZEl0ZW0sIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGl0ZW1JRCkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpCYWNrRm9yd2FyZEFkZEl0ZW0oaXRlbUlEKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
IHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmdvQmFjaygpCkBAIC0xMzUsMTYgKzEzNSwx
NiBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpnb0ZvcndhcmQoCiB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5Ojpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICB1
aW50NjRfdCBpdGVtSUQgPSBoaXN0b3J5SXRlbVRvSURNYXAoKS5nZXQoaXRlbSk7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkJhY2tGb3J3YXJkR29Ub0l0ZW0sIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGl0ZW1J
RCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEdvVG9JdGVtKGl0ZW1JRCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworCiB9CiAKIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFj
a0l0ZW0oKQogewogICAgIHVpbnQ2NF90IGJhY2tJdGVtSUQgPSAwOwotICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdl
OjpCYWNrRm9yd2FyZEJhY2tJdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBD
OjpPdXQoYmFja0l0ZW1JRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrSXRlbSgpLAorICAgICAgICAgICAgIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0l0ZW06OlJlcGx5KGJhY2tJdGVtSUQp
LAorICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5v
VGltZW91dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xNTgsMTAgKzE1OCw5
IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmEKIEhpc3RvcnlJdGVt
KiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y3VycmVudEl0ZW0oKQogewogICAgIHVpbnQ2NF90
IGN1cnJlbnRJdGVtSUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEN1cnJlbnRJ
dGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoY3VycmVudEl0ZW1J
RCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
QmFja0ZvcndhcmRDdXJyZW50SXRlbSgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkJhY2tGb3J3YXJkQ3VycmVudEl0ZW06OlJlcGx5KGN1cnJlbnRJdGVtSUQpLAorICAg
ICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91
dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xNzUsMTAgKzE3NCw5IEBAIEhp
c3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y3UKIEhpc3RvcnlJdGVtKiBXZWJC
YWNrRm9yd2FyZExpc3RQcm94eTo6Zm9yd2FyZEl0ZW0oKQogewogICAgIHVpbnQ2NF90IGZvcndh
cmRJdGVtSUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
Z2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoZm9yd2FyZEl0ZW1JRCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJ
UEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0Zv
cndhcmRGb3J3YXJkSXRlbSgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkJhY2tGb3J3YXJkRm9yd2FyZEl0ZW06OlJlcGx5KGZvcndhcmRJdGVtSUQpLAorICAgICAgICAg
ICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xOTIsMTAgKzE5MCw5IEBAIEhpc3RvcnlJ
dGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Zm8KIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6aXRlbUF0SW5kZXgoaW50IGl0ZW1JbmRleCkKIHsKICAgICB1aW50NjRf
dCBpdGVtSUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
Z2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihpdGVtSW5kZXgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoaXRlbUlEKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNr
Rm9yd2FyZEl0ZW1BdEluZGV4KGl0ZW1JbmRleCksCisgICAgICAgICAgICAgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwKKyAgICAg
ICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQp
KSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjM5LDEwICsyMzYsOSBAQCB2b2lk
IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRFbmFibGVkCiBpbnQgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OmJhY2tMaXN0Q291bnQoKQogewogICAgIGludCBiYWNrTGlzdENvdW50ID0gMDsK
LSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2Vi
UGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoYmFja0xpc3RDb3VudCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rp
b246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlz
dENvdW50KCksCisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0Zvcndh
cmRCYWNrTGlzdENvdW50OjpSZXBseShiYWNrTGlzdENvdW50KSwKKyAgICAgICAgICAgICBtX3Bh
Z2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMjUyLDEwICsyNDgsOSBAQCBpbnQgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OmJhY2tMaXN0Q291CiBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmZv
cndhcmRMaXN0Q291bnQoKQogewogICAgIGludCBmb3J3YXJkTGlzdENvdW50ID0gMDsKLSAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBD
b3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb3JlSVBDOjpPdXQoZm9yd2FyZExpc3RDb3VudCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rp
b246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJk
TGlzdENvdW50KCksCisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0Zv
cndhcmRGb3J3YXJkTGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50KSwKKyAgICAgICAg
ICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDY5MTE5KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNs
dWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1
ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC0xNDIsNyArMTQyLDcgQEAg
V2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAogICAgIFNldHRpbmdzOjpz
ZXRNaW5ET01UaW1lckludGVydmFsKDAuMDA0KTsKIAogICAgIG1fbWFpbkZyYW1lID0gV2ViRnJh
bWU6OmNyZWF0ZU1haW5GcmFtZSh0aGlzKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ3JlYXRlTWFpbkZyYW1lLCBt
X3BhZ2VJRCwgQ29yZUlQQzo6SW4obV9tYWluRnJhbWUtPmZyYW1lSUQoKSkpOworICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRDcmVhdGVNYWluRnJhbWUobV9tYWluRnJhbWUtPmZyYW1lSUQoKSksIG1fcGFnZUlEKTsK
IAogI2lmbmRlZiBOREVCVUcKICAgICB3ZWJQYWdlQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTI0
NiwxMCArMjQ2LDEwIEBAIHZvaWQgV2ViUGFnZTo6Y2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGkK
ICAgICAvLyBUZWxsIHRoZSBVSSBwcm9jZXNzIHRoYXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
Y2hhbmdlZC4gSXQgbWF5IHJlc3BvbmQgYnkgY2hhbmdpbmcKICAgICAvLyBkcmF3aW5nIGFyZWEg
dHlwZXMuCiAgICAgRHJhd2luZ0FyZWE6OkRyYXdpbmdBcmVhSW5mbyBuZXdEcmF3aW5nQXJlYUlu
Zm87Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhXZWJQ
YWdlUHJveHlNZXNzYWdlOjpEaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlSUQsIENvcmVJ
UEM6OkluKGNvbXBvc2l0aW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvcmVJUEM6Ok91dChuZXdEcmF3aW5nQXJlYUluZm8pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlv
bjo6Tm9UaW1lb3V0KTsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZyhjb21wb3NpdGluZyksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc6OlJlcGx5KG5ld0RyYXdpbmdBcmVhSW5mbyks
CisgICAgICAgIG1fcGFnZUlELCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpOwogICAg
IAogICAgIGlmIChuZXdEcmF3aW5nQXJlYUluZm8udHlwZSAhPSBkcmF3aW5nQXJlYSgpLT5pbmZv
KCkudHlwZSkgewogICAgICAgICBtX2RyYXdpbmdBcmVhID0gMDsKQEAgLTI2MywxMCArMjYzLDcg
QEAgdm9pZCBXZWJQYWdlOjpjaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aQogdm9pZCBXZWJQYWdl
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ewogICAgIGNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyKTsKLSAgICAKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgbV9kcmF3aW5nQXJlYS0+c2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIobGF5ZXIpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUGFnZTo6ZXhp
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKQEAgLTI5Nyw3ICsyOTQsNyBAQCB2b2lkIFdl
YlBhZ2U6OnRyeUNsb3NlKCkKIAogdm9pZCBXZWJQYWdlOjpzZW5kQ2xvc2UoKQogewotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdl
OjpDbG9zZVBhZ2UsIG1fcGFnZUlELCBDb3JlSVBDOjpJbigpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2xvc2VQ
YWdlKCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpsb2FkVVJMKGNvbnN0IFN0cmlu
ZyYgdXJsKQpAQCAtNDgxLDggKzQ3OCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUUKICAgICBDdXJyZW50RXZlbnQgY3VycmVudEV2ZW50KG1vdXNlRXZlbnQpOwog
CiAgICAgYm9vbCBoYW5kbGVkID0gaGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50LCBtX3BhZ2Uu
Z2V0KCkpOwotCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVFdmVudCwgbV9wYWdlSUQsIENvcmVJUEM6Oklu
KHN0YXRpY19jYXN0PHVpbnQzMl90Pihtb3VzZUV2ZW50LnR5cGUoKSksIGhhbmRsZWQpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pihtb3VzZUV2ZW50
LnR5cGUoKSksIGhhbmRsZWQpLCBtX3BhZ2VJRCk7CiB9CiAKIHN0YXRpYyBib29sIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUGFnZSogcGFnZSkKQEAg
LTUwMCw3ICs0OTYsNyBAQCB2b2lkIFdlYlBhZ2U6OndoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxF
CiAgICAgQ3VycmVudEV2ZW50IGN1cnJlbnRFdmVudCh3aGVlbEV2ZW50KTsKIAogICAgIGJvb2wg
aGFuZGxlZCA9IGhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCwgbV9wYWdlLmdldCgpKTsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkUmVjZWl2ZUV2ZW50LCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHdoZWVsRXZlbnQudHlwZSgpKSwgaGFuZGxlZCkpOworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRS
ZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdoZWVsRXZlbnQudHlwZSgpKSwgaGFu
ZGxlZCksIG1fcGFnZUlEKTsKIH0KIAogc3RhdGljIGJvb2wgaGFuZGxlS2V5RXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCwgUGFnZSogcGFnZSkKQEAgLTUxOSwyMSAr
NTE1LDIxIEBAIHZvaWQgV2ViUGFnZTo6a2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmQKICAgICBp
ZiAoIWhhbmRsZWQpCiAgICAgICAgIGhhbmRsZWQgPSBwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9y
S2V5RXZlbnQoa2V5Ym9hcmRFdmVudCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZUV2ZW50LCBtX3Bh
Z2VJRCwgQ29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtleWJvYXJkRXZlbnQudHlw
ZSgpKSwgaGFuZGxlZCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGtleWJvYXJkRXZlbnQudHlwZSgpKSwgaGFuZGxlZCksIG1fcGFnZUlEKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjp2YWxpZGF0ZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpCiB7CiAgICAgYm9vbCBpc0VuYWJsZWQgPSBmYWxzZTsKLSAgICBpbnQgc3RhdGUgPSAwOwor
ICAgIGludDMyX3Qgc3RhdGUgPSAwOwogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChmcmFtZSkgewogICAg
ICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChj
b21tYW5kTmFtZSk7CiAgICAgICAgIHN0YXRlID0gY29tbWFuZC5zdGF0ZSgpOwogICAgICAgICBp
c0VuYWJsZWQgPSBjb21tYW5kLmlzU3VwcG9ydGVkKCkgJiYgY29tbWFuZC5pc0VuYWJsZWQoKTsK
ICAgICB9Ci0gICAgCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
KFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFZhbGlkYXRlTWVudUl0ZW0sIG1fcGFnZUlELCBDb3Jl
SVBDOjpJbihjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSkpOworCisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFZhbGlkYXRlTWVudUl0ZW0oY29tbWFuZE5hbWUsIGlzRW5hYmxlZCwgc3RhdGUpLCBtX3BhZ2VJ
RCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpCkBAIC01NTcsNyArNTUzLDcgQEAgdm9pZCBXZWJQYWdlOjp0b3VjaEV2ZW50
KGNvbnN0IFdlYlRvdWNoRQogCiAgICAgYm9vbCBoYW5kbGVkID0gaGFuZGxlVG91Y2hFdmVudCh0
b3VjaEV2ZW50LCBtX3BhZ2UuZ2V0KCkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVFdmVudCwgbV9w
YWdlSUQsIENvcmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b3VjaEV2ZW50LnR5cGUo
KSksIGhhbmRsZWQpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVp
bnQzMl90Pih0b3VjaEV2ZW50LnR5cGUoKSksIGhhbmRsZWQpLCBtX3BhZ2VJRCk7CiB9CiAjZW5k
aWYKIApAQCAtNjEyLDcgKzYwOCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURl
Y2lzaW9uKHUKIAogdm9pZCBXZWJQYWdlOjpzaG93KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6U2hvd1BhZ2UsIG1f
cGFnZUlELCBDb3JlSVBDOjpJbigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd1BhZ2UoKSwgbV9wYWdlSUQp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGN1
c3RvbVVzZXJBZ2VudCkKQEAgLTY1MywxMyArNjQ5LDEzIEBAIHZvaWQgV2ViUGFnZTo6cnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJh
bWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpz
VmFsdWUoKTsKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3Vs
dFZhbHVlLnRvU3RyaW5nKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSkpOwogCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKHJl
c3VsdFN0cmluZywgY2FsbGJhY2tJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSdW5KYXZhU2NyaXB0SW5N
YWluRnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lk
IFdlYlBhZ2U6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiB7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHJlbmRlclRyZWVFeHRlcm5h
bFJlcHJlc2VudGF0aW9uKCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJl
c2VudGF0aW9uLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lE
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHJl
c3VsdFN0cmluZywgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpn
ZXRTb3VyY2VGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQpA
QCAtNjY3LDcgKzY2Myw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0U291cmNlRm9yRnJhbWUodWludDY0
X3QKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwogICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKSkKICAgICAgICByZXN1bHRTdHJp
bmcgPSBmcmFtZS0+c291cmNlKCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlv
bigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEdldFNvdXJjZUZvckZyYW1lLCBtX3Bh
Z2VJRCwgQ29yZUlQQzo6SW4ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSk7CisKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkR2V0U291cmNlRm9yRnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSwgbV9wYWdl
SUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQpJbmRleDogV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9uIDY5MTE5
KQorKysgV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw2
ICs0NDksMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cU2hhcmVkXFN0cmluZ1BhaXJWZWN0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxVc2VyTWVzc2FnZUNvZGVy
cy5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTc2NCwxMCArNzY4LDYgQEAKIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxD
b3JlSVBDU3VwcG9ydFxXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCINCi0JCQkJCT4NCi0JCQkJ
PC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcQ29yZUlQ
Q1N1cHBvcnRcV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmgiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCkBAIC0yMDI5LDYgKzIwMjksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRP
dXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70114</attachid>
            <date>2010-10-07 10:35:21 -0700</date>
            <delta_ts>2010-10-07 10:51:37 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>gen2.diff</filename>
            <type>text/plain</type>
            <size>126346</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTAtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0
ZSB0aGUgbWVzc2FnZXMgc2VudCB0byB0aGUgV2ViUGFnZVByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzOQorCisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcm86CisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudHMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBD
L0hhbmRsZU1lc3NhZ2UuaDoKKyAgICAgICAgKENvcmVJUEM6OmhhbmRsZU1lc3NhZ2UpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlZ2lz
dGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6
CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUNsaWVudDo6
d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiB3aW4vV2Vi
S2l0Mi52Y3Byb2o6CisKIDIwMTAtMTAtMDcgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5p
QG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCkluZGV4OiBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktp
dDIvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAgVlBB
VEggPSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1BsdWdpbnMgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MgXAorICAg
ICQoV2ViS2l0MikvVUlQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9QbHVnaW5z
IFwKICMKIApAQCAtMTIsNiArMTMsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVn
aW5Qcm9jZXNzUHJveHkgXAogICAgIFBsdWdpblByb3h5IFwKICAgICBXZWJQYWdlIFwKKyAgICBX
ZWJQYWdlUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25uZWN0aW9u
IFwKICMKSW5kZXg6IFdlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvRGVy
aXZlZFNvdXJjZXMucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxOCBAQCBtZXNzYWdl
cmVjZWl2ZXJfZ2VuZXJhdG9yLnRhcmdldCAgID0gJCR7CiBnZW5lcmF0ZWRfZmlsZXMuZGVwZW5k
cyAgICAgICAgICAgICs9IG1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IKIFFNQUtFX0VYVFJBX1RB
UkdFVFMgICAgICAgICAgICAgICAgKz0gbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvcgogCitwYWdl
cHJveHltZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5jb21tYW5kcyA9IHB5dGhvbiAkJHtTUkNfUk9P
VF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIucHkgICQke1NS
Q19ST09UX0RJUn0vV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluID4g
JCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VzLmgKK3Bh
Z2Vwcm94eW1lc3NhZ2VoZWFkZXJfZ2VuZXJhdG9yLmRlcGVuZHMgID0gJCR7U1JDX1JPT1RfRElS
fS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZXMtaGVhZGVyLnB5ICQke1NSQ19ST09U
X0RJUn0vVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KK3Bh
Z2Vwcm94eW1lc3NhZ2VoZWFkZXJfZ2VuZXJhdG9yLnRhcmdldCAgID0gJCR7T1VUUFVUX0RJUn0v
V2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUGFnZVByb3h5TWVzc2FnZXMuaAorZ2VuZXJhdGVkX2ZpbGVz
LmRlcGVuZHMgICAgICAgICAgICAgICAgICs9IHBhZ2Vwcm94eW1lc3NhZ2VoZWFkZXJfZ2VuZXJh
dG9yCitRTUFLRV9FWFRSQV9UQVJHRVRTICAgICAgICAgICAgICAgICAgICAgKz0gcGFnZXByb3h5
bWVzc2FnZWhlYWRlcl9nZW5lcmF0b3IKKworcGFnZXByb3h5bWVzc2FnZXJlY2VpdmVyX2dlbmVy
YXRvci5jb21tYW5kcyA9IHB5dGhvbiAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9n
ZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5ICAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiA+ICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dl
bmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitwYWdlcHJveHltZXNzYWdl
cmVjZWl2ZXJfZ2VuZXJhdG9yLmRlcGVuZHMgID0gJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1Nj
cmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weSAkJHtTUkNfUk9PVF9ESVJ9L1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorcGFnZXByb3h5bWVzc2FnZXJl
Y2VpdmVyX2dlbmVyYXRvci50YXJnZXQgICA9ICQke09VVFBVVF9ESVJ9L1dlYktpdDIvZ2VuZXJh
dGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK2dlbmVyYXRlZF9maWxlcy5kZXBl
bmRzICAgICAgICAgICAgICAgICAgICs9IHBhZ2Vwcm94eW1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0
b3IKK1FNQUtFX0VYVFJBX1RBUkdFVFMgICAgICAgICAgICAgICAgICAgICAgICs9IHBhZ2Vwcm94
eW1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IKKwogcHJvY2Vzc21lc3NhZ2VoZWFkZXJfZ2VuZXJh
dG9yLmNvbW1hbmRzID0gcHl0aG9uICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9TY3JpcHRzL2dl
bmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weSAgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiA+ICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVy
YXRlZC9XZWJQcm9jZXNzTWVzc2FnZXMuaAogcHJvY2Vzc21lc3NhZ2VoZWFkZXJfZ2VuZXJhdG9y
LmRlcGVuZHMgID0gJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVz
c2FnZXMtaGVhZGVyLnB5ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KIHByb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVyYXRvci50YXJnZXQg
ICA9ICQke09VVFBVVF9ESVJ9L1dlYktpdDIvZ2VuZXJhdGVkL1dlYlByb2Nlc3NNZXNzYWdlcy5o
CkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0
Mi5wcm8JKHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDEwICsxNDIsMTIgQEAgREVGSU5FUyArPSBCVUlMRElOR19RVF9fCiAKIFdF
QktJVDJfR0VORVJBVEVEX0hFQURFUlMgPSBcCiAgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2Vu
ZXJhdGVkL1dlYlBhZ2VNZXNzYWdlcy5oIFwKKyAgICAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5l
cmF0ZWQvV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBcCiAgICAgJCRPVVRQVVRfRElSL1dlYktpdDIv
Z2VuZXJhdGVkL1dlYlByb2Nlc3NNZXNzYWdlcy5oCiAKIFdFQktJVDJfR0VORVJBVEVEX1NPVVJD
RVMgPSBcCiAgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VNZXNzYWdl
UmVjZWl2ZXIuY3BwIFwKKyAgICAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUGFn
ZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2Vu
ZXJhdGVkL1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiAKIEhFQURFUlMgKz0gXApAQCAt
MTc3LDcgKzE3OSw2IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9BUEkvYy9XS1VSTFJlc3Bv
bnNlLmggXAogICAgIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5k
cy5oIFwKICAgICBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VL
aW5kcy5oIFwKLSAgICBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtp
bmRzLmggXAogICAgIFNoYXJlZC9DYWNoZU1vZGVsLmggXAogICAgIFNoYXJlZC9EcmF3aW5nQXJl
YUJhc2UuaCBcCiAgICAgU2hhcmVkL0ltbXV0YWJsZUFycmF5LmggXApAQCAtMTg2LDYgKzE4Nyw3
IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5oIFwKICAgICBT
aGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1wbGVtZW50
ZWQuaCBcCisgICAgU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaCBcCiAgICAgU2hhcmVkL3F0L01h
cHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBc
CiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0hhbmRsZU1lc3NhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvSGFuZGxlTWVzc2FnZS5oCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9IYW5kbGVNZXNzYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw4IEBA
CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAorLy8gRGlzcGF0Y2ggZnVuY3Rpb25zIHdpdGggbm8g
cmVwbHkgYXJndW1lbnRzLgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KIHZv
aWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czAmLCBDKiBvYmplY3QsIE1GIGZ1
bmN0aW9uKQogewpAQCAtNTEsNiArNTMsMjAgQEAgdm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29u
c3QgQXJndW1lbnRzNwogICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFy
Z3MuYXJndW1lbnQyLCBhcmdzLmFyZ3VtZW50MywgYXJncy5hcmd1bWVudDQsIGFyZ3MuYXJndW1l
bnQ1LCBhcmdzLmFyZ3VtZW50NiwgYXJncy5hcmd1bWVudDcpOwogfQogCisvLyBEaXNwYXRjaCBm
dW5jdGlvbnMgd2l0aCByZXBseSBhcmd1bWVudHMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5
cGVuYW1lIE1GLCB0eXBlbmFtZSBSMT4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFy
Z3VtZW50czAmLCBBcmd1bWVudHMxPFIxPiYgcmVwbHlBcmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0
aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbikocmVwbHlBcmdzLmFyZ3VtZW50MSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBSMSwgdHlwZW5h
bWUgUjI+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMwJiwgQXJndW1l
bnRzMjxSMSwgUjI+JiByZXBseUFyZ3MsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCit7CisgICAg
KG9iamVjdC0+KmZ1bmN0aW9uKShyZXBseUFyZ3MuYXJndW1lbnQxLCByZXBseUFyZ3MuYXJndW1l
bnQyKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAx
Pgogdm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzMTxQMT4mIGFyZ3MsIEFy
Z3VtZW50czAmLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQogewpAQCAtNjMsMTYgKzc5LDgxIEBA
IHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czEKICAgICAob2JqZWN0LT4q
ZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCByZXBseUFyZ3MuYXJndW1lbnQxKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMj4K
K3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czI8UDEsIFAyPiYgYXJncywg
QXJndW1lbnRzMCYsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCit7CisgICAgKG9iamVjdC0+KmZ1
bmN0aW9uKShhcmdzLmFyZ3VtZW50MSwgYXJncy5hcmd1bWVudDIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBSMT4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czI8UDEsIFAyPiYg
YXJncywgQXJndW1lbnRzMTxSMT4mIHJlcGx5QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikK
K3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50
MiwgcmVwbHlBcmdzLmFyZ3VtZW50MSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBS
MT4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czM8UDEsIFAyLCBQMz4m
IGFyZ3MsIEFyZ3VtZW50czE8UjE+JiByZXBseUFyZ3MsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24p
Cit7CisgICAgKG9iamVjdC0+KmZ1bmN0aW9uKShhcmdzLmFyZ3VtZW50MSwgYXJncy5hcmd1bWVu
dDIsIGFyZ3MuYXJndW1lbnQzLCByZXBseUFyZ3MuYXJndW1lbnQxKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5h
bWUgUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBSMT4KIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9u
KGNvbnN0IEFyZ3VtZW50czQ8UDEsIFAyLCBQMywgUDQ+JiBhcmdzLCBBcmd1bWVudHMxPFIxPiYg
cmVwbHlBcmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQogewogICAgIChvYmplY3QtPipmdW5j
dGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBhcmdzLmFyZ3VtZW50MywgYXJn
cy5hcmd1bWVudDQsIHJlcGx5QXJncy5hcmd1bWVudDEpOwogfQogCisvLyBWYXJpYWRpYyBkaXNw
YXRjaCBmdW5jdGlvbnMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GPgordm9p
ZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzMCYsIEFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3Qt
PipmdW5jdGlvbikoYXJndW1lbnREZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQywg
dHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxPgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3Qg
QXJndW1lbnRzMTxQMT4mIGFyZ3MsIEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBD
KiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5h
cmd1bWVudDEsIGFyZ3VtZW50RGVjb2Rlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5
cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDI+Cit2b2lkIGNhbGxNZW1iZXJGdW5j
dGlvbihjb25zdCBBcmd1bWVudHMyPFAxLCBQMj4mIGFyZ3MsIEFyZ3VtZW50RGVjb2RlciogYXJn
dW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipm
dW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBhcmd1bWVudERlY29kZXIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBQMz4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFy
Z3VtZW50czM8UDEsIFAyLCBQMz4mIGFyZ3MsIEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNv
ZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbiko
YXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBhcmdzLmFyZ3VtZW50MywgYXJndW1lbnRE
ZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0Pgordm9pZCBjYWxsTWVt
YmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzNDxQMSwgUDIsIFAzLCBQND4mIGFyZ3MsIEFyZ3Vt
ZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQorewor
ICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBh
cmdzLmFyZ3VtZW50MywgYXJncy5hcmd1bWVudDQsIGFyZ3VtZW50RGVjb2Rlcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDU+Cit2b2lkIGNhbGxNZW1iZXJG
dW5jdGlvbihjb25zdCBBcmd1bWVudHM1PFAxLCBQMiwgUDMsIFA0LCBQNT4mIGFyZ3MsIEFyZ3Vt
ZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQorewor
ICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBh
cmdzLmFyZ3VtZW50MywgYXJncy5hcmd1bWVudDQsIGFyZ3MuYXJndW1lbnQ1LCBhcmd1bWVudERl
Y29kZXIpOworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBQ
NSwgdHlwZW5hbWUgUDY+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHM2
PFAxLCBQMiwgUDMsIFA0LCBQNSwgUDY+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50
RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rp
b24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3Mu
YXJndW1lbnQ0LCBhcmdzLmFyZ3VtZW50NSwgYXJncy5hcmd1bWVudDYsIGFyZ3VtZW50RGVjb2Rl
cik7Cit9CisKKworLy8gTWFpbiBkaXNwYXRjaCBmdW5jdGlvbnMKKwogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CiB2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudERlY29kZXIsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCiB7Ci0g
ICAgdHlwZW5hbWUgVDo6VmFsdWVUeXBlIGFyZ3VtZW50czsKKyAgICB0eXBlbmFtZSBUOjpEZWNv
ZGVUeXBlOjpWYWx1ZVR5cGUgYXJndW1lbnRzOwogICAgIGlmICghYXJndW1lbnREZWNvZGVyLT5k
ZWNvZGUoYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNhbGxNZW1iZXJGdW5jdGlv
bihhcmd1bWVudHMsIG9iamVjdCwgZnVuY3Rpb24pOwpAQCAtODEsNyArMTYyLDcgQEAgdm9pZCBo
YW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndQogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CiB2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudERlY29kZXIsIEFyZ3VtZW50RW5jb2RlciogcmVwbHlFbmNvZGVyLCBDKiBv
YmplY3QsIE1GIGZ1bmN0aW9uKQogewotICAgIHR5cGVuYW1lIFQ6OlZhbHVlVHlwZSBhcmd1bWVu
dHM7CisgICAgdHlwZW5hbWUgVDo6RGVjb2RlVHlwZTo6VmFsdWVUeXBlIGFyZ3VtZW50czsKICAg
ICBpZiAoIWFyZ3VtZW50RGVjb2Rlci0+ZGVjb2RlKGFyZ3VtZW50cykpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtOTAsNiArMTcxLDE1IEBAIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1bWVudERlY29k
ZXIqIGFyZ3UKICAgICByZXBseUVuY29kZXItPmVuY29kZShyZXBseUFyZ3VtZW50cyk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GPgordm9pZCBoYW5k
bGVNZXNzYWdlVmFyaWFkaWMoQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29kZXIsIEMqIG9i
amVjdCwgTUYgZnVuY3Rpb24pCit7CisgICAgdHlwZW5hbWUgVDo6RGVjb2RlVHlwZTo6VmFsdWVU
eXBlIGFyZ3VtZW50czsKKyAgICBpZiAoIWFyZ3VtZW50RGVjb2Rlci0+ZGVjb2RlKGFyZ3VtZW50
cykpCisgICAgICAgIHJldHVybjsKKyAgICBjYWxsTWVtYmVyRnVuY3Rpb24oYXJndW1lbnRzLCBh
cmd1bWVudERlY29kZXIsIG9iamVjdCwgZnVuY3Rpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBD
b3JlSVBDCiAKICNlbmRpZiAvLyBIYW5kbGVNZXNzYWdlX2gKSW5kZXg6IFdlYktpdDIvU2NyaXB0
cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzLnB5CShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw5IEBAIGNsYXNzIE1l
c3NhZ2VSZWNlaXZlcihvYmplY3QpOgogICAgIGRlZiBpdGVycGFyYW1ldGVycyhzZWxmKToKICAg
ICAgICAgcmV0dXJuIChwYXJhbWV0ZXIgZm9yIG1lc3NhZ2UgaW4gc2VsZi5tZXNzYWdlcyBmb3Ig
cGFyYW1ldGVyIGluIG1lc3NhZ2UucGFyYW1ldGVycykKIAorICAgIGRlZiBpdGVycmVwbHlwYXJh
bWV0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHJlcGx5X3BhcmFtZXRlciBmb3IgbWVzc2Fn
ZSBpbiBzZWxmLm1lc3NhZ2VzIGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5yZXBseV9w
YXJhbWV0ZXJzKQorCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHBhcnNlKGNscywgZmlsZSk6
CiAgICAgICAgIGRlc3RpbmF0aW9uID0gTm9uZQpAQCAtMTA3LDYgKzExMCwxMCBAQCBjbGFzcyBN
ZXNzYWdlKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYucmVwbHlfcGFyYW1ldGVycyBpcyBub3Qg
Tm9uZToKICAgICAgICAgICAgIHNlbGYuZGVsYXllZCA9IGRlbGF5ZWQKICAgICAgICAgc2VsZi5j
b25kaXRpb24gPSBjb25kaXRpb24KKyAgICAgICAgaWYgbGVuKHNlbGYucGFyYW1ldGVycykgIT0g
MDoKKyAgICAgICAgICAgIHNlbGYuaXNfdmFyaWFkaWMgPSBwYXJhbWV0ZXJfdHlwZV9pc192YXJp
YWRpYyhzZWxmLnBhcmFtZXRlcnNbLTFdLnR5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLmlzX3ZhcmlhZGljID0gRmFsc2UKIAogICAgIGRlZiBpZChzZWxmKToKICAgICAgICAg
cmV0dXJuICclc0lEJyAlIHNlbGYubmFtZQpAQCAtMTQwLDYgKzE0NywxMyBAQCBkZWYgbWVzc2Fn
ZXNfdG9fa2luZF9lbnVtKG1lc3NhZ2VzKToKICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCiAK
IAorZGVmIHBhcmFtZXRlcl90eXBlX2lzX3ZhcmlhZGljKHR5cGUpOgorICAgIHZhcmlhZGljX3R5
cGVzID0gZnJvemVuc2V0KFsKKyAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZUVuY29kZXInLAorICAgIF0pCisKKyAgICByZXR1cm4gdHlwZSBpbiB2YXJpYWRpY190eXBl
cworCiBkZWYgZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUodHlwZSk6CiAgICAgIyBEb24ndCB1c2Ug
cmVmZXJlbmNlcyBmb3IgYnVpbHQtaW4gdHlwZXMuCiAgICAgYnVpbHRpbl90eXBlcyA9IGZyb3pl
bnNldChbCkBAIC0xNTAsNiArMTY0LDEwIEBAIGRlZiBmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSh0
eXBlKToKICAgICAgICAgJ3VpbnQxNl90JywKICAgICAgICAgJ3VpbnQzMl90JywKICAgICAgICAg
J3VpbnQ2NF90JywKKyAgICAgICAgJ2ludDhfdCcsCisgICAgICAgICdpbnQxNl90JywKKyAgICAg
ICAgJ2ludDMyX3QnLAorICAgICAgICAnaW50NjRfdCcsCiAgICAgXSkKIAogICAgIGlmIHR5cGUg
aW4gYnVpbHRpbl90eXBlczoKQEAgLTE3MiwxMCArMTkwLDEzIEBAIGRlZiBhcmd1bWVudHNfdHlw
ZShwYXJhbWV0ZXJzLCBwYXJhbWV0ZXIKIGRlZiBiYXNlX2NsYXNzKG1lc3NhZ2UpOgogICAgIHJl
dHVybiBhcmd1bWVudHNfdHlwZShtZXNzYWdlLnBhcmFtZXRlcnMsIGZ1bmN0aW9uX3BhcmFtZXRl
cl90eXBlKQogCi0KIGRlZiByZXBseV90eXBlKG1lc3NhZ2UpOgogICAgIHJldHVybiBhcmd1bWVu
dHNfdHlwZShtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMsIHJlcGx5X3BhcmFtZXRlcl90eXBlKQog
CitkZWYgZGVjb2RlX3R5cGUobWVzc2FnZSk6CisgICAgaWYgbWVzc2FnZS5pc192YXJpYWRpYzoK
KyAgICAgICAgcmV0dXJuIGFyZ3VtZW50c190eXBlKG1lc3NhZ2UucGFyYW1ldGVyc1s6LTFdLCBy
ZXBseV9wYXJhbWV0ZXJfdHlwZSkKKyAgICByZXR1cm4gYmFzZV9jbGFzcyhtZXNzYWdlKQogCiBk
ZWYgZGVsYXllZF9yZXBseV90eXBlKG1lc3NhZ2UpOgogICAgIHJldHVybiBhcmd1bWVudHNfdHlw
ZShtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMsIGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKQpAQCAt
MTg5LDYgKzIxMCw4IEBAIGRlZiBtZXNzYWdlX3RvX3N0cnVjdF9kZWNsYXJhdGlvbihtZXNzYWcK
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0IEtpbmQgbWVzc2FnZUlEID0gJXM7
XG4nICUgbWVzc2FnZS5pZCgpKQogICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBO
b25lOgogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgdHlwZWRlZiAlcyBSZXBseTtcbicgJSBy
ZXBseV90eXBlKG1lc3NhZ2UpKQorCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIHR5cGVkZWYgJXMg
RGVjb2RlVHlwZTtcbicgJSBkZWNvZGVfdHlwZShtZXNzYWdlKSkKICAgICBpZiBsZW4oZnVuY3Rp
b25fcGFyYW1ldGVycyk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlcyVzKCVzKScgJSAo
bGVuKGZ1bmN0aW9uX3BhcmFtZXRlcnMpID09IDEgYW5kICdleHBsaWNpdCAnIG9yICcnLCBtZXNz
YWdlLm5hbWUsICcsICcuam9pbihbJyAnLmpvaW4oeCkgZm9yIHggaW4gZnVuY3Rpb25fcGFyYW1l
dGVyc10pKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4gICAgICAgIDogJXMoJXMpXG4nICUg
KGJhc2VfY2xhc3MobWVzc2FnZSksICcsICcuam9pbihbeFsxXSBmb3IgeCBpbiBmdW5jdGlvbl9w
YXJhbWV0ZXJzXSkpKQpAQCAtMjk5LDkgKzMyMiwxMyBAQCBkZWYgaGFuZGxlcl9mdW5jdGlvbihy
ZWNlaXZlciwgbWVzc2FnZSk6CiAKIAogZGVmIGFzeW5jX2Nhc2Vfc3RhdGVtZW50KHJlY2VpdmVy
LCBtZXNzYWdlKToKKyAgICBkaXNwYXRjaF9mdW5jdGlvbiA9ICdoYW5kbGVNZXNzYWdlJzsKKyAg
ICBpZiBtZXNzYWdlLmlzX3ZhcmlhZGljOgorICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbiArPSAn
VmFyaWFkaWMnCisKICAgICByZXN1bHQgPSBbXQogICAgIHJlc3VsdC5hcHBlbmQoJyAgICBjYXNl
IE1lc3NhZ2VzOjolczo6JXM6XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UuaWQoKSkpCi0g
ICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBDb3JlSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
Ojolczo6JXM+KGFyZ3VtZW50cywgdGhpcywgJiVzKTtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVz
c2FnZS5uYW1lLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKSkpCisgICAgcmVz
dWx0LmFwcGVuZCgnICAgICAgICBDb3JlSVBDOjolczxNZXNzYWdlczo6JXM6OiVzPihhcmd1bWVu
dHMsIHRoaXMsICYlcyk7XG4nICUgKGRpc3BhdGNoX2Z1bmN0aW9uLCByZWNlaXZlci5uYW1lLCBt
ZXNzYWdlLm5hbWUsIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpKSkKICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgcmV0dXJuIHN1cnJvdW5kX2lu
X2NvbmRpdGlvbignJy5qb2luKHJlc3VsdCksIG1lc3NhZ2UuY29uZGl0aW9uKQogCkBAIC0zMjQs
NiArMzUxLDcgQEAgZGVmIGFyZ3VtZW50X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZQogCiAg
ICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3RyaW5nJzogJyJBcmd1bWVudENv
ZGVycy5oIicsCisgICAgICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyJzogJyJJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiJywKICAgICB9CiAKICAg
ICBpZiB0eXBlIGluIHNwZWNpYWxfY2FzZXM6CkBAIC0zODMsNiArNDExLDE4IEBAIGRlZiBnZW5l
cmF0ZV9tZXNzYWdlX2hhbmRsZXIoZmlsZSk6CiAgICAgICAgIHR5cGVfaGVhZGVycyA9IGhlYWRl
cnNfZm9yX3R5cGUodHlwZSkKICAgICAgICAgaGVhZGVycy51cGRhdGUodHlwZV9oZWFkZXJzKQog
CisgICAgZm9yIG1lc3NhZ2UgaW4gcmVjZWl2ZXIubWVzc2FnZXM6CisgICAgICAgIGlmIG1lc3Nh
Z2UucmVwbHlfcGFyYW1ldGVycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciByZXBseV9w
YXJhbWV0ZXIgaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIHR5
cGUgPSByZXBseV9wYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50X2VuY29k
ZXJfaGVhZGVycyA9IGFyZ3VtZW50X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUodHlwZSkKKyAgICAg
ICAgICAgICAgICBpZiBhcmd1bWVudF9lbmNvZGVyX2hlYWRlcnM6CisgICAgICAgICAgICAgICAg
ICAgIGhlYWRlcnMudXBkYXRlKGFyZ3VtZW50X2VuY29kZXJfaGVhZGVycykKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHR5cGVfaGVhZGVycyA9IGhlYWRl
cnNfZm9yX3R5cGUodHlwZSkKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZSh0eXBlX2hl
YWRlcnMpCisKICAgICByZXN1bHQgPSBbXQogCiAgICAgcmVzdWx0LmFwcGVuZChfbGljZW5zZV9o
ZWFkZXIpCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9TaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdHJpbmdQYWlyVmVjdG9yX2gKKyNkZWZpbmUg
U3RyaW5nUGFpclZlY3Rvcl9oCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgY2xhc3MgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5k
IHRoZSBmYWN0IHRoYXQgdGhlIElQQyBtZXNzYWdlIGdlbmVyYXRvcgorLy8gY2Fubm90IGRlYWwg
d2l0aCBjbGFzcyB0ZW1wbGF0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmFtdGVyLgorY2xhc3Mg
U3RyaW5nUGFpclZlY3RvciB7CitwdWJsaWM6CisgICAgU3RyaW5nUGFpclZlY3RvcigpCisgICAg
eworICAgIH0KKworICAgIFN0cmluZ1BhaXJWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4gPiBzdHJpbmdQYWlyVmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdQYWly
VmVjdG9yLnN3YXAoc3RyaW5nUGFpclZlY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKG1fc3RyaW5nUGFpclZlY3Rvcik7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU3RyaW5nUGFp
clZlY3RvciYgc3RyaW5nUGFpclZlY3RvcikKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVy
LT5kZWNvZGUoc3RyaW5nUGFpclZlY3Rvci5tX3N0cmluZ1BhaXJWZWN0b3IpOworICAgIH0KKwor
ICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHN0cmluZ1BhaXJW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1BhaXJWZWN0b3I7IH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+IG1fc3RyaW5nUGFpclZlY3Rv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU3RyaW5nUGFpclZl
Y3Rvcl9oCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlN
ZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9y
dC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQy
L1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViUGFnZVBy
b3h5TWVzc2FnZUtpbmRzX2gKLSNkZWZpbmUgV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKLQot
I2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotCi0vLyBNZXNzYWdlcyBzZW50IGZyb20gdGhlIHdlYiBw
cm9jZXNzIHRvIHRoZSBXZWJQYWdlUHJveHkuCi0KLW5hbWVzcGFjZSBXZWJQYWdlUHJveHlNZXNz
YWdlIHsKLQotZW51bSBLaW5kIHsKLSAgICBDcmVhdGVOZXdQYWdlLAotICAgIFNob3dQYWdlLAot
ICAgIFJ1bkphdmFTY3JpcHRBbGVydCwKLSAgICBSdW5KYXZhU2NyaXB0Q29uZmlybSwKLSAgICBS
dW5KYXZhU2NyaXB0UHJvbXB0LAotCi0gICAgQ2xvc2VQYWdlLAotICAgIENvbnRlbnRzU2l6ZUNo
YW5nZWQsCi0gICAgRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUsCi0gICAgRGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbiwKLSAgICBEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24sCi0g
ICAgRGlkQ2hhbmdlUHJvZ3Jlc3MsCi0gICAgRGlkQ29tbWl0TG9hZEZvckZyYW1lLAotICAgIERp
ZENyZWF0ZU1haW5GcmFtZSwKLSAgICBEaWRDcmVhdGVTdWJGcmFtZSwKLSAgICBEaWRGYWlsTG9h
ZEZvckZyYW1lLAotICAgIERpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKLSAgICBEaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSwKLSAgICBEaWRGaW5pc2hMb2FkRm9yRnJhbWUsCi0g
ICAgRGlkRmluaXNoUHJvZ3Jlc3MsCi0gICAgRGlkRmlyc3RMYXlvdXRGb3JGcmFtZSwKLSAgICBE
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSwKLSAgICBEaWRHZXRSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbiwKLSAgICBEaWRHZXRTb3VyY2VGb3JGcmFtZSwKLSAg
ICBEaWRSZWNlaXZlRXZlbnQsCi0gICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUsCi0gICAgRGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUsCi0gICAgRGlk
UmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5LAotICAgIERpZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFt
ZSwKLSAgICBEaWRTZXRGcmFtZSwKLSAgICBEaWRTdGFydFByb2dyZXNzLAotICAgIERpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCi0gICAgRGlkVmFsaWRhdGVNZW51SXRlbSwKLSAgICBN
b3VzZURpZE1vdmVPdmVyRWxlbWVudCwKLSAgICBTZXRDdXJzb3IsCi0gICAgU2V0U3RhdHVzVGV4
dCwKLSAgICBTZXRUb29sVGlwLAotICAgIFRha2VGb2N1cywKLSAgICBXaWxsU3VibWl0Rm9ybSwK
LQotICAgIEJhY2tGb3J3YXJkQWRkSXRlbSwKLSAgICBCYWNrRm9yd2FyZEdvVG9JdGVtLAotICAg
IEJhY2tGb3J3YXJkQmFja0l0ZW0sCi0gICAgQmFja0ZvcndhcmRDdXJyZW50SXRlbSwKLSAgICBC
YWNrRm9yd2FyZEZvcndhcmRJdGVtLAotICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgsCi0gICAg
QmFja0ZvcndhcmRCYWNrTGlzdENvdW50LAotICAgIEJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3Vu
dCwKLQotICAgIFJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvLAotICAgIENsZWFyQWxsRWRpdENv
bW1hbmRzLAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIERpZENoYW5n
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsCi0jZW5kaWYKLX07Ci0KLX0KLQotbmFtZXNwYWNlIENv
cmVJUEMgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBNZXNzYWdlS2luZFRyYWl0czxXZWJQYWdlUHJv
eHlNZXNzYWdlOjpLaW5kPiB7IAotICAgIHN0YXRpYyBjb25zdCBNZXNzYWdlQ2xhc3MgbWVzc2Fn
ZUNsYXNzID0gTWVzc2FnZUNsYXNzV2ViUGFnZVByb3h5OwotfTsKLQotfQotCi0jZW5kaWYgLy8g
V2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJl
dmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFBhZ2VDbGllbnRfaAogI2RlZmluZSBQ
YWdlQ2xpZW50X2gKIAorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDggKzQ5LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSA9
IDA7CiAKLSAgICBlbnVtIFVuZG9PclJlZG8geyBVbmRvLCBSZWRvIH07Ci0gICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piwg
VW5kb09yUmVkbykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBh
c3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
LCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKSA9IDA7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9j
ZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw3IEBAIHZvaWQgV2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSgpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fcGFnZS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpV
bmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5kSUQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBt
X3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JSZWRvKHRoaXMpOworICAgIG1fcGFnZS0+cmVn
aXN0ZXJFZGl0Q29tbWFuZCh0aGlzLCBXZWJQYWdlUHJveHk6OlVuZG8pOwogfQogCiB2b2lkIFdl
YkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdlYkVk
aXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhZ2Ut
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVhcHBseUVkaXRDb21tYW5kKG1f
Y29tbWFuZElEKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5yZWdpc3RlckVkaXRD
b21tYW5kRm9yVW5kbyh0aGlzKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQodGhp
cywgV2ViUGFnZVByb3h5OjpSZWRvKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCB2b2lkIFdlYkZvcm1DbGllbnQ6OmluaXRpYWxpemUoY29uc3QgV0tQCiAgICAgICAg
IG1lbXNldCgmbV9wYWdlRm9ybUNsaWVudCwgMCwgc2l6ZW9mKG1fcGFnZUZvcm1DbGllbnQpKTsK
IH0KIAotYm9vbCBXZWJGb3JtQ2xpZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkqIHBh
Z2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFtZSwgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmpl
Y3QqIHVzZXJEYXRhLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQor
Ym9vbCBXZWJGb3JtQ2xpZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkqIHBhZ2UsIFdl
YkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFtZSwgY29uc3QgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmpl
Y3QqIHVzZXJEYXRhLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkqIGxpc3RlbmVyKQog
ewogICAgIGlmICghbV9wYWdlRm9ybUNsaWVudC53aWxsU3VibWl0Rm9ybSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuaAkocmV2aXNpb24gNjkz
MTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIFdlYkZvcm1DbGllbnQoKTsKICAgICB2b2lk
IGluaXRpYWxpemUoY29uc3QgV0tQYWdlRm9ybUNsaWVudCopOwogCi0gICAgYm9vbCB3aWxsU3Vi
bWl0Rm9ybShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2Jq
ZWN0KiB1c2VyRGF0YSwgV2ViRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5Kik7IAorICAgIGJv
b2wgd2lsbFN1Ym1pdEZvcm0oV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYkZyYW1l
UHJveHkqLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+JiB0ZXh0Rmll
bGRWYWx1ZXMsIEFQSU9iamVjdCogdXNlckRhdGEsIFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVuZXJQ
cm94eSopOyAKIAogcHJpdmF0ZToKICAgICBXS1BhZ2VGb3JtQ2xpZW50IG1fcGFnZUZvcm1DbGll
bnQ7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY5MzE3KQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
YktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiU3Ry
aW5nUGFpclZlY3Rvci5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1
ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUlu
Zm8uaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU5h
bWVzcGFjZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01hbmFnZXIuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU0MCwzNDkgKzU0MCw4IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHN3aXRjaCAobWVzc2FnZUlELmdldDxXZWJQYWdlUHJveHlNZXNzYWdlOjpLaW5k
PigpKSB7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ3JlYXRlTWFpbkZy
YW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYgKCFh
cmd1bWVudHMtPmRlY29kZShmcmFtZUlEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBkaWRDcmVhdGVNYWluRnJhbWUoZnJhbWVJRCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENyZWF0ZVN1
YkZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShmcmFtZUlEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBkaWRDcmVhdGVTdWJGcmFtZShmcmFtZUlEKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsK
LSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+
IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNz
YWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCB1cmws
IG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJh
bWVJRCksIHVybCwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3Qg
ZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVj
b2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkp
OwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFt
ZUlELCB1cmwsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JG
cmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1cmwsIHVzZXJEYXRhLmdldCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5
TWVzc2FnZTo6RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOiB7Ci0gICAgICAgICAgICB1
aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2Jq
ZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIg
bWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwg
bWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1l
SUQpLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENvbW1pdExvYWRGb3JGcmFtZTogewot
ICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyBtaW1lVHlw
ZTsKLSAgICAgICAgICAgIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbzsK
LQotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAgICAgICBX
ZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdl
TmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1pbWVUeXBlLCBjZXJ0aWZpY2F0ZUluZm8sIG1l
c3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgICAgICAg
ICAgZGlkQ29tbWl0TG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIG1p
bWVUeXBlLCBjZXJ0aWZpY2F0ZUluZm8sIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmlu
aXNoRG9jdW1lbnRMb2FkRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7
Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAg
V2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFn
ZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+
ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdl
OjpEaWRGaW5pc2hMb2FkRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7
Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAg
V2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFn
ZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+
ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmluaXNoTG9hZEZvckZyYW1lKHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmFp
bExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLQotICAgICAg
ICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAgICAgICBXZWJDb250ZXh0
VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNl
KCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29y
ZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICBkaWRGYWlsTG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJh
bWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZVRpdGxlRm9y
RnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJp
bmcgdGl0bGU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAg
ICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2Vy
RGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFy
Z3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCB0aXRsZSwgbWVzc2FnZURlY29k
ZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZFJlY2VpdmVU
aXRsZUZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHRpdGxlLCB1c2VyRGF0
YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWU6IHsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJE
YXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVj
b2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAg
ICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVj
b2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmlyc3RM
YXlvdXRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5nZXQo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lOiB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2Jq
ZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIg
bWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwg
bWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJh
bWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVtb3ZlRnJhbWVGcm9t
SGllcmFyY2h5OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAg
ICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2Vy
TWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+
Y29udGV4dCgpKTsKKyAgICBkaWRSZWNlaXZlV2ViUGFnZVByb3h5TWVzc2FnZShjb25uZWN0aW9u
LCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHko
cHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpE
aWRTdGFydFByb2dyZXNzOgotICAgICAgICAgICAgZGlkU3RhcnRQcm9ncmVzcygpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ2hhbmdl
UHJvZ3Jlc3M6IHsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGRpZENoYW5nZVByb2dyZXNzKHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoUHJvZ3Jl
c3M6Ci0gICAgICAgICAgICBkaWRGaW5pc2hQcm9ncmVzcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZUV2ZW50OiB7Ci0g
ICAgICAgICAgICB1aW50MzJfdCB0eXBlOwotICAgICAgICAgICAgYm9vbCBoYW5kbGVkOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQodHlwZSwgaGFuZGxl
ZCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVFdmVu
dCgoV2ViRXZlbnQ6OlR5cGUpdHlwZSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlRha2VGb2N1czogewot
ICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBlbnVtIGhlcmUuCi0gICAgICAgICAgICBib29sIGRp
cmVjdGlvbjsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZGlyZWN0aW9uKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0YWtlRm9jdXMoZGlyZWN0aW9u
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVBy
b3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjogewotICAgICAgICAg
ICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIHVpbnQzMl90IG5hdmlnYXRpb25UeXBl
OwotICAgICAgICAgICAgdWludDMyX3QgbW9kaWZpZXJzOwotICAgICAgICAgICAgaW50MzJfdCBt
b3VzZUJ1dHRvbjsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAgICAgICB1aW50NjRf
dCBsaXN0ZW5lcklEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBD
OjpPdXQoZnJhbWVJRCwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVy
bCwgbGlzdGVuZXJJRCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24ocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlE
KSwgc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG5hdmlnYXRpb25UeXBlKSwgc3RhdGljX2Nh
c3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKSwgc3RhdGljX2Nhc3Q8V2ViTW91c2VF
dmVudDo6QnV0dG9uPihtb3VzZUJ1dHRvbiksIHVybCwgbGlzdGVuZXJJRCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRl
Y2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbjogewotICAgICAgICAgICAgdWludDY0X3QgZnJh
bWVJRDsKLSAgICAgICAgICAgIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlOwotICAgICAgICAgICAg
dWludDMyX3QgbW9kaWZpZXJzOwotICAgICAgICAgICAgaW50MzJfdCBtb3VzZUJ1dHRvbjsKLSAg
ICAgICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwot
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwg
bmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJRCkp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbihwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBzdGF0aWNfY2FzdDxO
YXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9k
aWZpZXJzPihtb2RpZmllcnMpLCBzdGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KG1v
dXNlQnV0dG9uKSwgdXJsLCBsaXN0ZW5lcklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTUlN
RVR5cGU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJp
bmcgTUlNRVR5cGU7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgdWludDY0
X3QgbGlzdGVuZXJJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQ
Qzo6T3V0KGZyYW1lSUQsIE1JTUVUeXBlLCB1cmwsIGxpc3RlbmVySUQpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpLCBNSU1FVHlwZSwgdXJsLCBsaXN0ZW5lcklEKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6V2lsbFN1Ym1pdEZvcm06IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBzb3VyY2VGcmFtZUlEOwotICAgICAgICAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4gPiB0ZXh0RmllbGRWYWx1ZXM7Ci0gICAgICAgICAgICB1aW50
NjRfdCBsaXN0ZW5lcklEOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0
YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29k
ZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgc291cmNlRnJhbWVJ
RCwgdGV4dEZpZWxkVmFsdWVzLCBsaXN0ZW5lcklELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgd2lsbFN1Ym1pdEZvcm0ocHJvY2Vzcygp
LT53ZWJGcmFtZShmcmFtZUlEKSwgcHJvY2VzcygpLT53ZWJGcmFtZShzb3VyY2VGcmFtZUlEKSwg
dGV4dEZpZWxkVmFsdWVzLCB1c2VyRGF0YS5nZXQoKSwgbGlzdGVuZXJJRCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRp
ZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZTogewotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdFN0
cmluZzsKLSAgICAgICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQ7Ci0gICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRSdW5KYXZhU2NyaXB0
SW5NYWluRnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0UmVu
ZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb246IHsKLSAgICAgICAgICAgIFN0cmluZyByZXN1
bHRTdHJpbmc7Ci0gICAgICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQocmVzdWx0U3RyaW5nLCBjYWxsYmFj
a0lEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlkR2V0UmVuZGVy
VHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkR2V0U291cmNlRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIFN0cmluZyByZXN1bHRT
dHJpbmc7Ci0gICAgICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lE
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlkR2V0U291cmNlRm9y
RnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0VG9vbFRpcDogewot
ICAgICAgICAgICAgU3RyaW5nIHRvb2xUaXA7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+
ZGVjb2RlKHRvb2xUaXApKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHNl
dFRvb2xUaXAodG9vbFRpcCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNldEN1cnNvcjogewotI2lmIFVTRShMQVpZX05B
VElWRV9DVVJTT1IpCi0gICAgICAgICAgICBDdXJzb3IgY3Vyc29yOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShjdXJzb3IpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHNldEN1cnNvcihjdXJzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNob3dQYWdlOiB7
Ci0gICAgICAgICAgICBzaG93UGFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpDbG9zZVBhZ2U6IHsKLSAgICAgICAg
ICAgIGNsb3NlUGFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEFkZEl0ZW06IHsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IGl0ZW1JRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGl0ZW1JRCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGFkZEl0ZW1Ub0JhY2tGb3J3YXJkTGlzdChwcm9jZXNzKCktPndlYkJhY2tGb3J3YXJkSXRl
bShpdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
V2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRHb1RvSXRlbTogewotICAgICAgICAgICAg
dWludDY0X3QgaXRlbUlEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3Jl
SVBDOjpPdXQoaXRlbUlEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
Z29Ub0l0ZW1JbkJhY2tGb3J3YXJkTGlzdChwcm9jZXNzKCktPndlYkJhY2tGb3J3YXJkSXRlbShp
dGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6Q29udGVudHNTaXplQ2hhbmdlZDogewotICAgICAgICAgICAgSW50
U2l6ZSBzaXplOwotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIGlm
ICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIHNpemUpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250ZW50c1NpemVDaGFuZ2VkKHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRTdGF0dXNUZXh0OiB7
Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KHRleHQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBzZXRTdGF0dXNUZXh0KHRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpSZWdpc3RlckVkaXRDb21tYW5k
Rm9yVW5kbzogewotICAgICAgICAgICAgdWludDY0X3QgY29tbWFuZElEOwotICAgICAgICAgICAg
dWludDMyX3QgZWRpdEFjdGlvbjsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGNvbW1hbmRJRCwgZWRpdEFjdGlvbikpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZ2lzdGVyRWRpdENvbW1hbmRG
b3JVbmRvKGNvbW1hbmRJRCwgc3RhdGljX2Nhc3Q8RWRpdEFjdGlvbj4oZWRpdEFjdGlvbikpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlN
ZXNzYWdlOjpDbGVhckFsbEVkaXRDb21tYW5kczoKLSAgICAgICAgICAgIGNsZWFyQWxsRWRpdENv
bW1hbmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlN
ZXNzYWdlOjpEaWRWYWxpZGF0ZU1lbnVJdGVtOiB7Ci0gICAgICAgICAgICBpbnQgc3RhdGU7Ci0g
ICAgICAgICAgICBib29sIGlzRW5hYmxlZDsKLSAgICAgICAgICAgIFN0cmluZyBjb21tYW5kTmFt
ZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNvbW1h
bmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgbV9wYWdlQ2xpZW50LT5zZXRFZGl0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBp
c0VuYWJsZWQsIHN0YXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6IHsKLSAg
ICAgICAgICAgIHVpbnQzMl90IG1vZGlmaWVyczsKLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmpl
Y3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBt
ZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0g
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChtb2RpZmllcnMs
IG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJz
Pihtb2RpZmllcnMpLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVu
dHMsIENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogcmVwbHkpCkBAIC04OTIsMTA1ICs1NTEsOCBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKG1lc3NhZ2VJRC5nZXQ8V2ViUGFnZVByb3h5TWVzc2Fn
ZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNyZWF0ZU5l
d1BhZ2U6IHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG5ld1BhZ2UgPSBjcmVh
dGVOZXdQYWdlKCk7Ci0gICAgICAgICAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7Ci0gICAgICAgICAgICBpZiAobmV3UGFnZSkgewotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBQYXNzIHRoZSByZWFsIHNpemUuCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IG5l
d1BhZ2UtPmNyZWF0aW9uUGFyYW1ldGVycyhJbnRTaXplKDEwMCwgMTAwKSk7Ci0gICAgICAgICAg
ICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihuZXdQYWdlLT5wYWdlSUQoKSwgcGFyYW1l
dGVycykpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXBseS0+ZW5j
b2RlKENvcmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKSwgcGFyYW1ldGVycykpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQ6IHsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAg
ICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2Up
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBydW5KYXZhU2NyaXB0QWxl
cnQocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgbWVzc2FnZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkph
dmFTY3JpcHRDb25maXJtOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2Jh
Ymx5IGVuY29kZSBzb21ldGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0aGUgYXJndW1lbnRzIGRvIG5v
dCBkZWNvZGUgY29ycmVjdGx5LgotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAg
ICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZSkpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5KYXZhU2NyaXB0Q29uZmlybShwcm9j
ZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIHJlcGx5LT5l
bmNvZGUoQ29yZUlQQzo6SW4ocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgZW5jb2RlIHNvbWV0
aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBhcmd1bWVudHMgZG8gbm90IGRlY29kZSBjb3JyZWN0
bHkuCi0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgU3RyaW5nIG1l
c3NhZ2U7Ci0gICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFZhbHVlOwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZSwgZGVmYXVs
dFZhbHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBTdHJpbmcg
cmVzdWx0ID0gcnVuSmF2YVNjcmlwdFByb21wdChwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
LCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpOwotICAgICAgICAgICAgcmVwbHktPmVuY29kZShDb3Jl
SVBDOjpJbihyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEJhY2tJdGVtOiB7Ci0gICAg
ICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBiYWNrSXRlbSA9IG1fYmFja0ZvcndhcmRM
aXN0LT5iYWNrSXRlbSgpOwotICAgICAgICAgICAgdWludDY0X3QgYmFja0l0ZW1JRCA9IGJhY2tJ
dGVtID8gYmFja0l0ZW0tPml0ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUo
Q29yZUlQQzo6SW4oYmFja0l0ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEN1cnJlbnRJdGVt
OiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBjdXJyZW50SXRlbSA9IG1f
YmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpOwotICAgICAgICAgICAgdWludDY0X3QgY3Vy
cmVudEl0ZW1JRCA9IGN1cnJlbnRJdGVtID8gY3VycmVudEl0ZW0tPml0ZW1JRCgpIDogMDsKLSAg
ICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oY3VycmVudEl0ZW1JRCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNz
YWdlOjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtOiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtKiBmb3J3YXJkSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgp
OwotICAgICAgICAgICAgdWludDY0X3QgZm9yd2FyZEl0ZW1JRCA9IGZvcndhcmRJdGVtID8gZm9y
d2FyZEl0ZW0tPml0ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQ
Qzo6SW4oZm9yd2FyZEl0ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OiB7
Ci0gICAgICAgICAgICBpbnQgaXRlbUluZGV4OwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMt
PmRlY29kZShDb3JlSVBDOjpPdXQoaXRlbUluZGV4KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9y
d2FyZExpc3QtPml0ZW1BdEluZGV4KGl0ZW1JbmRleCk7Ci0gICAgICAgICAgICB1aW50NjRfdCBp
dGVtSUQgPSBpdGVtID8gaXRlbS0+aXRlbUlEKCkgOiAwOwotICAgICAgICAgICAgcmVwbHktPmVu
Y29kZShDb3JlSVBDOjpJbihpdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRCYWNrTGlzdENv
dW50OiB7Ci0gICAgICAgICAgICBpbnQgYmFja0xpc3RDb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0
LT5iYWNrTGlzdENvdW50KCk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6Oklu
KGJhY2tMaXN0Q291bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50OiB7
Ci0gICAgICAgICAgICBpbnQgZm9yd2FyZExpc3RDb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0LT5m
b3J3YXJkTGlzdENvdW50KCk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6Oklu
KGZvcndhcmRMaXN0Q291bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1l
c3NhZ2U6OkRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc6IHsKLSAgICAgICAgICAgIGJv
b2wgY29tcG9zaXRpbmc7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJ
UEM6Ok91dChjb21wb3NpdGluZykpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhjb21wb3NpdGluZyk7Ci0gICAg
ICAgICAgICByZXBseS0+ZW5jb2RlKGRyYXdpbmdBcmVhKCktPmluZm8oKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3
aXRoIHJlcGx5LgorICAgIGRpZFJlY2VpdmVTeW5jV2ViUGFnZVByb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywgcmVwbHkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCkBAIC0xMDI4LDkxICs1OTAs
MTc5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hQcm9ncmVzcygpCiAgICAgbV9sb2Fk
ZXJDbGllbnQuZGlkRmluaXNoUHJvZ3Jlc3ModGhpcyk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIHVybCwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFN0cmluZyYgdXJsLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKKyAg
ICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VE
ZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQo
KSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKTsKKwogICAgIGZyYW1lLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZCh1cmwpOwot
ICAgIG1fbG9hZGVyQ2xpZW50LmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodGhpcywg
ZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBtX2xvYWRlckNsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JG
cmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIEFQSU9iamVjdCog
dXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB1
cmwsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogeworICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVz
c2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBp
ZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
OworCiAgICAgZnJhbWUtPmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZCh1cmwpOwotICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2Fk
ZXJDbGllbnQuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OmRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJ
T2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBh
cmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdp
dGhFcnJvckZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgUmVmUHRyPEFQSU9i
amVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdl
RGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisK
KyAgICBtX2xvYWRlckNsaWVudC5kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJh
bWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENvbW1pdExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bywgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2Fk
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7
CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0
YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNv
ZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5
KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFtZS0+c2V0
TUlNRVR5cGUobWltZVR5cGUpOwogICAgIGZyYW1lLT5zZXRDZXJ0aWZpY2F0ZUluZm8oV2ViQ2Vy
dGlmaWNhdGVJbmZvOjpjcmVhdGUoY2VydGlmaWNhdGVJbmZvKSk7CiAgICAgZnJhbWUtPmRpZENv
bW1pdExvYWQoKTsKLSAgICBtX2xvYWRlckNsaWVudC5kaWRDb21taXRMb2FkRm9yRnJhbWUodGhp
cywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBtX2xvYWRlckNsaWVudC5kaWRDb21taXRMb2FkRm9y
RnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBB
UElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnRzKQogewotICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaERvY3VtZW50TG9hZEZv
ckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNl
ckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1
c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFt
ZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKKyAgICBtX2xv
YWRlckNsaWVudC5kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZy
YW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQ
YWdlUHJveHk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1
c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVy
KHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVu
dHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZy
YW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwogICAgIGZy
YW1lLT5kaWRGaW5pc2hMb2FkKCk7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZv
ckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmlu
aXNoTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpkaWRGYWlsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBB
UElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxMb2FkRm9yRnJh
bWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMp
CiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlz
LCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAg
IFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBh
Z2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1l
c3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJh
bWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQu
ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV2ViRnJh
bWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEFQSU9iamVjdCogdXNlckRhdGEp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1
bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4
dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFj
ZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29k
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFtZS0+ZGlkUmVjZWl2ZVRpdGxlKHRp
dGxlKTsKIAogICAgIC8vIENhY2hlIHRoZSB0aXRsZSBmb3IgdGhlIG1haW4gZnJhbWUgaW4gdGhl
IHBhZ2UuCiAgICAgaWYgKGZyYW1lID09IG1fbWFpbkZyYW1lKQogICAgICAgICBtX3BhZ2VUaXRs
ZSA9IHRpdGxlOwogCi0gICAgbV9sb2FkZXJDbGllbnQuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUo
dGhpcywgdGl0bGUsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVj
ZWl2ZVRpdGxlRm9yRnJhbWUodGhpcywgdGl0bGUsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaXJzdExheW91dEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZp
cnN0TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RMYXlvdXRGb3JG
cmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJE
YXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNl
ckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+
ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQ
cm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2Fk
ZXJDbGllbnQuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0
KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEpCit2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7
Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJh
bWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0
YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJE
YXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRl
Y29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJv
eHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKworICAgIG1fbG9hZGVy
Q2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHRoaXMsIGZyYW1l
LCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZW1vdmVGcmFt
ZUZyb21IaWVyYXJjaHkoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90
IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1f
bG9hZGVyQ2xpZW50LmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRV
c2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2Uo
KS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVtb3ZlRnJh
bWVGcm9tSGllcmFyY2h5KHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKIC8vIFBv
bGljeUNsaWVudAogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihXZWJGcmFtZVByb3h5KiBmcmFtZSwgTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5
cGUsIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24g
bW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQordm9p
ZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odWludDY0X3Qg
ZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG9wYXF1ZU1v
ZGlmaWVycywgaW50MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVp
bnQ2NF90IGxpc3RlbmVySUQpCiB7CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBl
ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG9wYXF1ZU5hdmlnYXRpb25UeXBlKTsKKyAg
ICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpN
b2RpZmllcnM+KG9wYXF1ZU1vZGlmaWVycyk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1v
dXNlQnV0dG9uID0gc3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihvcGFxdWVNb3Vz
ZUJ1dHRvbik7CisgICAgCiAgICAgUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4g
bGlzdGVuZXIgPSBmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxpc3RlbmVySUQpOwog
ICAgIGlmICghbV9wb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih0
aGlzLCBuYXZpZ2F0aW9uVHlwZSwgbW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBmcmFtZSwg
bGlzdGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViRnJhbWVQcm94eSog
ZnJhbWUsIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJz
IG1vZGlmaWVycywgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJp
bmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVl
TmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFxdWVN
b3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7Cisg
ICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOwor
ICAgIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlID0gc3RhdGljX2Nhc3Q8TmF2aWdhdGlv
blR5cGU+KG9wYXF1ZU5hdmlnYXRpb25UeXBlKTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1v
ZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9wYXF1ZU1vZGlmaWVy
cyk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uID0gc3RhdGljX2Nhc3Q8
V2ViTW91c2VFdmVudDo6QnV0dG9uPihvcGFxdWVNb3VzZUJ1dHRvbik7CisKICAgICBSZWZQdHI8
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9IGZyYW1lLT5zZXRVcFBvbGlj
eUxpc3RlbmVyUHJveHkobGlzdGVuZXJJRCk7CiAgICAgaWYgKCFtX3BvbGljeUNsaWVudC5kZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odGhpcywgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVy
cywgbW91c2VCdXR0b24sIHVybCwgZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkKICAgICAgICAgbGlz
dGVuZXItPnVzZSgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTUlN
RVR5cGUoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0
IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQordm9pZCBXZWJQYWdlUHJveHk6OmRl
Y2lkZVBvbGljeUZvck1JTUVUeXBlKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgTUlN
RVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQogeworICAgIFdl
YkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBS
ZWZQdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9IGZyYW1lLT5zZXRV
cFBvbGljeUxpc3RlbmVyUHJveHkobGlzdGVuZXJJRCk7CiAgICAgaWYgKCFtX3BvbGljeUNsaWVu
dC5kZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh0aGlzLCBNSU1FVHlwZSwgdXJsLCBmcmFtZSwgbGlz
dGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CkBAIC0xMTIwLDE4ICs3NzAs
MzIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck1JTUVUeQogCiAvLyBGb3Jt
Q2xpZW50CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShXZWJGcmFtZVByb3h5
KiBmcmFtZSwgV2ViRnJhbWVQcm94eSogc291cmNlRnJhbWUsIFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgdWlu
dDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybSh1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBzb3VyY2VGcmFtZUlELCBjb25zdCBTdHJpbmdQYWlyVmVj
dG9yJiB0ZXh0RmllbGRWYWx1ZXMsIHVpbnQ2NF90IGxpc3RlbmVySUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogYXJndW1lbnRzKQogeworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRh
OworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRh
dGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVj
b2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94
eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lUHJv
eHkqIHNvdXJjZUZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShzb3VyY2VGcmFtZUlEKTsKKwog
ICAgIFJlZlB0cjxXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJh
bWUtPnNldFVwRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5KGxpc3RlbmVySUQpOwotICAgIGlm
ICghbV9mb3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtKHRoaXMsIGZyYW1lLCBzb3VyY2VGcmFtZSwg
dGV4dEZpZWxkVmFsdWVzLCB1c2VyRGF0YSwgbGlzdGVuZXIuZ2V0KCkpKQorICAgIGlmICghbV9m
b3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtKHRoaXMsIGZyYW1lLCBzb3VyY2VGcmFtZSwgdGV4dEZp
ZWxkVmFsdWVzLnN0cmluZ1BhaXJWZWN0b3IoKSwgdXNlckRhdGEuZ2V0KCksIGxpc3RlbmVyLmdl
dCgpKSkKICAgICAgICAgbGlzdGVuZXItPmNvbnRpbnVlU3VibWlzc2lvbigpOwogfQogCiAvLyBV
SUNsaWVudAogCi1QYXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gV2ViUGFnZVByb3h5OjpjcmVhdGVO
ZXdQYWdlKCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVOZXdQYWdlKHVpbnQ2NF90JiBuZXdQ
YWdlSUQsIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIG5ld1BhZ2VQYXJhbWV0ZXJzKQogewot
ICAgIHJldHVybiBtX3VpQ2xpZW50LmNyZWF0ZU5ld1BhZ2UodGhpcyk7CisgICAgUmVmUHRyPFdl
YlBhZ2VQcm94eT4gbmV3UGFnZSA9IG1fdWlDbGllbnQuY3JlYXRlTmV3UGFnZSh0aGlzKTsKKyAg
ICBpZiAobmV3UGFnZSkgeworICAgICAgICAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCBzaXplLgor
ICAgICAgICBuZXdQYWdlSUQgPSBuZXdQYWdlLT5wYWdlSUQoKTsKKyAgICAgICAgbmV3UGFnZVBh
cmFtZXRlcnMgPSBuZXdQYWdlLT5jcmVhdGlvblBhcmFtZXRlcnMoSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgIH0gZWxzZQorICAgICAgICBuZXdQYWdlSUQgPSAwOwogfQogICAgIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNob3dQYWdlKCkKQEAgLTExNDQsMTkgKzgwOCwxOSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Y2xvc2VQYWdlKCkKICAgICBtX3VpQ2xpZW50LmNsb3NlKHRoaXMpOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdEFs
ZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBtX3Vp
Q2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCh0aGlzLCBtZXNzYWdlLCBmcmFtZSk7CisgICAgbV91
aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQodGhpcywgbWVzc2FnZSwgcHJvY2VzcygpLT53ZWJG
cmFtZShmcmFtZUlEKSk7CiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0Q29u
ZmlybShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBX
ZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgYm9vbCYgcmVzdWx0KQogewotICAgIHJldHVybiBtX3VpQ2xpZW50
LnJ1bkphdmFTY3JpcHRDb25maXJtKHRoaXMsIG1lc3NhZ2UsIGZyYW1lKTsKKyAgICByZXN1bHQg
PSBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtKHRoaXMsIG1lc3NhZ2UsIHByb2Nlc3Mo
KS0+d2ViRnJhbWUoZnJhbWVJRCkpOwogfQogCi1TdHJpbmcgV2ViUGFnZVByb3h5OjpydW5KYXZh
U2NyaXB0UHJvbXB0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlKQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFT
Y3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIG1f
dWlDbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCh0aGlzLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUs
IGZyYW1lKTsKKyAgICByZXN1bHQgPSBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHQodGhp
cywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQpAQCAtMTE2NCw0OCArODI4LDg1IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTdGF0dXNUZXh0
KGNvbnN0IFMKICAgICBtX3VpQ2xpZW50LnNldFN0YXR1c1RleHQodGhpcywgdGV4dCk7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycywgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5
Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCh1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fdWlDbGllbnQubW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQodGhpcywgbW9kaWZpZXJzLCB1c2VyRGF0YSk7CisKKyAgICBSZWZQ
dHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVy
IG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Cisg
ICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2Vi
RXZlbnQ6Ok1vZGlmaWVycz4ob3BhcXVlTW9kaWZpZXJzKTsKKworICAgIG1fdWlDbGllbnQubW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQodGhpcywgbW9kaWZpZXJzLCB1c2VyRGF0YS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZW50c1NpemVDaGFuZ2VkKFdlYkZyYW1lUHJveHkq
IGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQordm9pZCBXZWJQYWdlUHJveHk6
OmNvbnRlbnRzU2l6ZUNoYW5nZWQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3VpQ2xpZW50LmNvbnRlbnRzU2l6ZUNoYW5nZWQodGhpcywg
c2l6ZSwgZnJhbWUpOworICAgIG1fdWlDbGllbnQuY29udGVudHNTaXplQ2hhbmdlZCh0aGlzLCBz
aXplLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpKTsKIH0KIAogLy8gQmFja0ZvcndhcmRM
aXN0CiAKLXZvaWQgV2ViUGFnZVByb3h5OjphZGRJdGVtVG9CYWNrRm9yd2FyZExpc3QoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEFk
ZEl0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIG1fYmFja0ZvcndhcmRMaXN0LT5hZGRJdGVt
KGl0ZW0pOworICAgIG1fYmFja0ZvcndhcmRMaXN0LT5hZGRJdGVtKHByb2Nlc3MoKS0+d2ViQmFj
a0ZvcndhcmRJdGVtKGl0ZW1JRCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z29Ub0l0ZW1J
bkJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQordm9pZCBXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIG1f
YmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShpdGVtKTsKKyAgICBtX2JhY2tGb3J3YXJkTGlzdC0+
Z29Ub0l0ZW0ocHJvY2VzcygpLT53ZWJCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSk7CiB9CiAKLS8v
IFVuZG8gbWFuYWdlbWVudAordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0l0ZW0o
dWludDY0X3QmIGl0ZW1JRCkKK3sKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBiYWNrSXRl
bSA9IG1fYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOworICAgIGl0ZW1JRCA9IGJhY2tJdGVt
ID8gYmFja0l0ZW0tPml0ZW1JRCgpIDogMDsKK30KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lz
dGVyRWRpdENvbW1hbmRGb3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgRWRpdEFjdGlvbiBlZGl0
QWN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQ3VycmVudEl0ZW0odWludDY0
X3QmIGl0ZW1JRCkKIHsKLSAgICByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhXZWJFZGl0Q29t
bWFuZFByb3h5OjpjcmVhdGUoY29tbWFuZElELCBlZGl0QWN0aW9uLCB0aGlzKSk7CisgICAgV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogY3VycmVudEl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+Y3Vy
cmVudEl0ZW0oKTsKKyAgICBpdGVtSUQgPSBjdXJyZW50SXRlbSA/IGN1cnJlbnRJdGVtLT5pdGVt
SUQoKSA6IDA7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcygp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkSXRlbSh1aW50NjRfdCYgaXRl
bUlEKQogewotICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKKyAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmb3J3YXJkSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5m
b3J3YXJkSXRlbSgpOworICAgIGl0ZW1JRCA9IGZvcndhcmRJdGVtID8gZm9yd2FyZEl0ZW0tPml0
ZW1JRCgpIDogMDsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRG
b3JVbmRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFuZFByb3h5KQordm9p
ZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJfdCBpbmRleCwgdWlu
dDY0X3QmIGl0ZW1JRCkKIHsKLSAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRpdENvbW1hbmQo
Y29tbWFuZFByb3h5LCBQYWdlQ2xpZW50OjpVbmRvKTsKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGluZGV4KTs7CisgICAg
aXRlbUlEID0gaXRlbSA/IGl0ZW0tPml0ZW1JRCgpIDogMDsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQ
cm94eT4gY29tbWFuZFByb3h5KQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQmFja0xp
c3RDb3VudChpbnQzMl90JiBjb3VudCkKIHsKLSAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRp
dENvbW1hbmQoY29tbWFuZFByb3h5LCBQYWdlQ2xpZW50OjpSZWRvKTsKKyAgICBjb3VudCA9IG1f
YmFja0ZvcndhcmRMaXN0LT5iYWNrTGlzdENvdW50KCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpiYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoaW50MzJfdCYgY291bnQpCit7CisgICAgY291
bnQgPSBtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOworfQorCisvLyBVbmRv
IG1hbmFnZW1lbnQKKwordm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JV
bmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgdWludDMyX3QgZWRpdEFjdGlvbikKK3sKKyAgICByZWdp
c3RlckVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHk6OmNyZWF0ZShjb21tYW5kSUQsIHN0
YXRpY19jYXN0PEVkaXRBY3Rpb24+KGVkaXRBY3Rpb24pLCB0aGlzKSwgVW5kbyk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbV9wYWdlQ2xp
ZW50LT5jbGVhckFsbEVkaXRDb21tYW5kcygpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVn
aXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmRQ
cm94eSwgVW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIG1fcGFnZUNsaWVudC0+cmVnaXN0
ZXJFZGl0Q29tbWFuZChjb21tYW5kUHJveHksIHVuZG9PclJlZG8pOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6YWRkRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSogY29tbWFuZCkKQEAg
LTEyNDEsOCArOTQyLDE1IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDdXJzb3IoY29uc3QgV2Vi
Q28KICAgICBtX3BhZ2VDbGllbnQtPnNldEN1cnNvcihjdXJzb3IpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KFdlYkV2ZW50OjpUeXBlIHR5cGUsIGJvb2wgaGFuZGxl
ZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRWYWxpZGF0ZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90IHN0YXRlKQoreworICAgIG1fcGFn
ZUNsaWVudC0+c2V0RWRpdENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0
ZSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3Bh
cXVlVHlwZSwgYm9vbCBoYW5kbGVkKQogeworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0
aWNfY2FzdDxXZWJFdmVudDo6VHlwZT4ob3BhcXVlVHlwZSk7CisKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMzA0LDEzICsxMDEyLDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRTb3VyY2VG
b3JGcmFtZSgKICAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKHJl
c3VsdFN0cmluZy5pbXBsKCkpOwogfQogCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhi
b29sIGNvbXBvc2l0aW5nKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoYm9vbCBjb21wb3NpdGluZywgRHJhd2luZ0FyZWFCYXNlOjpEcmF3aW5nQXJl
YUluZm8mIGRyYXdpbmdBcmVhSW5mbykKIHsKICAgICBpZiAoY29tcG9zaXRpbmcpCiAgICAgICAg
IGRpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIGVsc2UKICAgICAgICAgZGlk
TGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisKKyAgICBkcmF3aW5nQXJlYUluZm8gPSBk
cmF3aW5nQXJlYSgpLT5pbmZvKCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgY2xhc3MgRHJhd2luZ0FyZWFQ
cm94eTsKIGNsYXNzIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBQYWdlQ2xpZW50Owog
Y2xhc3MgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBTdHJpbmdQYWlyVmVjdG9yOwog
Y2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsK
IGNsYXNzIFdlYkRhdGE7CkBAIC0xODgsMTAgKzE4OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICNlbmRpZgogCisgICAgZW51bSBVbmRv
T3JSZWRvIHsgVW5kbywgUmVkbyB9OwogICAgIHZvaWQgYWRkRWRpdENvbW1hbmQoV2ViRWRpdENv
bW1hbmRQcm94eSopOwogICAgIHZvaWQgcmVtb3ZlRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQ
cm94eSopOwotICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxX
ZWJFZGl0Q29tbWFuZFByb3h5Pik7Ci0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yUmVk
byhQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+KTsKKyAgICB2b2lkIHJlZ2lzdGVyRWRp
dENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CiAK
ICAgICBXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MoKSBjb25zdDsKICAgICBXZWJQYWdlTmFtZXNw
YWNlKiBwYWdlTmFtZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlTmFtZXNwYWNlLmdldCgp
OyB9CkBAIC0yMTAsNTMgKzIxMSw2NCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CiAKKyAgICAvLyBJbXBsZW1lbnRlZCBpbiBn
ZW5lcmF0ZWQgV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVj
ZWl2ZVdlYlBhZ2VQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgQ29yZUlQQzo6U3luY1Jl
cGx5TW9kZSBkaWRSZWNlaXZlU3luY1dlYlBhZ2VQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgQ29y
ZUlQQzo6QXJndW1lbnRFbmNvZGVyKik7CisKICAgICB2b2lkIGRpZENyZWF0ZU1haW5GcmFtZSh1
aW50NjRfdCBmcmFtZUlEKTsKICAgICB2b2lkIGRpZENyZWF0ZVN1YkZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpOwogCi0gICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZy
YW1lUHJveHkqLCBjb25zdCBTdHJpbmcmLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkq
LCBjb25zdCBTdHJpbmcmLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25h
bExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRD
b21taXRMb2FkRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBk
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7
Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9iamVj
dCopOwotICAgIHZvaWQgZGlkRmFpbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShXZWJGcmFtZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRGaXJzdExheW91dEZvckZy
YW1lKFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKLSAg
ICB2b2lkIGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShXZWJGcmFtZVByb3h5KiwgQVBJT2Jq
ZWN0Kik7CisgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAg
IHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
Kik7CisgICAgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRDb21taXRMb2Fk
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAg
ICB2b2lkIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQg
ZGlkRmFpbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFN0cmluZyYsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQg
ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKTsKKyAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZy
YW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZv
aWQgZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlkU3RhcnRQcm9ncmVzcygpOwogICAgIHZv
aWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlKTsKICAgICB2b2lkIGRpZEZpbmlzaFByb2dyZXNz
KCk7CiAgICAgCi0gICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYkZy
YW1lUHJveHkqLCBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycywg
V2ViTW91c2VFdmVudDo6QnV0dG9uLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVu
ZXJJRCk7Ci0gICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViRnJhbWVQ
cm94eSosIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJzLCBXZWJN
b3VzZUV2ZW50OjpCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklE
KTsKLSAgICB2b2lkIGRlY2lkZVBvbGljeUZvck1JTUVUeXBlKFdlYkZyYW1lUHJveHkqLCBjb25z
dCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJ
RCk7CisgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMy
X3QgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsK
KyAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlE
LCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1v
dXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAg
dm9pZCBkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CiAK
LSAgICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVBy
b3h5KiBmcmFtZVNvdXJjZSwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4
dEZpZWxkVmFsdWVzLCBBUElPYmplY3QqIHVzZXJEYXRhLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsK
KyAgICB2b2lkIHdpbGxTdWJtaXRGb3JtKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHNvdXJj
ZUZyYW1lSUQsIGNvbnN0IFN0cmluZ1BhaXJWZWN0b3ImIHRleHRGaWVsZFZhbHVlcywgdWludDY0
X3QgbGlzdGVuZXJJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAKLSAgICBQYXNzUmVm
UHRyPFdlYlBhZ2VQcm94eT4gY3JlYXRlTmV3UGFnZSgpOworICAgIHZvaWQgY3JlYXRlTmV3UGFn
ZSh1aW50NjRfdCYgbmV3UGFnZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAg
dm9pZCBzaG93UGFnZSgpOwogICAgIHZvaWQgY2xvc2VQYWdlKCk7Ci0gICAgdm9pZCBydW5KYXZh
U2NyaXB0QWxlcnQoV2ViRnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcnVu
SmF2YVNjcmlwdENvbmZpcm0oV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYpOwot
ICAgIFN0cmluZyBydW5KYXZhU2NyaXB0UHJvbXB0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydCh1
aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRD
b25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlc3VsdCk7Cisg
ICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIFN0cmluZyYgcmVzdWx0KTsKICAgICB2b2lkIHNldFN0YXR1c1Rl
eHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJF
dmVudDo6TW9kaWZpZXJzLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5n
ZWQoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KHVpbnQzMl90IG1vZGlmaWVycywgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAogICAgIC8vIEJhY2svRm9yd2FyZCBsaXN0
IG1hbmFnZW1lbnQKLSAgICB2b2lkIGFkZEl0ZW1Ub0JhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9y
d2FyZExpc3RJdGVtKik7Ci0gICAgdm9pZCBnb1RvSXRlbUluQmFja0ZvcndhcmRMaXN0KFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qKTsKKyAgICB2b2lkIGJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRf
dCBpdGVtSUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQp
OworICAgIHZvaWQgYmFja0ZvcndhcmRCYWNrSXRlbSh1aW50NjRfdCYgaXRlbUlEKTsKKyAgICB2
b2lkIGJhY2tGb3J3YXJkQ3VycmVudEl0ZW0odWludDY0X3QmIGl0ZW1JRCk7CisgICAgdm9pZCBi
YWNrRm9yd2FyZEZvcndhcmRJdGVtKHVpbnQ2NF90JiBpdGVtSUQpOworICAgIHZvaWQgYmFja0Zv
cndhcmRJdGVtQXRJbmRleChpbnQzMl90IGluZGV4LCB1aW50NjRfdCYgaXRlbUlEKTsKKyAgICB2
b2lkIGJhY2tGb3J3YXJkQmFja0xpc3RDb3VudChpbnQzMl90JiBjb3VudCk7CisgICAgdm9pZCBi
YWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoaW50MzJfdCYgY291bnQpOwogCiAgICAgLy8gVW5k
byBtYW5hZ2VtZW50Ci0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1aW50NjRf
dCBjb21tYW5kSUQsIFdlYkNvcmU6OkVkaXRBY3Rpb24pOworICAgIHZvaWQgcmVnaXN0ZXJFZGl0
Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElELCB1aW50MzJfdCBlZGl0QWN0aW9uKTsK
ICAgICB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAKICAgICB2b2lkIHRha2VGb2N1cyhi
b29sIGRpcmVjdGlvbik7CiAgICAgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZvaWQgZGlkVmFs
aWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwg
aW50MzJfdCBzdGF0ZSk7CiAKLSAgICB2b2lkIGRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlw
ZSwgYm9vbCBoYW5kbGVkKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFx
dWVUeXBlLCBib29sIGhhbmRsZWQpOwogCiAgICAgdm9pZCBkaWRSdW5KYXZhU2NyaXB0SW5NYWlu
RnJhbWUoY29uc3QgU3RyaW5nJiwgdWludDY0X3QpOwogICAgIHZvaWQgZGlkR2V0UmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgdWludDY0X3QpOwpAQCAtMjY1
LDcgKzI3Nyw3IEBAIHByaXZhdGU6CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVh
dGlvblBhcmFtZXRlcnMoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgZGlkQ2hhbmdlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZyhib29sIGNvbXBvc2l0aW5nKTsKKyAgICB2b2lkIGRpZENoYW5nZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoYm9vbCBjb21wb3NpdGluZywgRHJhd2luZ0FyZWFCYXNlOjpEcmF3aW5n
QXJlYUluZm8mKTsKICNlbmRpZiAgICAKIAogICAgIFBhZ2VDbGllbnQqIG1fcGFnZUNsaWVudDsK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKKyAgICAjIFVJIG1lc3NhZ2Vz
LgorICAgIENyZWF0ZU5ld1BhZ2UoKSAtPiAodWludDY0X3QgbmV3UGFnZUlELCBXZWJLaXQ6Oldl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgbmV3UGFnZVBhcmFtZXRlcnMpCisgICAgU2hvd1BhZ2Uo
KQorICAgIENsb3NlUGFnZSgpCisgICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1l
SUQsIFdURjo6U3RyaW5nIG1lc3NhZ2UpIC0+ICgpCisgICAgUnVuSmF2YVNjcmlwdENvbmZpcm0o
dWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgbWVzc2FnZSkgLT4gKGJvb2wgcmVzdWx0KQor
ICAgIFJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgbWVz
c2FnZSwgV1RGOjpTdHJpbmcgZGVmYXVsdFZhbHVlKSAtPiAoV1RGOjpTdHJpbmcgcmVzdWx0KQor
ICAgIE1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHVpbnQzMl90IG1vZGlmaWVycywgV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSk7CisgICAgQ29udGVudHNT
aXplQ2hhbmdlZCh1aW50NjRfdCBmcmFtZUlELCBXZWJDb3JlOjpJbnRTaXplIG5ld1NpemUpCisg
ICAgRGlkUmVjZWl2ZUV2ZW50KHVpbnQzMl90IHR5cGUsIGJvb2wgaGFuZGxlZCkKKyAgICBEaWRW
YWxpZGF0ZU1lbnVJdGVtKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwg
aW50MzJfdCBzdGF0ZSkKKyAgICBTZXRDdXJzb3IoV2ViQ29yZTo6Q3Vyc29yIGN1cnNvcikKKyAg
ICBTZXRTdGF0dXNUZXh0KFdURjo6U3RyaW5nIHN0YXR1c1RleHQpCisgICAgU2V0VG9vbFRpcChX
VEY6OlN0cmluZyB0b29sVGlwKQorICAgIFRha2VGb2N1cyhib29sIGRpcmVjdGlvbikKKworICAg
ICMgUG9saWN5IG1lc3NhZ2VzLgorICAgIERlY2lkZVBvbGljeUZvck1JTUVUeXBlKHVpbnQ2NF90
IGZyYW1lSUQsIFdURjo6U3RyaW5nIE1JTUVUeXBlLCBXVEY6OlN0cmluZyB1cmwsIHVpbnQ2NF90
IGxpc3RlbmVySUQpCisgICAgRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih1aW50NjRf
dCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBp
bnQzMl90IG1vdXNlQnV0dG9uLCBXVEY6OlN0cmluZyB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQp
CisgICAgRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMsIGludDMyX3QgbW91c2VC
dXR0b24sIFdURjo6U3RyaW5nIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKKworICAgICMgUHJv
Z3Jlc3MgbWVzc2FnZXMuCisgICAgRGlkQ2hhbmdlUHJvZ3Jlc3MoZG91YmxlIHZhbHVlKQorICAg
IERpZEZpbmlzaFByb2dyZXNzKCkKKyAgICBEaWRTdGFydFByb2dyZXNzKCkKKworICAgICMgRnJh
bWUgbGlmZXRpbWUgbWVzc2FnZXMuCisgICAgRGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQpCisgICAgRGlkQ3JlYXRlU3ViRnJhbWUodWludDY0X3QgZnJhbWVJRCkKKworICAgICMg
RnJhbWUgbG9hZCBtZXNzYWdlcy4KKyAgICBEaWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgV1RGOjpTdHJpbmcgbWltZVR5cGUsIFdlYktpdDo6UGxhdGZvcm1DZXJ0aWZpY2F0
ZUluZm8gY2VydGlmaWNhdGVJbmZvLCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VF
bmNvZGVyIHVzZXJEYXRhKQorICAgIERpZEZhaWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJ
RCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAg
ICBEaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVk
QnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZEZpbmlzaExvYWRGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VF
bmNvZGVyIHVzZXJEYXRhKQorICAgIERpZEZpcnN0TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkK
KyAgICBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQor
ICAgIERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIHVybCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVz
ZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJj
aHkodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5j
b2RlciB1c2VyRGF0YSkKKyAgICBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIHVybCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSh1aW50
NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyB0aXRsZSwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVz
ZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKworICAgICMgRm9ybXMgbWVzc2FnZXMuCisgICAg
V2lsbFN1Ym1pdEZvcm0odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qgc291cmNlRnJhbWVJRCwg
V2ViS2l0OjpTdHJpbmdQYWlyVmVjdG9yIHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVu
ZXJJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkK
KworICAgICMgQ2FsbGJhY2sgbWVzc2FnZXMuCisgICAgRGlkR2V0UmVuZGVyVHJlZUV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpTdHJpbmcgcmVzdWx0U3RyaW5nLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQorICAgIERpZEdldFNvdXJjZUZvckZyYW1lKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywg
dWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoV1RG
OjpTdHJpbmcgcmVzdWx0U3RyaW5nLCB1aW50NjRfdCBjYWxsYmFja0lEKQorCisgICAgIyBCYWNr
Rm9yd2FyZCBtZXNzYWdlcy4KKyAgICBCYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlE
KQorICAgIEJhY2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3
YXJkQmFja0l0ZW0oKSAtPiAodWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkQ3VycmVu
dEl0ZW0oKSAtPiAodWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkRm9yd2FyZEl0ZW0o
KSAtPiAodWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkSXRlbUF0SW5kZXgodWludDY0
X3QgaXRlbUlEKSAtPiAodWludDY0X3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkQmFja0xpc3RD
b3VudCgpIC0+IChpbnQzMl90IGl0ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291
bnQoKSAtPiAoaW50MzJfdCBpdGVtSUQpCisKKyAgICAjIFVuZG9SZWRvIG1lc3NhZ2VzLgorICAg
IFJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgdWludDMyX3Qg
ZWRpdEFjdGlvbikKKyAgICBDbGVhckFsbEVkaXRDb21tYW5kcygpCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgIyBBY2NlbGVyYXRlZCBjb21wc2l0aW5nIG1lc3NhZ2Vz
LgorICAgIERpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBjb21wb3NpdGluZykg
LT4gKFdlYktpdDo6RHJhd2luZ0FyZWFCYXNlOjpEcmF3aW5nQXJlYUluZm8gbmV3RHJhd2luZ0Fy
ZWEpCisjZW5kaWYKK30KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLmgJKHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYgb2xkVG9vbFRp
cCwgY29uc3QgU3RyaW5nJiBuZXdUb29sVGlwKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
KGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogCi0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5k
KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pOworICAgIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsK
ICAgICB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwg
Ym9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NyArMTgzLDcgQEAgc3RhdGljIE5TU3RyaW5nKiBuYW1lRm9yRWRpdEFjdGlvbihFZGl0QQogICAg
IHJldHVybiBuaWw7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBwcnBDb21tYW5kLCBVbmRvT3JSZWRv
IHVuZG9PclJlZG8pCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kKFBh
c3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gcHJwQ29tbWFuZCwgV2ViUGFnZVByb3h5OjpV
bmRvT3JSZWRvIHVuZG9PclJlZG8pCiB7CiAgICAgUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
IGNvbW1hbmQgPSBwcnBDb21tYW5kOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZAogICAgIE5TU3RyaW5nICphY3Rpb25OYW1lID0g
bmFtZUZvckVkaXRBY3Rpb24oY29tbWFuZC0+ZWRpdEFjdGlvbigpKTsKIAogICAgIE5TVW5kb01h
bmFnZXIgKnVuZG9NYW5hZ2VyID0gW21fd2tWaWV3IHVuZG9NYW5hZ2VyXTsKLSAgICBbdW5kb01h
bmFnZXIgcmVnaXN0ZXJVbmRvV2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6
KCh1bmRvT3JSZWRvID09IFVuZG8pID8gQHNlbGVjdG9yKHVuZG9FZGl0aW5nOikgOiBAc2VsZWN0
b3IocmVkb0VkaXRpbmc6KSkgb2JqZWN0OmNvbW1hbmRPYmpDLmdldCgpXTsKKyAgICBbdW5kb01h
bmFnZXIgcmVnaXN0ZXJVbmRvV2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCkgc2VsZWN0b3I6
KCh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBAc2VsZWN0b3IodW5kb0VkaXRp
bmc6KSA6IEBzZWxlY3RvcihyZWRvRWRpdGluZzopKSBvYmplY3Q6Y29tbWFuZE9iakMuZ2V0KCld
OwogICAgIGlmIChhY3Rpb25OYW1lKQogICAgICAgICBbdW5kb01hbmFnZXIgc2V0QWN0aW9uTmFt
ZTphY3Rpb25OYW1lXTsKIH0KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJ
KHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgUVdLUGFnZVByaXZhdGU6OnRv
b2xUaXBDaGFuZ2VkKGNvbnMKICAgICBlbWl0IHEtPnN0YXR1c0Jhck1lc3NhZ2UoUVN0cmluZyhu
ZXdUb29sdGlwKSk7CiB9CiAKLXZvaWQgUVdLUGFnZVByaXZhdGU6OnJlZ2lzdGVyRWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbykKK3ZvaWQgUVdL
UGFnZVByaXZhdGU6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFu
ZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQogewogfQogCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJz
b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBX
VEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NS
ZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CisgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYkVkaXRD
b21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFp
bnRlciwgUVJlY3QpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24g
NjkzMTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3Miw3ICs1NzIsNyBAQCB2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBXZWJD
b3JlOjpDCiAgICAgOjpTZXRDdXJzb3IocGxhdGZvcm1DdXJzb3IpOwogfQogCi12b2lkIFdlYlZp
ZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piwg
VW5kb09yUmVkbykKK3ZvaWQgV2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRy
PFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCiB7CiB9CiAK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7CiAg
ICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3Qg
V1RGOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQ
dHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1h
bmRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgV1RGOjpT
dHJpbmcmLCBib29sLCBpbnQpOwogCkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg5LDggKzE4OSw2IEBACiAJ
CUJDMTExQjUxMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTExQjRDMTEyRjYxOTIwMDMz
N0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLzsgfTsKIAkJQkMxMTFCNUQxMTJGNjI5ODAwMzM3
QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMxMTFCNUIxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9y
eS5oICovOyB9OwogCQlCQzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFC
NUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSAqLzsgfTsKLQkJQkMxMTFC
NjQxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFCNjExMTJGNjM4MzAw
MzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oICovOyB9OwotCQlCQzExMUI2NTEx
MkY2MzgzMDAzMzdCQUIgLyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFCNjIxMTJGNjM4MzAwMzM3QkFC
IC8qIFdlYlByb2Nlc3NNZXNzYWdlS2luZHMuaCAqLzsgfTsKIAkJQkMxMzFCQzkxMTcyNkMyODAw
QjY5NzI3IC8qIENvcmVJUENNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxQkM4MTE3MjZDMjgwMEI2OTcyNyAvKiBDb3JlSVBD
TWVzc2FnZUtpbmRzLmggKi87IH07CiAJCUJDMTRERjc3MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzE0REY3NTEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZC5oICovOyB9OwogCQlCQzE0REY3ODEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0
ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzE0REY3NjEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZC5jcHAgKi87IH07CkBAIC0zNTEsNiArMzQ5LDkgQEAKIAkJQkNCOUY4QjAxMTI0
RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCOUY4QUUxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBv
bGljeUNsaWVudC5oICovOyB9OwogCQlCQ0JDQjBDQjEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRh
YmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNCQ0IwQ0ExMjE1RTMyMTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuaCAq
LzsgfTsKIAkJQkNCQ0IwQ0QxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQ0Iw
Q0MxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuY3BwICovOyB9OworCQlC
Q0JEMzkxNDEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEy
MTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OworCQlCQ0JEMzkxNTEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkQzOTEzMTI1
QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlCQ0JEM0Mz
QjEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8q
IFN0cmluZ1BhaXJWZWN0b3IuaCAqLzsgfTsKIAkJQkNDNTZGNzkxMTU5OTU3RDAwMUNDQUY5IC8q
IE1hY2hQb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0M1NkY3NzExNTk5NTdEMDAxQ0NBRjkgLyogTWFjaFBvcnQuaCAqLzsgfTsKIAkJQkNDNTcx
NUIxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5
IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovOyB9OwogCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NB
RjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUlu
dGVyZmFjZS5tbSAqLzsgfTsKQEAgLTY0MSw4ICs2NDIsNiBAQAogCQlCQzExMUI0QzExMkY2MTky
MDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQYWdlQ2xpZW50SW1wbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMxMTFCNUIxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudEZhY3RvcnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCNUMxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50
RmFjdG9yeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2
ZW50RmFjdG9yeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMxMTFCNjExMTJG
NjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMxMTFCNjIxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlByb2Nl
c3NNZXNzYWdlS2luZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJv
Y2Vzc01lc3NhZ2VLaW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEzMUJD
ODExNzI2QzI4MDBCNjk3MjcgLyogQ29yZUlQQ01lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlSVBDTWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMTRERjc1MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVk
QnVuZGxlU2NyaXB0V29ybGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNERG
NzYxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDMsNiArODAyLDEwIEBACiAJ
CUJDQjlGOEFFMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUG9saWN5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQkNCMENBMTIxNUUzMjEwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0
aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltbXV0YWJsZURpY3Rp
b25hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCQ0IwQ0MxMjE1RTMzQTAw
REU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1tdXRhYmxlRGljdGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDQkQzOEZBMTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JEMzkxMjEyNUJCMUE4MDBEMkMyOUYg
LyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQkQzOTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdl
UHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdl
UHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JEM0MzQTEy
NUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJpbmdQYWlyVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQzU2Rjc3MTE1OTk1N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNoUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0M1NzE1OTExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M1NzE1QTExNUFEQUVGMDAxQ0NBRjkgLyog
V2ViU3lzdGVtSW50ZXJmYWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViU3lzdGVtSW50ZXJmYWNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTEzMCw2ICsxMTMzLDcgQEAKIAkJCQkxQTBGMjlDQTEyMEIzNzE2MDA1M0QxQjkgLyogVmlz
aXRlZExpbmtUYWJsZS5oICovLAogCQkJCUJDMUREN0IxMTE0REMzOTYwMDVBREFGMyAvKiBXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCAqLywKIAkJCQlCQ0Y1MDcyNjEyNDMyOUFBMDA1OTU1QUUgLyog
V2ViQ2VydGlmaWNhdGVJbmZvLmggKi8sCisJCQkJQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8q
IFN0cmluZ1BhaXJWZWN0b3IuaCAqLywKIAkJCQk1MTU3OEI4MjEyMDlFQ0VGMDBBMzdDNEEgLyog
V2ViRGF0YS5oICovLAogCQkJCTUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5o
ICovLAogCQkJCUJDMDMyREFGMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudC5oICovLApAQCAt
MTMzMCw2ICsxMzM0LDcgQEAKIAkJCQlCQ0VFOThDNTExMzMxNEQ3MDA2QkNDMjQgLyogV2ViUGFn
ZU5hbWVzcGFjZS5oICovLAogCQkJCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdl
UHJveHkuY3BwICovLAogCQkJCUJDMDMyRENCMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJv
eHkuaCAqLywKKwkJCQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluICovLAogCQkJCUJDQjlGOEFEMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lD
bGllbnQuY3BwICovLAogCQkJCUJDQjlGOEFFMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lD
bGllbnQuaCAqLywKIAkJCQlCQ0Q1OTdGRTExMkI1N0JFMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5j
ZXMuY3BwICovLApAQCAtMTQ2MCw4ICsxNDY1LDYgQEAKIAkJCQlCQzlFOTY5OTExNDU3RURFMDA4
NzBFNzEgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VLaW5kcy5oICovLAogCQkJCUJDQjI4Q0JG
MTIwMjMzRDkwMDdEOTlCQyAvKiBJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oICovLAogCQkJ
CUJDQ0I3NUM1MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggKi8s
Ci0JCQkJQkMxMTFCNjExMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5k
cy5oICovLAotCQkJCUJDMTExQjYyMTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2Fn
ZUtpbmRzLmggKi8sCiAJCQkJQkNCNzM0NkQxMUNFRTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nlc3NQ
cm94eU1lc3NhZ2VLaW5kcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBDb3JlSVBDU3VwcG9ydDsK
QEAgLTE3MDIsNiArMTcwNSw4IEBACiAJCQkJMUE4RUZBNkYxMjUyQjg0MTAwRjcwNjdGIC8qIFBs
dWdpblByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQlDMENFNzI5RTEyNDdFNzFEMDBCQzBFQzQgLyog
V2ViUGFnZU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQzBDRTcyOUYxMjQ3RTcxRDAwQkMw
RUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oICovLAorCQkJCUJDQkQzOTEyMTI1QkIxQTgwMEQyQzI5
RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUJDQkQzOTEzMTI1
QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3
MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC0xODA3LDcgKzE4MTIsNiBAQAogCQkJCUJD
MDMyRDhGMTBGNDM3QTAwMDU4QzE1QSAvKiBXZWJQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VFOThDNzExMzMxNEQ3MDA2QkNDMjQgLyogV2ViUGFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwMzJERDExMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQkMxMTFCNjQxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eU1l
c3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRTczNjExMUNDMjY1OTAwN0JENTM5
IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOUY4QjAx
MTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNENTk3RkYxMTJCNTdCRTAwRUM4QzIzIC8qIFdlYlByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAq
LywKQEAgLTE4MTUsNyArMTgxOSw2IEBACiAJCQkJQkMwMzJEOTcxMEY0MzdBRjAwNThDMTVBIC8q
IFdlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZBMDIwMTFFMTUyODcwMERCMTM3
MSAvKiBXZWJQcm9jZXNzTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJERDMxMEY0Mzg5
RjAwNThDMTVBIC8qIFdlYlByb2Nlc3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzEx
MUI2NTExMkY2MzgzMDAzMzdCQUIgLyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwMzJERDUxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlByb2Nlc3NQcm94eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCNzM0NkUxMUNFRTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nl
c3NQcm94eU1lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDNTcxNUIxMTVBREFF
RjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTM4
LDYgKzE5NDEsOCBAQAogCQkJCUJDMzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjZCRjEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJv
Y2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjgyNDEyNUE2Qjk0MDBFNzEy
NzggLyogV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkNCRDM5MTUxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCQ0JEM0MzQjEyNUJGQTdBMDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMjM1LDYgKzIyNDAsNyBAQAogCQkJCUJDMzA2NUM0MTI1
OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMz
MDY2QkUxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMzMDY4MjUxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNCRDM5MTQxMjVCQjFB
ODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXNTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRo
aXM7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHdpbmRvd1JlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTk4LDggKzk4
LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmNhblRha2VGb2N1cyhGb2N1cwogCiB2b2lkIFdl
YkNocm9tZUNsaWVudDo6dGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVz
c2FnZTo6VGFrZUZvY3VzLCBtX3BhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJk
ID8gdHJ1ZSA6IGZhbHNlKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VGFrZUZvY3VzKGRpcmVjdGlvbiA9PSBGb2N1
c0RpcmVjdGlvbkZvcndhcmQgPyB0cnVlIDogZmFsc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWROb2RlQ2hhbmdlZChOb2RlKikKQEAgLTEx
MSwxMCArMTEwLDkgQEAgUGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbQog
ewogICAgIHVpbnQ2NF90IG5ld1BhZ2VJRCA9IDA7CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlv
bigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpDcmVhdGVOZXdQYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBh
Z2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQobmV3UGFnZUlELCBwYXJhbWV0ZXJzKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVh
dGVOZXdQYWdlKCksCisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVO
ZXdQYWdlOjpSZXBseShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgbV9wYWdl
LT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgewogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKQEAgLTIzNiwxMCArMjM0LDggQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnJ1bkphdmFTY3JpcHRBbGVydAogICAgIC8vIE5vdGlmeSB0aGUgYnVuZGxlIGNsaWVudC4K
ICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlVUlDbGllbnQoKS53aWxsUnVuSmF2YVNjcmlwdEFs
ZXJ0KG1fcGFnZSwgYWxlcnRUZXh0LCB3ZWJGcmFtZSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFT
Y3JpcHRBbGVydCwgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKHdlYkZyYW1lLT5mcmFtZUlEKCksIGFs
ZXJ0VGV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb3JlSVBDOjpPdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCk7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgYWxlcnRUZXh0KSwKKyAg
ICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpOwogfQog
CiBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNTAsMTIgKzI0Niw5IEBAIGJvb2wgV2ViQ2hy
b21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmkKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
VUlDbGllbnQoKS53aWxsUnVuSmF2YVNjcmlwdENvbmZpcm0obV9wYWdlLCBtZXNzYWdlLCB3ZWJG
cmFtZSk7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5K
YXZhU2NyaXB0Q29uZmlybSwgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViRnJhbWUtPmZy
YW1lSUQoKSwgbWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChyZXN1bHQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpO
b1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtKHdl
YkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBh
Z2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2NywxMiArMjYwLDkg
QEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcAogICAgIC8vIE5vdGlm
eSB0aGUgYnVuZGxlIGNsaWVudC4KICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlVUlDbGllbnQo
KS53aWxsUnVuSmF2YVNjcmlwdFByb21wdChtX3BhZ2UsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwg
d2ViRnJhbWUpOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFTY3JpcHRQcm9tcHQsIG1fcGFn
ZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcmVJUEM6OkluKHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvcmVJUEM6Ok91dChyZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQp
KSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZy
YW1lSUQoKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShyZXN1bHQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQogCiAgICAgcmV0dXJuICFyZXN1bHQuaXNOdWxsKCk7CiB9CkBAIC0y
ODIsNyArMjcyLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFN0YXR1c2JhclRleHQoYwog
ICAgIC8vIE5vdGlmeSB0aGUgYnVuZGxlIGNsaWVudC4KICAgICBtX3BhZ2UtPmluamVjdGVkQnVu
ZGxlVUlDbGllbnQoKS53aWxsU2V0U3RhdHVzYmFyVGV4dChtX3BhZ2UsIHN0YXR1c2JhclRleHQp
OwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OlNldFN0YXR1c1RleHQsIG1fcGFnZS0+cGFnZUlEKCksIHN0YXR1c2JhclRl
eHQpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTZXRTdGF0dXNUZXh0KHN0YXR1c2JhclRleHQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZEludGVycnVwdEphdmFT
Y3JpcHQoKQpAQCAtMzQzLDggKzMzMyw4IEBAIFBsYXRmb3JtUGFnZUNsaWVudCBXZWJDaHJvbWVD
bGllbnQ6OnBsYXQKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpjb250ZW50c1NpemVDaGFuZ2VkKEZy
YW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBXZWJGcmFtZSog
d2ViRnJhbWUgPSAgc3RhdGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJDbGllbnQqPihmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpKS0+d2ViRnJhbWUoKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6Q29udGVudHNTaXplQ2hhbmdl
ZCwgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29yZUlQQzo6SW4od2ViRnJhbWUtPmZyYW1lSUQoKSwgc2l6ZSkpOworCisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkNvbnRlbnRzU2l6ZUNoYW5nZWQod2ViRnJhbWUtPmZyYW1lSUQoKSwgc2l6ZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2Nyb2xsUmVjdElu
dG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKQEAgLTM2NSw3
ICszNTUsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsCiAgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
bV9wYWdlLCBoaXRUZXN0UmVzdWx0LCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPiht
b2RpZmllckZsYWdzKSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3Mu
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94
eU1lc3NhZ2U6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LCBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3Jl
SVBDOjpJbihtb2RpZmllckZsYWdzLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1
c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQobW9k
aWZpZXJGbGFncywgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0
KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRU
b29sVGlwKGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVjdGlvbikKQEAgLTM3Niw3ICsz
NjYsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NhY2hlZFRvb2xUaXAgPSB0b29sVGlwOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNldFRv
b2xUaXAsIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fY2FjaGVkVG9vbFRpcCkpOwor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZXRUb29sVGlwKG1fY2FjaGVkVG9vbFRpcCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cHJpbnQoRnJhbWUqKQpAQCAtNDc2LDcgKzQ2
Niw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmlsZXMKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB7CiAjaWYgVVNF
KExBWllfTkFUSVZFX0NVUlNPUikKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0Q3Vyc29yLCBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpJbihjdXJzb3IpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKGN1cnNvciksIG1f
cGFnZS0+cGFnZUlEKCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA2
OTMxNykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJXZWJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNv
dXJjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgpAQCAtMjExLDgg
KzIxMSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3IKICAgICBt
X3BhZ2UtPmFkZFdlYkVkaXRDb21tYW5kKHdlYkNvbW1hbmQtPmNvbW1hbmRJRCgpLCB3ZWJDb21t
YW5kLmdldCgpKTsKICAgICB1aW50MzJfdCBlZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHdlYkNvbW1hbmQtPmNvbW1hbmQoKS0+ZWRpdGluZ0FjdGlvbigpKTsKIAotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpS
ZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbywgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViQ29tbWFuZC0+
Y29tbWFuZElEKCksIGVkaXRBY3Rpb24pKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVnaXN0ZXJFZGl0Q29tbWFu
ZEZvclVuZG8od2ViQ29tbWFuZC0+Y29tbWFuZElEKCksIGVkaXRBY3Rpb24pLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclJl
ZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pCkBAIC0yMjEsNyArMjIwLDcgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFuZEZvcgogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpDbGVhckFsbEVkaXRDb21tYW5k
cywgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSk7CisgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNsZWFyQWxs
RWRpdENvbW1hbmRzKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBib29sIFdlYkVkaXRvckNs
aWVudDo6Y2FuVW5kbygpIGNvbnN0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9u
IDY5MzE3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VDb2RlcnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNl
cnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJTdHJp
bmdQYWlyVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKQEAgLTM4LDcgKzM5LDcg
QEAKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
TmF2aWdhdGlvbkRhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlN
ZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CkBAIC0x
MjUsNyArMTI2LDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUAog
ICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVtb3ZlRnJhbWVG
cm9tSGllcmFyY2h5KHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlm
eSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHksIHdl
YlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVk
QnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkobV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQo
KSk7CisKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUGFyZW50
MygpCkBAIC0yMjMsNyArMjI1LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUod2ViUGFnZSwgbV9m
cmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLCB3ZWJQ
YWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCB1cmwsIEluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2Zy
YW1lLT5mcmFtZUlEKCksIHVybCwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNl
ckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKQEAgLTI5NSw3ICsy
OTcsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0CiAgICAgd2Vi
UGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0
aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLCB3
ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCB1cmwsIElu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwg
dXJsLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3
ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0zMTAsNyArMzEyLDcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZQogICAgIHdlYlBhZ2Ut
PmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUod2Vi
UGFnZSwgdGl0bGUsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQ
cm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQ
YWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlE
KCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgdGl0bGUsIEluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNl
aXZlVGl0bGVGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIHRpdGxlLCBJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7
CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMo
KQpAQCAtMzMxLDcgKzMzMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkQ28KICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZENvbW1p
dExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lLCB3ZWJQYWdl
LT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCByZXNwb25zZS5taW1l
VHlwZSgpLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSksIEluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDb21t
aXRMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCByZXNwb25zZS5taW1lVHlwZSgpLCBQ
bGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSksIEluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtMzQ2LDcgKzM0OCw3IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmEKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRs
ZUxvYWRlckNsaWVudCgpLmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh3
ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vz
cy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLCB3ZWJQYWdlLT5wYWdl
SUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogICAg
IAogICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYg
KFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0
ZW5lcigpKQpAQCAtMzY1LDcgKzM2Nyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkRmEKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRp
ZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZhaWxMb2FkRm9yRnJh
bWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIElu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRGYWlsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBp
ZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExp
c3RlbmVyKCkpCkBAIC0zODQsNyArMzg2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRGaQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCku
ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEp
OwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+
ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUobV9mcmFtZS0+
ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCkBAIC0zOTksNyArNDAxLDcgQEAgdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxl
TG9hZGVyQ2xpZW50KCkuZGlkRmluaXNoTG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVz
ZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaW5p
c2hMb2FkRm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5m
cmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgp
KSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgp
LCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQ
YWdlLT5wYWdlSUQoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9hZCBsaXN0ZW5lciwgbm90
aWZ5IGl0LgogICAgIGlmIChXZWJGcmFtZTo6TG9hZExpc3RlbmVyKiBsb2FkTGlzdGVuZXIgPSBt
X2ZyYW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAgLTQxOCw3ICs0MjAsNyBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVM
b2FkZXJDbGllbnQoKS5kaWRGaXJzdExheW91dEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVz
ZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaXJz
dExheW91dEZvckZyYW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+
ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlE
KCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdl
YlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQpAQCAtNDMzLDcgKzQzNSw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmkKICAgICB3ZWJQYWdlLT5pbmpl
Y3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUg
VUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChX
ZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFt
ZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKG1fZnJhbWUtPmZyYW1l
SUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwg
d2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiBGcmFtZSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoQ3JlYXRlUGFnZSgpCkBAIC01MTQsOCArNTE2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBtX2ZyYW1l
LT5zZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKTsKICAgICBjb25zdCBTdHJpbmcmIHVybCA9
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCk7IC8vIEZJWE1FOiBQYXNzIGVudGlyZSByZXF1ZXN0Lgog
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck1JTUVUeXBlLCB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4obV9m
cmFtZS0+ZnJhbWVJRCgpLCBNSU1FVHlwZSwgdXJsLCBsaXN0ZW5lcklEKSk7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRlY2lkZVBvbGljeUZvck1JTUVUeXBlKG1fZnJhbWUtPmZyYW1lSUQoKSwgTUlNRVR5cGUsIHVy
bCwgbGlzdGVuZXJJRCksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQ
b2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlv
bkFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKQpAQCAtNTM0LDggKzUzNSw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWQKICAgICB1aW50MzJfdCBtb2RpZmll
cnMgPSBtb2RpZmllcnNGb3JOYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb24pOwogICAg
IGludDMyX3QgbW91c2VCdXR0b24gPSBtb3VzZUJ1dHRvbkZvck5hdmlnYXRpb25BY3Rpb24obmF2
aWdhdGlvbkFjdGlvbik7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
LCB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwg
bW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSk7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRl
Y2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmlnYXRp
b25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVySUQpLCB3ZWJQYWdl
LT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9u
LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9uQWN0aW9uLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKQEAgLTU2MCw4ICs1NjAs
NyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgdWludDMy
X3QgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0
aW9uKTsKICAgICBpbnQzMl90IG1vdXNlQnV0dG9uID0gbW91c2VCdXR0b25Gb3JOYXZpZ2F0aW9u
QWN0aW9uKG5hdmlnYXRpb25BY3Rpb24pOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24sIHdlYlBhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmln
YXRpb25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVySUQpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihtX2ZyYW1lLT5mcmFtZUlE
KCksIG5hdmlnYXRpb25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVy
SUQpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmNhbmNlbFBvbGljeUNoZWNrKCkKQEAgLTU5Miw5ICs1OTEsOSBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTCiAKIAogICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBt
X2ZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKTsKKyAgICBTdHJpbmdQYWlyVmVj
dG9yIHZhbHVlc1ZlY3Rvcih2YWx1ZXMpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OldpbGxTdWJtaXRGb3JtLCB3ZWJQ
YWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3VyY2VGcmFtZS0+ZnJhbWVJRCgp
LCB2YWx1ZXMsIGxpc3RlbmVySUQsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVz
ZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaWxsU3VibWl0Rm9ybShtX2ZyYW1lLT5mcmFt
ZUlEKCksIHNvdXJjZUZyYW1lLT5mcmFtZUlEKCksIHZhbHVlc1ZlY3RvciwgbGlzdGVuZXJJRCwg
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFn
ZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZExvYWRNYWluUmVzb3VyY2UoRG9jdW1lbnRMb2FkZXIqKQpAQCAtNjMwLDIxICs2MjksMjIgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlRXN0aQogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCiB7CiAgICAgaWYg
KFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRTdGFy
dFByb2dyZXNzLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSk7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRTdGFydFByb2dyZXNzKCksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0
aW9uKCkKIHsKICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewog
ICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5wcm9ncmVzcygp
LT5lc3RpbWF0ZWRQcm9ncmVzcygpOwotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ2hhbmdlUHJvZ3Jlc3MsIHdl
YlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihwcm9ncmVzcykpOworICAgICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkQ2hhbmdlUHJvZ3Jlc3MocHJvZ3Jlc3MpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CisKICAgICB9
CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90
aWZpY2F0aW9uKCkKIHsKICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRpZEZpbmlzaFByb2dyZXNzLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29y
ZUlQQzo6SW4oKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hQcm9ncmVzcygpLCB3ZWJQYWdl
LT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFt
ZURvY3VtZW50UmVhZHkoYm9vbCkKQEAgLTk0OCw3ICs5NDgsNyBAQCBQYXNzUmVmUHRyPEZyYW1l
PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6CiAgICAgUmVmUHRyPFdlYkZyYW1lPiBzdWJmcmFtZSA9
IFdlYkZyYW1lOjpjcmVhdGVTdWJmcmFtZSh3ZWJQYWdlLCBuYW1lLCBvd25lckVsZW1lbnQpOwog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSSBwcm9jZXNzIHRoYXQgc3ViZnJhbWUgaGFzIGJlZW4gYWRk
ZWQuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZENyZWF0ZVN1YkZyYW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQ
Qzo6SW4oc3ViZnJhbWUtPmZyYW1lSUQoKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDcmVhdGVTdWJGcmFt
ZShzdWJmcmFtZS0+ZnJhbWVJRCgpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogCiAgICAgRnJhbWUq
IGNvcmVTdWJmcmFtZSA9IHN1YmZyYW1lLT5jb3JlRnJhbWUoKTsKIApJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNw
cAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIK
LSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hpc3RvcnlJdGVt
Lmg+CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRk
SXRlbShQYQogCiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gcHJwSXRlbTsKICAgICB1
aW50NjRfdCBpdGVtSUQgPSBoaXN0b3J5SXRlbVRvSURNYXAoKS5nZXQoaXRlbSk7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkJhY2tGb3J3YXJkQWRkSXRlbSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oaXRlbUlE
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQWRkSXRlbShpdGVtSUQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Z29CYWNrKCkKQEAgLTEz
NSwxNiArMTM1LDE2IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmdvRm9yd2FyZCgK
IHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVt
KQogewogICAgIHVpbnQ2NF90IGl0ZW1JRCA9IGhpc3RvcnlJdGVtVG9JRE1hcCgpLmdldChpdGVt
KTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6QmFja0ZvcndhcmRHb1RvSXRlbSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQ
Qzo6SW4oaXRlbUlEKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkR29Ub0l0ZW0oaXRlbUlEKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisKIH0KIAogSGlzdG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlz
dFByb3h5OjpiYWNrSXRlbSgpCiB7CiAgICAgdWludDY0X3QgYmFja0l0ZW1JRCA9IDA7Ci0gICAg
aWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkQmFja0l0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6
OkluKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcmVJUEM6Ok91dChiYWNrSXRlbUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0
KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tJdGVtKCksCisgICAgICAg
ICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrSXRlbTo6UmVwbHko
YmFja0l0ZW1JRCksCisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29u
bmVjdGlvbjo6Tm9UaW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE1
OCwxMCArMTU4LDkgQEAgSGlzdG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpiYQog
SGlzdG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpjdXJyZW50SXRlbSgpCiB7CiAg
ICAgdWludDY0X3QgY3VycmVudEl0ZW1JRCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3
YXJkQ3VycmVudEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChj
dXJyZW50SXRlbUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICgh
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpCYWNrRm9yd2FyZEN1cnJlbnRJdGVtKCksCisgICAgICAgICAgICAgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRDdXJyZW50SXRlbTo6UmVwbHkoY3VycmVudEl0
ZW1JRCksCisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVjdGlv
bjo6Tm9UaW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE3NSwxMCAr
MTc0LDkgQEAgSGlzdG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpjdQogSGlzdG9y
eUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJkSXRlbSgpCiB7CiAgICAgdWlu
dDY0X3QgZm9yd2FyZEl0ZW1JRCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkRm9y
d2FyZEl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChmb3J3YXJk
SXRlbUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtKCksCisgICAgICAgICAgICAgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJkSXRlbTo6UmVwbHkoZm9yd2FyZEl0ZW1JRCks
CisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9U
aW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE5MiwxMCArMTkwLDkg
QEAgSGlzdG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpmbwogSGlzdG9yeUl0ZW0q
IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtQXRJbmRleChpbnQgaXRlbUluZGV4KQogewog
ICAgIHVpbnQ2NF90IGl0ZW1JRCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkSXRl
bUF0SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGl0ZW1JbmRleCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91
dChpdGVtSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwKKyAgICAgICAgICAgICBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OjpSZXBseShpdGVt
SUQpLAorICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246
Ok5vVGltZW91dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yMzksMTAgKzIz
Niw5IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnNldEVuYWJsZWQKIGludCBXZWJC
YWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0xpc3RDb3VudCgpCiB7CiAgICAgaW50IGJhY2tMaXN0
Q291bnQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFn
ZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChiYWNrTGlzdENvdW50KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9y
d2FyZEJhY2tMaXN0Q291bnQoKSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQ6OlJlcGx5KGJhY2tMaXN0Q291bnQpLAorICAgICAg
ICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkp
IHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yNTIsMTAgKzI0OCw5IEBAIGludCBX
ZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0xpc3RDb3UKIGludCBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6Zm9yd2FyZExpc3RDb3VudCgpCiB7CiAgICAgaW50IGZvcndhcmRMaXN0Q291bnQg
PSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3lu
YyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+
cGFnZUlEKCksIENvcmVJUEM6OkluKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChmb3J3YXJkTGlzdENvdW50KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9y
d2FyZEZvcndhcmRMaXN0Q291bnQoKSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQ6OlJlcGx5KGZvcndhcmRMaXN0Q291bnQp
LAorICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5v
VGltZW91dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQAogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAi
V2ViUHJlZmVyZW5jZXNTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTE0Miw3
ICsxNDIsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAgICAg
U2V0dGluZ3M6OnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoMC4wMDQpOwogCiAgICAgbV9tYWluRnJh
bWUgPSBXZWJGcmFtZTo6Y3JlYXRlTWFpbkZyYW1lKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDcmVhdGVN
YWluRnJhbWUsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihtX21haW5GcmFtZS0+ZnJhbWVJRCgpKSk7
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZENyZWF0ZU1haW5GcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgpKSwg
bV9wYWdlSUQpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHdlYlBhZ2VDb3VudGVyLmluY3JlbWVu
dCgpOwpAQCAtMjQ2LDEwICsyNDYsMTAgQEAgdm9pZCBXZWJQYWdlOjpjaGFuZ2VBY2NlbGVyYXRl
ZENvbXBvc2l0aQogICAgIC8vIFRlbGwgdGhlIFVJIHByb2Nlc3MgdGhhdCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBjaGFuZ2VkLiBJdCBtYXkgcmVzcG9uZCBieSBjaGFuZ2luZwogICAgIC8vIGRy
YXdpbmcgYXJlYSB0eXBlcy4KICAgICBEcmF3aW5nQXJlYTo6RHJhd2luZ0FyZWFJbmZvIG5ld0Ry
YXdpbmdBcmVhSW5mbzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
Z2VJRCwgQ29yZUlQQzo6SW4oY29tcG9zaXRpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KG5ld0RyYXdpbmdBcmVhSW5mbyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBD
OjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKGNvbXBvc2l0aW5nKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZzo6UmVwbHkobmV3RHJhd2lu
Z0FyZWFJbmZvKSwKKyAgICAgICAgbV9wYWdlSUQsIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGlt
ZW91dCk7CiAgICAgCiAgICAgaWYgKG5ld0RyYXdpbmdBcmVhSW5mby50eXBlICE9IGRyYXdpbmdB
cmVhKCktPmluZm8oKS50eXBlKSB7CiAgICAgICAgIG1fZHJhd2luZ0FyZWEgPSAwOwpAQCAtMjYz
LDEwICsyNjMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpCiB2
b2lkIFdlYlBhZ2U6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CiAgICAgY2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXIp
OwotICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBtX2RyYXdpbmdB
cmVhLT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihsYXllcik7Ci0jZW5kaWYKIH0KIAogdm9pZCBX
ZWJQYWdlOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQpAQCAtMjk3LDcgKzI5NCw3
IEBAIHZvaWQgV2ViUGFnZTo6dHJ5Q2xvc2UoKQogCiB2b2lkIFdlYlBhZ2U6OnNlbmRDbG9zZSgp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkNsb3NlUGFnZSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKCkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDbG9zZVBhZ2UoKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmxvYWRVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpCkBAIC00ODEsOCArNDc4LDcgQEAgdm9pZCBXZWJQYWdlOjptb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRQogICAgIEN1cnJlbnRFdmVudCBjdXJyZW50RXZlbnQobW91
c2VFdmVudCk7CiAKICAgICBib29sIGhhbmRsZWQgPSBoYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZl
bnQsIG1fcGFnZS5nZXQoKSk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZUV2ZW50LCBtX3BhZ2VJRCwg
Q29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1vdXNlRXZlbnQudHlwZSgpKSwgaGFu
ZGxlZCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG1vdXNlRXZlbnQudHlwZSgpKSwgaGFuZGxlZCksIG1fcGFnZUlEKTsKIH0KIAogc3RhdGljIGJv
b2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBQYWdl
KiBwYWdlKQpAQCAtNTAwLDcgKzQ5Niw3IEBAIHZvaWQgV2ViUGFnZTo6d2hlZWxFdmVudChjb25z
dCBXZWJXaGVlbEUKICAgICBDdXJyZW50RXZlbnQgY3VycmVudEV2ZW50KHdoZWVsRXZlbnQpOwog
CiAgICAgYm9vbCBoYW5kbGVkID0gaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBtX3BhZ2Uu
Z2V0KCkpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQ
YWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlRXZlbnQsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2hlZWxFdmVudC50eXBlKCkpLCBoYW5kbGVkKSk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2FzdDx1aW50MzJfdD4od2hlZWxFdmVudC50
eXBlKCkpLCBoYW5kbGVkKSwgbV9wYWdlSUQpOwogfQogCiBzdGF0aWMgYm9vbCBoYW5kbGVLZXlF
dmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50LCBQYWdlKiBwYWdlKQpA
QCAtNTE5LDIxICs1MTUsMjEgQEAgdm9pZCBXZWJQYWdlOjprZXlFdmVudChjb25zdCBXZWJLZXli
b2FyZAogICAgIGlmICghaGFuZGxlZCkKICAgICAgICAgaGFuZGxlZCA9IHBlcmZvcm1EZWZhdWx0
QmVoYXZpb3JGb3JLZXlFdmVudChrZXlib2FyZEV2ZW50KTsKIAotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZl
RXZlbnQsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oa2V5Ym9h
cmRFdmVudC50eXBlKCkpLCBoYW5kbGVkKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChz
dGF0aWNfY2FzdDx1aW50MzJfdD4oa2V5Ym9hcmRFdmVudC50eXBlKCkpLCBoYW5kbGVkKSwgbV9w
YWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnZhbGlkYXRlTWVudUl0ZW0oY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSkKIHsKICAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNlOwotICAgIGludCBz
dGF0ZSA9IDA7CisgICAgaW50MzJfdCBzdGF0ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGZy
YW1lKSB7CiAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKGNvbW1hbmROYW1lKTsKICAgICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRlKCk7
CiAgICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlz
RW5hYmxlZCgpOwogICAgIH0KLSAgICAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkVmFsaWRhdGVNZW51SXRlbSwgbV9w
YWdlSUQsIENvcmVJUEM6OkluKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKSk7CisKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkVmFsaWRhdGVNZW51SXRlbShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0
ZSksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKQEAgLTU1Nyw3ICs1NTMsNyBAQCB2b2lkIFdlYlBhZ2U6
OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFCiAKICAgICBib29sIGhhbmRsZWQgPSBoYW5kbGVU
b3VjaEV2ZW50KHRvdWNoRXZlbnQsIG1fcGFnZS5nZXQoKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2
ZUV2ZW50LCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdWNo
RXZlbnQudHlwZSgpKSwgaGFuZGxlZCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHRvdWNoRXZlbnQudHlwZSgpKSwgaGFuZGxlZCksIG1fcGFnZUlE
KTsKIH0KICNlbmRpZgogCkBAIC02MTIsNyArNjA4LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNl
aXZlUG9saWN5RGVjaXNpb24odQogCiB2b2lkIFdlYlBhZ2U6OnNob3coKQogewotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpT
aG93UGFnZSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGFnZSgp
LCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0
IFN0cmluZyYgY3VzdG9tVXNlckFnZW50KQpAQCAtNjUzLDEzICs2NDksMTMgQEAgdm9pZCBXZWJQ
YWdlOjpydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoYwogICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUg
PSBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlw
dCwgdHJ1ZSkuanNWYWx1ZSgpOwogICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSB1c3RyaW5nVG9T
dHJpbmcocmVzdWx0VmFsdWUudG9TdHJpbmcobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygp
KSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFn
ZVByb3h5TWVzc2FnZTo6RGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lLCBtX3BhZ2VJRCwgQ29y
ZUlQQzo6SW4ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSk7CisgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJ1bkph
dmFTY3JpcHRJbk1haW5GcmFtZShyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24o
dWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVuZGVy
VHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0UmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb24sIG1fcGFnZUlELCBDb3JlSVBDOjpJbihyZXN1bHRTdHJpbmcs
IGNhbGxiYWNrSUQpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVz
ZW50YXRpb24ocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lk
IFdlYlBhZ2U6OmdldFNvdXJjZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCkBAIC02NjcsNyArNjYzLDggQEAgdm9pZCBXZWJQYWdlOjpnZXRTb3VyY2VGb3JG
cmFtZSh1aW50NjRfdAogICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CiAgICAgaWYgKFdlYkZyYW1l
KiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpKQogICAgICAg
IHJlc3VsdFN0cmluZyA9IGZyYW1lLT5zb3VyY2UoKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0U291cmNlRm9y
RnJhbWUsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKTsK
KworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRHZXRTb3VyY2VGb3JGcmFtZShyZXN1bHRTdHJpbmcsIGNhbGxiYWNr
SUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2Uo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70117</attachid>
            <date>2010-10-07 10:51:37 -0700</date>
            <delta_ts>2010-10-07 11:03:02 -0700</delta_ts>
            <desc>Updated.</desc>
            <filename>samNewTest.patch</filename>
            <type>text/plain</type>
            <size>128846</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxMSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTAtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0
ZSB0aGUgbWVzc2FnZXMgc2VudCB0byB0aGUgV2ViUGFnZVByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzOQorCisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcm86CisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudHMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBD
L0hhbmRsZU1lc3NhZ2UuaDoKKyAgICAgICAgKENvcmVJUEM6OmhhbmRsZU1lc3NhZ2UpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlZ2lz
dGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6
CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUNsaWVudDo6
d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiB3aW4vV2Vi
S2l0Mi52Y3Byb2o6CisKIDIwMTAtMTAtMDYgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvRGVyaXZlZFNvdXJj
ZXMubWFrZQkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9QbHVnaW5zIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvV2ViUGFnZSBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2VzcyBc
CiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvUGx1Z2lucyBcCiAjCiAKQEAgLTEyLDYgKzEzLDcg
QEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQ
bHVnaW5Qcm94eSBcCiAgICAgV2ViUGFnZSBcCisgICAgV2ViUGFnZVByb3h5IFwKICAgICBXZWJQ
cm9jZXNzIFwKICAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbiBcCiAjCkluZGV4OiBXZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBy
bwkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNiArNTIsMTggQEAgbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvci50YXJn
ZXQgICA9ICQkewogZ2VuZXJhdGVkX2ZpbGVzLmRlcGVuZHMgICAgICAgICAgICArPSBtZXNzYWdl
cmVjZWl2ZXJfZ2VuZXJhdG9yCiBRTUFLRV9FWFRSQV9UQVJHRVRTICAgICAgICAgICAgICAgICs9
IG1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IKIAorcGFnZXByb3h5bWVzc2FnZWhlYWRlcl9nZW5l
cmF0b3IuY29tbWFuZHMgPSBweXRob24gJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1NjcmlwdHMv
Z2VuZXJhdGUtbWVzc2FnZXMtaGVhZGVyLnB5ICAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiA+ICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dl
bmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdlcy5oCitwYWdlcHJveHltZXNzYWdlaGVhZGVyX2dl
bmVyYXRvci5kZXBlbmRzICA9ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9TY3JpcHRzL2dlbmVy
YXRlLW1lc3NhZ2VzLWhlYWRlci5weSAkJHtTUkNfUk9PVF9ESVJ9L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCitwYWdlcHJveHltZXNzYWdlaGVhZGVyX2dl
bmVyYXRvci50YXJnZXQgICA9ICQke09VVFBVVF9ESVJ9L1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgKK2dlbmVyYXRlZF9maWxlcy5kZXBlbmRzICAgICAgICAgICAgICAg
ICArPSBwYWdlcHJveHltZXNzYWdlaGVhZGVyX2dlbmVyYXRvcgorUU1BS0VfRVhUUkFfVEFSR0VU
UyAgICAgICAgICAgICAgICAgICAgICs9IHBhZ2Vwcm94eW1lc3NhZ2VoZWFkZXJfZ2VuZXJhdG9y
CisKK3BhZ2Vwcm94eW1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IuY29tbWFuZHMgPSBweXRob24g
JCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZl
ci5weSAgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gPiAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUGFnZVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorcGFnZXByb3h5bWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvci5kZXBl
bmRzICA9ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2Ut
cmVjZWl2ZXIucHkgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4KK3BhZ2Vwcm94eW1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IudGFyZ2V0
ICAgPSAkJHtPVVRQVVRfRElSfS9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQYWdlUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCitnZW5lcmF0ZWRfZmlsZXMuZGVwZW5kcyAgICAgICAgICAgICAgICAgICAr
PSBwYWdlcHJveHltZXNzYWdlcmVjZWl2ZXJfZ2VuZXJhdG9yCitRTUFLRV9FWFRSQV9UQVJHRVRT
ICAgICAgICAgICAgICAgICAgICAgICArPSBwYWdlcHJveHltZXNzYWdlcmVjZWl2ZXJfZ2VuZXJh
dG9yCisKIHByb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5jb21tYW5kcyA9IHB5dGhvbiAk
JHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIu
cHkgICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4gPiAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQvV2ViUHJvY2Vzc01lc3NhZ2Vz
LmgKIHByb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5kZXBlbmRzICA9ICQke1NSQ19ST09U
X0RJUn0vV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weSAkJHtTUkNf
Uk9PVF9ESVJ9L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiBwcm9j
ZXNzbWVzc2FnZWhlYWRlcl9nZW5lcmF0b3IudGFyZ2V0ICAgPSAkJHtPVVRQVVRfRElSfS9XZWJL
aXQyL2dlbmVyYXRlZC9XZWJQcm9jZXNzTWVzc2FnZXMuaApJbmRleDogV2ViS2l0Mi9XZWJLaXQy
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA2OTMxMSkK
KysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxMCArMTQxLDEy
IEBAIERFRklORVMgKz0gQlVJTERJTkdfUVRfXwogCiBXRUJLSVQyX0dFTkVSQVRFRF9IRUFERVJT
ID0gXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQYWdlTWVzc2FnZXMu
aCBcCisgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3Nh
Z2VzLmggXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQcm9jZXNzTWVz
c2FnZXMuaAogCiBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTID0gXAogICAgICQkT1VUUFVUX0RJ
Ui9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQYWdlTWVzc2FnZVJlY2VpdmVyLmNwcCBcCisgICAgJCRP
VVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcAogCiBIRUFERVJTICs9IFwKQEAgLTE3Niw3ICsxNzgsNiBAQCBIRUFERVJT
ICs9IFwKICAgICBTaGFyZWQvQVBJL2MvV0tVUkxSZXNwb25zZS5oIFwKICAgICBTaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCBcCiAgICAgU2hhcmVkL0NvcmVJ
UENTdXBwb3J0L0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaCBcCi0gICAgU2hhcmVkL0Nv
cmVJUENTdXBwb3J0L1dlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIFwKICAgICBTaGFyZWQvQ2Fj
aGVNb2RlbC5oIFwKICAgICBTaGFyZWQvRHJhd2luZ0FyZWFCYXNlLmggXAogICAgIFNoYXJlZC9J
bW11dGFibGVBcnJheS5oIFwKQEAgLTE4NSw2ICsxODYsNyBAQCBIRUFERVJTICs9IFwKICAgICBT
aGFyZWQvTXV0YWJsZURpY3Rpb25hcnkuaCBcCiAgICAgU2hhcmVkL05hdGl2ZVdlYktleWJvYXJk
RXZlbnQuaCBcCiAgICAgU2hhcmVkL05vdEltcGxlbWVudGVkLmggXAorICAgIFNoYXJlZC9TdHJp
bmdQYWlyVmVjdG9yLmggXAogICAgIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaCBcCiAgICAgU2hh
cmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJlZC9xdC9VcGRhdGVD
aHVuay5oIFwKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9IYW5kbGVNZXNzYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2UuaAko
cmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2Fn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsOCBAQAogCiBuYW1lc3BhY2UgQ29yZUlQQyB7
CiAKKy8vIERpc3BhdGNoIGZ1bmN0aW9ucyB3aXRoIG5vIHJlcGx5IGFyZ3VtZW50cy4KKwogdGVt
cGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CiB2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihj
b25zdCBBcmd1bWVudHMwJiwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKIHsKQEAgLTUxLDYgKzUz
LDIwIEBAIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czcKICAgICAob2Jq
ZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1
bWVudDMsIGFyZ3MuYXJndW1lbnQ0LCBhcmdzLmFyZ3VtZW50NSwgYXJncy5hcmd1bWVudDYsIGFy
Z3MuYXJndW1lbnQ3KTsKIH0KIAorLy8gRGlzcGF0Y2ggZnVuY3Rpb25zIHdpdGggcmVwbHkgYXJn
dW1lbnRzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUjE+
Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMwJiwgQXJndW1lbnRzMTxS
MT4mIHJlcGx5QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4q
ZnVuY3Rpb24pKHJlcGx5QXJncy5hcmd1bWVudDEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
LCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUjEsIHR5cGVuYW1lIFIyPgordm9pZCBjYWxsTWVtYmVy
RnVuY3Rpb24oY29uc3QgQXJndW1lbnRzMCYsIEFyZ3VtZW50czI8UjEsIFIyPiYgcmVwbHlBcmdz
LCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbikocmVw
bHlBcmdzLmFyZ3VtZW50MSwgcmVwbHlBcmdzLmFyZ3VtZW50Mik7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMT4KIHZvaWQgY2FsbE1lbWJlckZ1bmN0
aW9uKGNvbnN0IEFyZ3VtZW50czE8UDE+JiBhcmdzLCBBcmd1bWVudHMwJiwgQyogb2JqZWN0LCBN
RiBmdW5jdGlvbikKIHsKQEAgLTYzLDE2ICs3OSw4MSBAQCB2b2lkIGNhbGxNZW1iZXJGdW5jdGlv
bihjb25zdCBBcmd1bWVudHMxCiAgICAgKG9iamVjdC0+KmZ1bmN0aW9uKShhcmdzLmFyZ3VtZW50
MSwgcmVwbHlBcmdzLmFyZ3VtZW50MSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDI+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlv
bihjb25zdCBBcmd1bWVudHMyPFAxLCBQMj4mIGFyZ3MsIEFyZ3VtZW50czAmLCBDKiBvYmplY3Qs
IE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEs
IGFyZ3MuYXJndW1lbnQyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUjE+Cit2b2lkIGNhbGxNZW1iZXJG
dW5jdGlvbihjb25zdCBBcmd1bWVudHMyPFAxLCBQMj4mIGFyZ3MsIEFyZ3VtZW50czE8UjE+JiBy
ZXBseUFyZ3MsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCit7CisgICAgKG9iamVjdC0+KmZ1bmN0
aW9uKShhcmdzLmFyZ3VtZW50MSwgYXJncy5hcmd1bWVudDIsIHJlcGx5QXJncy5hcmd1bWVudDEp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUjE+Cit2b2lkIGNhbGxNZW1iZXJGdW5j
dGlvbihjb25zdCBBcmd1bWVudHMzPFAxLCBQMiwgUDM+JiBhcmdzLCBBcmd1bWVudHMxPFIxPiYg
cmVwbHlBcmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5j
dGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBhcmdzLmFyZ3VtZW50MywgcmVw
bHlBcmdzLmFyZ3VtZW50MSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1G
LCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlw
ZW5hbWUgUjE+CiB2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHM0PFAxLCBQ
MiwgUDMsIFA0PiYgYXJncywgQXJndW1lbnRzMTxSMT4mIHJlcGx5QXJncywgQyogb2JqZWN0LCBN
RiBmdW5jdGlvbikKIHsKICAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBh
cmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3MuYXJndW1lbnQ0LCByZXBseUFyZ3Mu
YXJndW1lbnQxKTsKIH0KIAorLy8gVmFyaWFkaWMgZGlzcGF0Y2ggZnVuY3Rpb25zLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNv
bnN0IEFyZ3VtZW50czAmLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2Jq
ZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3VtZW50RGVj
b2Rlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQ
MT4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czE8UDE+JiBhcmdzLCBB
cmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikK
K3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmd1bWVudERlY29k
ZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIFAyPgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzMjxQ
MSwgUDI+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2JqZWN0
LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQx
LCBhcmdzLmFyZ3VtZW50MiwgYXJndW1lbnREZWNvZGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDM+
Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMzPFAxLCBQMiwgUDM+JiBh
cmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5j
dGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFy
Z3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3VtZW50RGVjb2Rlcik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIFAzLCB0eXBlbmFtZSBQND4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3Vt
ZW50czQ8UDEsIFAyLCBQMywgUDQ+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVj
b2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24p
KGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3MuYXJn
dW1lbnQ0LCBhcmd1bWVudERlY29kZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBl
bmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUg
UDQsIHR5cGVuYW1lIFA1Pgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRz
NTxQMSwgUDIsIFAzLCBQNCwgUDU+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVj
b2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24p
KGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3MuYXJn
dW1lbnQ0LCBhcmdzLmFyZ3VtZW50NSwgYXJndW1lbnREZWNvZGVyKTsKK30KKyAgICAKK3RlbXBs
YXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIFA2Pgordm9pZCBj
YWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzNjxQMSwgUDIsIFAzLCBQNCwgUDUsIFA2
PiYgYXJncywgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29kZXIsIEMqIG9iamVjdCwgTUYg
ZnVuY3Rpb24pCit7CisgICAgKG9iamVjdC0+KmZ1bmN0aW9uKShhcmdzLmFyZ3VtZW50MSwgYXJn
cy5hcmd1bWVudDIsIGFyZ3MuYXJndW1lbnQzLCBhcmdzLmFyZ3VtZW50NCwgYXJncy5hcmd1bWVu
dDUsIGFyZ3MuYXJndW1lbnQ2LCBhcmd1bWVudERlY29kZXIpOworfQorCisKKy8vIE1haW4gZGlz
cGF0Y2ggZnVuY3Rpb25zCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GPgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNv
ZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQogewotICAgIHR5cGVuYW1lIFQ6OlZhbHVlVHlw
ZSBhcmd1bWVudHM7CisgICAgdHlwZW5hbWUgVDo6RGVjb2RlVHlwZTo6VmFsdWVUeXBlIGFyZ3Vt
ZW50czsKICAgICBpZiAoIWFyZ3VtZW50RGVjb2Rlci0+ZGVjb2RlKGFyZ3VtZW50cykpCiAgICAg
ICAgIHJldHVybjsKICAgICBjYWxsTWVtYmVyRnVuY3Rpb24oYXJndW1lbnRzLCBvYmplY3QsIGZ1
bmN0aW9uKTsKQEAgLTgxLDcgKzE2Miw3IEBAIHZvaWQgaGFuZGxlTWVzc2FnZShBcmd1bWVudERl
Y29kZXIqIGFyZ3UKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1G
Pgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBB
cmd1bWVudEVuY29kZXIqIHJlcGx5RW5jb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKIHsK
LSAgICB0eXBlbmFtZSBUOjpWYWx1ZVR5cGUgYXJndW1lbnRzOworICAgIHR5cGVuYW1lIFQ6OkRl
Y29kZVR5cGU6OlZhbHVlVHlwZSBhcmd1bWVudHM7CiAgICAgaWYgKCFhcmd1bWVudERlY29kZXIt
PmRlY29kZShhcmd1bWVudHMpKQogICAgICAgICByZXR1cm47CiAKQEAgLTkwLDYgKzE3MSwxNSBA
QCB2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVyKiBhcmd1CiAgICAgcmVwbHlFbmNv
ZGVyLT5lbmNvZGUocmVwbHlBcmd1bWVudHMpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KK3ZvaWQgaGFuZGxlTWVzc2FnZVZhcmlhZGljKEFyZ3Vt
ZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQorewor
ICAgIHR5cGVuYW1lIFQ6OkRlY29kZVR5cGU6OlZhbHVlVHlwZSBhcmd1bWVudHM7CisgICAgaWYg
KCFhcmd1bWVudERlY29kZXItPmRlY29kZShhcmd1bWVudHMpKQorICAgICAgICByZXR1cm47Cisg
ICAgY2FsbE1lbWJlckZ1bmN0aW9uKGFyZ3VtZW50cywgYXJndW1lbnREZWNvZGVyLCBvYmplY3Qs
IGZ1bmN0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gSGFu
ZGxlTWVzc2FnZV9oCkluZGV4OiBXZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNp
b24gNjkzMTEpCisrKyBXZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBjbGFzcyBNZXNzYWdlUmVjZWl2ZXIob2JqZWN0KToK
ICAgICBkZWYgaXRlcnBhcmFtZXRlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiAocGFyYW1ldGVy
IGZvciBtZXNzYWdlIGluIHNlbGYubWVzc2FnZXMgZm9yIHBhcmFtZXRlciBpbiBtZXNzYWdlLnBh
cmFtZXRlcnMpCiAKKyAgICBkZWYgaXRlcnJlcGx5cGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIChyZXBseV9wYXJhbWV0ZXIgZm9yIG1lc3NhZ2UgaW4gc2VsZi5tZXNzYWdlcyBmb3Ig
cmVwbHlfcGFyYW1ldGVyIGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycykKKwogICAgIEBjbGFz
c21ldGhvZAogICAgIGRlZiBwYXJzZShjbHMsIGZpbGUpOgogICAgICAgICBkZXN0aW5hdGlvbiA9
IE5vbmUKQEAgLTEwNyw2ICsxMTAsMTAgQEAgY2xhc3MgTWVzc2FnZShvYmplY3QpOgogICAgICAg
ICBpZiBzZWxmLnJlcGx5X3BhcmFtZXRlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxm
LmRlbGF5ZWQgPSBkZWxheWVkCiAgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCisg
ICAgICAgIGlmIGxlbihzZWxmLnBhcmFtZXRlcnMpICE9IDA6CisgICAgICAgICAgICBzZWxmLmlz
X3ZhcmlhZGljID0gcGFyYW1ldGVyX3R5cGVfaXNfdmFyaWFkaWMoc2VsZi5wYXJhbWV0ZXJzWy0x
XS50eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pc192YXJpYWRpYyA9IEZh
bHNlCiAKICAgICBkZWYgaWQoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNJRCcgJSBzZWxmLm5h
bWUKQEAgLTE0MCw2ICsxNDcsMTMgQEAgZGVmIG1lc3NhZ2VzX3RvX2tpbmRfZW51bShtZXNzYWdl
cyk6CiAgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQogCiAKK2RlZiBwYXJhbWV0ZXJfdHlwZV9p
c192YXJpYWRpYyh0eXBlKToKKyAgICB2YXJpYWRpY190eXBlcyA9IGZyb3plbnNldChbCisgICAg
ICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJywKKyAgICBdKQor
CisgICAgcmV0dXJuIHR5cGUgaW4gdmFyaWFkaWNfdHlwZXMKKwogZGVmIGZ1bmN0aW9uX3BhcmFt
ZXRlcl90eXBlKHR5cGUpOgogICAgICMgRG9uJ3QgdXNlIHJlZmVyZW5jZXMgZm9yIGJ1aWx0LWlu
IHR5cGVzLgogICAgIGJ1aWx0aW5fdHlwZXMgPSBmcm96ZW5zZXQoWwpAQCAtMTUwLDYgKzE2NCwx
MCBAQCBkZWYgZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUodHlwZSk6CiAgICAgICAgICd1aW50MTZf
dCcsCiAgICAgICAgICd1aW50MzJfdCcsCiAgICAgICAgICd1aW50NjRfdCcsCisgICAgICAgICdp
bnQ4X3QnLAorICAgICAgICAnaW50MTZfdCcsCisgICAgICAgICdpbnQzMl90JywKKyAgICAgICAg
J2ludDY0X3QnLAogICAgIF0pCiAKICAgICBpZiB0eXBlIGluIGJ1aWx0aW5fdHlwZXM6CkBAIC0x
NzIsMTAgKzE5MCwxMyBAQCBkZWYgYXJndW1lbnRzX3R5cGUocGFyYW1ldGVycywgcGFyYW1ldGVy
CiBkZWYgYmFzZV9jbGFzcyhtZXNzYWdlKToKICAgICByZXR1cm4gYXJndW1lbnRzX3R5cGUobWVz
c2FnZS5wYXJhbWV0ZXJzLCBmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSkKIAotCiBkZWYgcmVwbHlf
dHlwZShtZXNzYWdlKToKICAgICByZXR1cm4gYXJndW1lbnRzX3R5cGUobWVzc2FnZS5yZXBseV9w
YXJhbWV0ZXJzLCByZXBseV9wYXJhbWV0ZXJfdHlwZSkKIAorZGVmIGRlY29kZV90eXBlKG1lc3Nh
Z2UpOgorICAgIGlmIG1lc3NhZ2UuaXNfdmFyaWFkaWM6CisgICAgICAgIHJldHVybiBhcmd1bWVu
dHNfdHlwZShtZXNzYWdlLnBhcmFtZXRlcnNbOi0xXSwgcmVwbHlfcGFyYW1ldGVyX3R5cGUpCisg
ICAgcmV0dXJuIGJhc2VfY2xhc3MobWVzc2FnZSkKIAogZGVmIGRlbGF5ZWRfcmVwbHlfdHlwZSht
ZXNzYWdlKToKICAgICByZXR1cm4gYXJndW1lbnRzX3R5cGUobWVzc2FnZS5yZXBseV9wYXJhbWV0
ZXJzLCBmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSkKQEAgLTE4OSw2ICsyMTAsOCBAQCBkZWYgbWVz
c2FnZV90b19zdHJ1Y3RfZGVjbGFyYXRpb24obWVzc2FnCiAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IHN0YXRpYyBjb25zdCBLaW5kIG1lc3NhZ2VJRCA9ICVzO1xuJyAlIG1lc3NhZ2UuaWQoKSkKICAg
ICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZToKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIHR5cGVkZWYgJXMgUmVwbHk7XG4nICUgcmVwbHlfdHlwZShtZXNzYWdlKSkKKwor
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICB0eXBlZGVmICVzIERlY29kZVR5cGU7XG4nICUgZGVjb2Rl
X3R5cGUobWVzc2FnZSkpCiAgICAgaWYgbGVuKGZ1bmN0aW9uX3BhcmFtZXRlcnMpOgogICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgJXMlcyglcyknICUgKGxlbihmdW5jdGlvbl9wYXJhbWV0ZXJz
KSA9PSAxIGFuZCAnZXhwbGljaXQgJyBvciAnJywgbWVzc2FnZS5uYW1lLCAnLCAnLmpvaW4oWycg
Jy5qb2luKHgpIGZvciB4IGluIGZ1bmN0aW9uX3BhcmFtZXRlcnNdKSkpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJ1xuICAgICAgICA6ICVzKCVzKVxuJyAlIChiYXNlX2NsYXNzKG1lc3NhZ2UpLCAn
LCAnLmpvaW4oW3hbMV0gZm9yIHggaW4gZnVuY3Rpb25fcGFyYW1ldGVyc10pKSkKQEAgLTI5OSw5
ICszMjIsMTMgQEAgZGVmIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpOgogCiAK
IGRlZiBhc3luY19jYXNlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSk6CisgICAgZGlzcGF0
Y2hfZnVuY3Rpb24gPSAnaGFuZGxlTWVzc2FnZSc7CisgICAgaWYgbWVzc2FnZS5pc192YXJpYWRp
YzoKKyAgICAgICAgZGlzcGF0Y2hfZnVuY3Rpb24gKz0gJ1ZhcmlhZGljJworCiAgICAgcmVzdWx0
ID0gW10KICAgICByZXN1bHQuYXBwZW5kKCcgICAgY2FzZSBNZXNzYWdlczo6JXM6OiVzOlxuJyAl
IChyZWNlaXZlci5uYW1lLCBtZXNzYWdlLmlkKCkpKQotICAgIHJlc3VsdC5hcHBlbmQoJyAgICAg
ICAgQ29yZUlQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6JXM6OiVzPihhcmd1bWVudHMsIHRo
aXMsICYlcyk7XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgaGFuZGxlcl9mdW5j
dGlvbihyZWNlaXZlciwgbWVzc2FnZSkpKQorICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgQ29y
ZUlQQzo6JXM8TWVzc2FnZXM6OiVzOjolcz4oYXJndW1lbnRzLCB0aGlzLCAmJXMpO1xuJyAlIChk
aXNwYXRjaF9mdW5jdGlvbiwgcmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lLCBoYW5kbGVyX2Z1
bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKSkpCiAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBy
ZXR1cm47XG4nKQogICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25kaXRpb24oJycuam9pbihyZXN1
bHQpLCBtZXNzYWdlLmNvbmRpdGlvbikKIApAQCAtMzI0LDYgKzM1MSw3IEBAIGRlZiBhcmd1bWVu
dF9jb2Rlcl9oZWFkZXJzX2Zvcl90eXBlKHR5cGUKIAogICAgIHNwZWNpYWxfY2FzZXMgPSB7CiAg
ICAgICAgICdXVEY6OlN0cmluZyc6ICciQXJndW1lbnRDb2RlcnMuaCInLAorICAgICAgICAnV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcic6ICciSW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUNvZGVycy5oIicsCiAgICAgfQogCiAgICAgaWYgdHlwZSBpbiBzcGVjaWFsX2Nh
c2VzOgpAQCAtMzgzLDYgKzQxMSwxOCBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZp
bGUpOgogICAgICAgICB0eXBlX2hlYWRlcnMgPSBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpCiAgICAg
ICAgIGhlYWRlcnMudXBkYXRlKHR5cGVfaGVhZGVycykKIAorICAgIGZvciBtZXNzYWdlIGluIHJl
Y2VpdmVyLm1lc3NhZ2VzOgorICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcmVwbHlfcGFyYW1ldGVyIGluIG1lc3NhZ2UucmVw
bHlfcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICB0eXBlID0gcmVwbHlfcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgICAgICBhcmd1bWVudF9lbmNvZGVyX2hlYWRlcnMgPSBhcmd1bWVudF9j
b2Rlcl9oZWFkZXJzX2Zvcl90eXBlKHR5cGUpCisgICAgICAgICAgICAgICAgaWYgYXJndW1lbnRf
ZW5jb2Rlcl9oZWFkZXJzOgorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZShhcmd1
bWVudF9lbmNvZGVyX2hlYWRlcnMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAg
ICAgICAgICAgICAgICB0eXBlX2hlYWRlcnMgPSBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpCisgICAg
ICAgICAgICAgICAgaGVhZGVycy51cGRhdGUodHlwZV9oZWFkZXJzKQorCiAgICAgcmVzdWx0ID0g
W10KIAogICAgIHJlc3VsdC5hcHBlbmQoX2xpY2Vuc2VfaGVhZGVyKQpJbmRleDogV2ViS2l0Mi9T
aGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1N0
cmluZ1BhaXJWZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL1N0cmluZ1Bh
aXJWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU3RyaW5nUGFpclZlY3Rvcl9oCisjZGVmaW5lIFN0cmluZ1BhaXJWZWN0b3JfaAorCisj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBU
aGlzIGNsYXNzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IHRoZSBJUEMg
bWVzc2FnZSBnZW5lcmF0b3IKKy8vIGNhbm5vdCBkZWFsIHdpdGggY2xhc3MgdGVtcGxhdGVzIHdp
dGggbW9yZSB0aGFuIG9uZSBwYXJhbXRlci4KK2NsYXNzIFN0cmluZ1BhaXJWZWN0b3IgeworcHVi
bGljOgorICAgIFN0cmluZ1BhaXJWZWN0b3IoKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmdQ
YWlyVmVjdG9yKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gc3RyaW5nUGFpclZl
Y3RvcikKKyAgICB7CisgICAgICAgIG1fc3RyaW5nUGFpclZlY3Rvci5zd2FwKHN0cmluZ1BhaXJW
ZWN0b3IpOworICAgIH0KKworICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVuY29kZShtX3N0cmlu
Z1BhaXJWZWN0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIFN0cmluZ1BhaXJWZWN0b3ImIHN0cmluZ1BhaXJWZWN0
b3IpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKHN0cmluZ1BhaXJWZWN0
b3IubV9zdHJpbmdQYWlyVmVjdG9yKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiA+JiBzdHJpbmdQYWlyVmVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmdQYWlyVmVjdG9yOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmcsIFN0cmluZz4gPiBtX3N0cmluZ1BhaXJWZWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFN0cmluZ1BhaXJWZWN0b3JfaApJbmRleDogV2ViS2l0Mi9T
aGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtp
bmRzLmgJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQv
V2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kc19oCi0jZGVm
aW5lIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kc19oCi0KLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIK
LQotLy8gTWVzc2FnZXMgc2VudCBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgV2ViUGFnZVBy
b3h5LgotCi1uYW1lc3BhY2UgV2ViUGFnZVByb3h5TWVzc2FnZSB7Ci0KLWVudW0gS2luZCB7Ci0g
ICAgQ3JlYXRlTmV3UGFnZSwKLSAgICBTaG93UGFnZSwKLSAgICBSdW5KYXZhU2NyaXB0QWxlcnQs
Ci0gICAgUnVuSmF2YVNjcmlwdENvbmZpcm0sCi0gICAgUnVuSmF2YVNjcmlwdFByb21wdCwKLQot
ICAgIENsb3NlUGFnZSwKLSAgICBDb250ZW50c1NpemVDaGFuZ2VkLAotICAgIERlY2lkZVBvbGlj
eUZvck1JTUVUeXBlLAotICAgIERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCi0gICAg
RGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uLAotICAgIERpZENoYW5nZVByb2dyZXNzLAot
ICAgIERpZENvbW1pdExvYWRGb3JGcmFtZSwKLSAgICBEaWRDcmVhdGVNYWluRnJhbWUsCi0gICAg
RGlkQ3JlYXRlU3ViRnJhbWUsCi0gICAgRGlkRmFpbExvYWRGb3JGcmFtZSwKLSAgICBEaWRGYWls
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCi0gICAgRGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUsCi0gICAgRGlkRmluaXNoTG9hZEZvckZyYW1lLAotICAgIERpZEZpbmlzaFByb2dyZXNzLAot
ICAgIERpZEZpcnN0TGF5b3V0Rm9yRnJhbWUsCi0gICAgRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9yRnJhbWUsCi0gICAgRGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b24sCi0gICAgRGlkR2V0U291cmNlRm9yRnJhbWUsCi0gICAgRGlkUmVjZWl2ZUV2ZW50LAotICAg
IERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLAotICAg
IERpZFJlY2VpdmVUaXRsZUZvckZyYW1lLAotICAgIERpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNo
eSwKLSAgICBEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUsCi0gICAgRGlkU2V0RnJhbWUsCi0g
ICAgRGlkU3RhcnRQcm9ncmVzcywKLSAgICBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
LAotICAgIERpZFZhbGlkYXRlTWVudUl0ZW0sCi0gICAgTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQs
Ci0gICAgU2V0Q3Vyc29yLAotICAgIFNldFN0YXR1c1RleHQsCi0gICAgU2V0VG9vbFRpcCwKLSAg
ICBUYWtlRm9jdXMsCi0gICAgV2lsbFN1Ym1pdEZvcm0sCi0KLSAgICBCYWNrRm9yd2FyZEFkZEl0
ZW0sCi0gICAgQmFja0ZvcndhcmRHb1RvSXRlbSwKLSAgICBCYWNrRm9yd2FyZEJhY2tJdGVtLAot
ICAgIEJhY2tGb3J3YXJkQ3VycmVudEl0ZW0sCi0gICAgQmFja0ZvcndhcmRGb3J3YXJkSXRlbSwK
LSAgICBCYWNrRm9yd2FyZEl0ZW1BdEluZGV4LAotICAgIEJhY2tGb3J3YXJkQmFja0xpc3RDb3Vu
dCwKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQsCi0KLSAgICBSZWdpc3RlckVkaXRD
b21tYW5kRm9yVW5kbywKLSAgICBDbGVhckFsbEVkaXRDb21tYW5kcywKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBEaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5n
LAotI2VuZGlmCi19OwotCi19Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgTWVzc2FnZUtpbmRUcmFpdHM8V2ViUGFnZVByb3h5TWVzc2FnZTo6S2luZD4geyAKLSAg
ICBzdGF0aWMgY29uc3QgTWVzc2FnZUNsYXNzIG1lc3NhZ2VDbGFzcyA9IE1lc3NhZ2VDbGFzc1dl
YlBhZ2VQcm94eTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5k
c19oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA2OTMxMSkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBQYWdlQ2xpZW50X2gKICNkZWZpbmUgUGFnZUNsaWVudF9oCiAKKyNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00OCw4ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgPSAwOwogCi0gICAgZW51bSBVbmRvT3JS
ZWRvIHsgVW5kbywgUmVkbyB9OwotICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5k
KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5k
UHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21t
YW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBz
dGF0ZSkgPSAwOwogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5
LmNwcAkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFu
ZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFdlYkVkaXRD
b21tYW5kUHJveHk6OnVuYXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VW5hcHBseUVkaXRDb21tYW5kKG1fY29t
bWFuZElEKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5yZWdpc3RlckVkaXRDb21t
YW5kRm9yUmVkbyh0aGlzKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQodGhpcywg
V2ViUGFnZVByb3h5OjpVbmRvKTsKIH0KIAogdm9pZCBXZWJFZGl0Q29tbWFuZFByb3h5OjpyZWFw
cGx5KCkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBXZWJFZGl0Q29tbWFuZFByb3h5OjpyZWFwcGx5
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYWdlLT5wcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlYXBwbHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwotICAgIG1fcGFnZS0+cmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odGhpcyk7Cisg
ICAgbV9wYWdlLT5yZWdpc3RlckVkaXRDb21tYW5kKHRoaXMsIFdlYlBhZ2VQcm94eTo6UmVkbyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Rm9ybUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNs
aWVudC5jcHAJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBXZWJGb3JtQ2xp
ZW50Ojppbml0aWFsaXplKGNvbnN0IFdLUAogICAgICAgICBtZW1zZXQoJm1fcGFnZUZvcm1DbGll
bnQsIDAsIHNpemVvZihtX3BhZ2VGb3JtQ2xpZW50KSk7CiB9CiAKLWJvb2wgV2ViRm9ybUNsaWVu
dDo6d2lsbFN1Ym1pdEZvcm0oV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgV2ViRnJhbWVQcm94eSogc291cmNlRnJhbWUsIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgV2ViRm9ybVN1
Ym1pc3Npb25MaXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKK2Jvb2wgV2ViRm9ybUNsaWVudDo6d2ls
bFN1Ym1pdEZvcm0oV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgV2Vi
RnJhbWVQcm94eSogc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgV2ViRm9ybVN1
Ym1pc3Npb25MaXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKIHsKICAgICBpZiAoIW1fcGFnZUZvcm1D
bGllbnQud2lsbFN1Ym1pdEZvcm0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJGb3JtQ2xpZW50LmgJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViRm9ybUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKICAgICBXZWJGb3JtQ2xpZW50KCk7CiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdLUGFn
ZUZvcm1DbGllbnQqKTsKIAotICAgIGJvb2wgd2lsbFN1Ym1pdEZvcm0oV2ViUGFnZVByb3h5Kiwg
V2ViRnJhbWVQcm94eSosIFdlYkZyYW1lUHJveHkqLCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
U3RyaW5nPiA+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSU9iamVjdCogdXNlckRhdGEsIFdlYkZvcm1T
dWJtaXNzaW9uTGlzdGVuZXJQcm94eSopOyAKKyAgICBib29sIHdpbGxTdWJtaXRGb3JtKFdlYlBh
Z2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgVmVjdG9yPHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFsdWVzLCBBUElPYmplY3QqIHVz
ZXJEYXRhLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkqKTsgCiAKIHByaXZhdGU6CiAg
ICAgV0tQYWdlRm9ybUNsaWVudCBtX3BhZ2VGb3JtQ2xpZW50OwpJbmRleDogV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA2OTMxMSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlN0cmluZ1BhaXJWZWN0b3IuaCIKICNpbmNs
dWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtLmgiCiAjaW5jbHVkZSAiV2ViQ2VydGlmaWNhdGVJbmZvLmgiCkBAIC00Myw3ICs0NCw2IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VOYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCkBAIC01NDAsMzQ5ICs1NDAsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoQ29yCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKG1lc3Nh
Z2VJRC5nZXQ8V2ViUGFnZVByb3h5TWVzc2FnZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENyZWF0ZU1haW5GcmFtZTogewotICAgICAgICAgICAgdWlu
dDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZnJhbWVJ
RCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlkQ3JlYXRlTWFpbkZy
YW1lKGZyYW1lSUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDcmVhdGVTdWJGcmFtZTogewotICAgICAgICAgICAg
dWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoZnJh
bWVJRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlkQ3JlYXRlU3Vi
RnJhbWUoZnJhbWVJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU6
IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgdXJs
OwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAg
IFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBh
Z2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMt
PmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgdXJsLCBtZXNzYWdlRGVjb2RlcikpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1cmwsIHVzZXJEYXRhLmdl
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBT
dHJpbmcgdXJsOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAg
ICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNl
ckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFh
cmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgdXJsLCBtZXNzYWdlRGVjb2Rl
cikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUocHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKSwgdXJsLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZhaWxQcm92aXNp
b25hbExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAg
ICAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRh
LCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlN
ZXNzYWdlOjpEaWRDb21taXRMb2FkRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZy
YW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgICAgICAgICBQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm87Ci0KLSAgICAgICAgICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVj
b2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkp
OwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFt
ZUlELCBtaW1lVHlwZSwgY2VydGlmaWNhdGVJbmZvLCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAgICAgICAgIGRpZENvbW1pdExvYWRGb3JGcmFt
ZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBtaW1lVHlwZSwgY2VydGlmaWNhdGVJbmZv
LCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1l
OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAgICBSZWZQdHI8
QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURl
Y29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgp
KTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJh
bWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUo
ZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoTG9hZEZvckZyYW1l
OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAgICBSZWZQdHI8
QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURl
Y29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgp
KTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJh
bWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGRpZEZpbmlzaExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
LCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZhaWxMb2FkRm9yRnJhbWU6IHsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+
IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNz
YWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNz
YWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlk
RmFpbExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5n
ZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVUaXRsZUZvckZyYW1lOiB7Ci0gICAgICAgICAgICB1
aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgU3RyaW5nIHRpdGxlOwotCi0gICAgICAgICAg
ICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2Vy
TWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+
Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBD
OjpPdXQoZnJhbWVJRCwgdGl0bGUsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShwcm9jZXNzKCkt
PndlYkZyYW1lKGZyYW1lSUQpLCB0aXRsZSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRG
aXJzdExheW91dEZvckZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0g
ICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNv
bnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1l
c3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUocHJvY2Vzcygp
LT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJh
bWVJRDsKLQotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAg
ICAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRh
LCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5n
ZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeTogewotICAgICAgICAg
ICAgdWludDY0X3QgZnJhbWVJRDsKKyAgICBkaWRSZWNlaXZlV2ViUGFnZVByb3h5TWVzc2FnZShj
b25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVj
b2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkp
OwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFt
ZUlELCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJh
bWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkU3RhcnRQcm9ncmVzczoKLSAgICAg
ICAgICAgIGRpZFN0YXJ0UHJvZ3Jlc3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENoYW5nZVByb2dyZXNzOiB7Ci0gICAgICAgICAg
ICBkb3VibGUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRDaGFuZ2VQcm9ncmVz
cyh2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpbmlzaFByb2dyZXNzOgotICAgICAgICAgICAgZGlkRmlu
aXNoUHJvZ3Jlc3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVFdmVudDogewotICAgICAgICAgICAgdWludDMyX3QgdHlw
ZTsKLSAgICAgICAgICAgIGJvb2wgaGFuZGxlZDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUoQ29yZUlQQzo6T3V0KHR5cGUsIGhhbmRsZWQpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBkaWRSZWNlaXZlRXZlbnQoKFdlYkV2ZW50OjpUeXBlKXR5cGUs
IGhhbmRsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
ZWJQYWdlUHJveHlNZXNzYWdlOjpUYWtlRm9jdXM6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBV
c2UgZW51bSBoZXJlLgotICAgICAgICAgICAgYm9vbCBkaXJlY3Rpb247Ci0gICAgICAgICAgICBp
ZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKGRpcmVjdGlvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgdGFrZUZvY3VzKGRpcmVjdGlvbik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0g
ICAgICAgICAgICB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZTsKLSAgICAgICAgICAgIHVpbnQzMl90
IG1vZGlmaWVyczsKLSAgICAgICAgICAgIGludDMyX3QgbW91c2VCdXR0b247Ci0gICAgICAgICAg
ICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLSAgICAgICAg
ICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG5hdmlnYXRp
b25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVySUQpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHN0YXRpY19jYXN0PE5hdmlnYXRp
b25UeXBlPihuYXZpZ2F0aW9uVHlwZSksIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+
KG1vZGlmaWVycyksIHN0YXRpY19jYXN0PFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbj4obW91c2VCdXR0
b24pLCB1cmwsIGxpc3RlbmVySUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb246IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICB1aW50
MzJfdCBuYXZpZ2F0aW9uVHlwZTsKLSAgICAgICAgICAgIHVpbnQzMl90IG1vZGlmaWVyczsKLSAg
ICAgICAgICAgIGludDMyX3QgbW91c2VCdXR0b247Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwot
ICAgICAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG5hdmlnYXRpb25UeXBlLCBtb2RpZmll
cnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVySUQpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24ocHJvY2Vzcygp
LT53ZWJGcmFtZShmcmFtZUlEKSwgc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG5hdmlnYXRp
b25UeXBlKSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKSwgc3Rh
dGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihtb3VzZUJ1dHRvbiksIHVybCwgbGlzdGVu
ZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck1JTUVUeXBlOiB7Ci0gICAgICAgICAgICB1
aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgU3RyaW5nIE1JTUVUeXBlOwotICAgICAgICAg
ICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIHVpbnQ2NF90IGxpc3RlbmVySUQ7Ci0gICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBNSU1FVHlw
ZSwgdXJsLCBsaXN0ZW5lcklEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwg
TUlNRVR5cGUsIHVybCwgbGlzdGVuZXJJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OldpbGxTdWJtaXRGb3JtOiB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgdWludDY0X3Qgc291cmNl
RnJhbWVJRDsKLSAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4g
dGV4dEZpZWxkVmFsdWVzOwotICAgICAgICAgICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLQotICAg
ICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAgICAgICBXZWJDb250
ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNw
YWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGZyYW1lSUQsIHNvdXJjZUZyYW1lSUQsIHRleHRGaWVsZFZhbHVlcywgbGlz
dGVuZXJJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHdpbGxTdWJtaXRGb3JtKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHBy
b2Nlc3MoKS0+d2ViRnJhbWUoc291cmNlRnJhbWVJRCksIHRleHRGaWVsZFZhbHVlcywgdXNlckRh
dGEuZ2V0KCksIGxpc3RlbmVySUQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJh
bWU6IHsKLSAgICAgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgICAgICAgICB1aW50
NjRfdCBjYWxsYmFja0lEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3Jl
SVBDOjpPdXQocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgZGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHJlc3VsdFN0cmlu
ZywgY2FsbGJhY2tJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uOiB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwotICAgICAgICAgICAg
dWludDY0X3QgY2FsbGJhY2tJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KHJlc3VsdFN0cmluZywgY2FsbGJhY2tJRCkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGRpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0
aW9uKHJlc3VsdFN0cmluZywgY2FsbGJhY2tJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEdldFNvdXJjZUZvckZy
YW1lOiB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwotICAgICAgICAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29y
ZUlQQzo6T3V0KHJlc3VsdFN0cmluZywgY2FsbGJhY2tJRCkpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGRpZEdldFNvdXJjZUZvckZyYW1lKHJlc3VsdFN0cmluZywgY2Fs
bGJhY2tJRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OlNldFRvb2xUaXA6IHsKLSAgICAgICAgICAgIFN0cmluZyB0b29s
VGlwOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZSh0b29sVGlwKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZXRUb29sVGlwKHRvb2xUaXApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNz
YWdlOjpTZXRDdXJzb3I6IHsKLSNpZiBVU0UoTEFaWV9OQVRJVkVfQ1VSU09SKQotICAgICAgICAg
ICAgQ3Vyc29yIGN1cnNvcjsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoY3Vy
c29yKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBzZXRDdXJzb3IoY3Vy
c29yKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpTaG93UGFnZTogewotICAgICAgICAgICAgc2hvd1BhZ2Uo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVBy
b3h5TWVzc2FnZTo6Q2xvc2VQYWdlOiB7Ci0gICAgICAgICAgICBjbG9zZVBhZ2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6QmFja0ZvcndhcmRBZGRJdGVtOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBpdGVtSUQ7Ci0g
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChpdGVtSUQpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhZGRJdGVtVG9CYWNrRm9yd2Fy
ZExpc3QocHJvY2VzcygpLT53ZWJCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJh
Y2tGb3J3YXJkR29Ub0l0ZW06IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGl0ZW1JRDsKLSAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGl0ZW1JRCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGdvVG9JdGVtSW5CYWNrRm9yd2FyZExp
c3QocHJvY2VzcygpLT53ZWJCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNvbnRl
bnRzU2l6ZUNoYW5nZWQ6IHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENv
cmVJUEM6Ok91dChmcmFtZUlELCBzaXplKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgY29udGVudHNTaXplQ2hhbmdlZChwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
LCBzaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6U2V0U3RhdHVzVGV4dDogewotICAgICAgICAgICAgU3RyaW5nIHRl
eHQ7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh0ZXh0
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc2V0U3RhdHVzVGV4dCh0
ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6UmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG86IHsKLSAgICAgICAgICAg
IHVpbnQ2NF90IGNvbW1hbmRJRDsKLSAgICAgICAgICAgIHVpbnQzMl90IGVkaXRBY3Rpb247Ci0g
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChjb21tYW5kSUQs
IGVkaXRBY3Rpb24pKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhjb21tYW5kSUQsIHN0YXRp
Y19jYXN0PEVkaXRBY3Rpb24+KGVkaXRBY3Rpb24pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6Q2xlYXJBbGxFZGl0Q29t
bWFuZHM6Ci0gICAgICAgICAgICBjbGVhckFsbEVkaXRDb21tYW5kcygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkVmFsaWRhdGVNZW51
SXRlbTogewotICAgICAgICAgICAgaW50IHN0YXRlOwotICAgICAgICAgICAgYm9vbCBpc0VuYWJs
ZWQ7Ci0gICAgICAgICAgICBTdHJpbmcgY29tbWFuZE5hbWU7Ci0gICAgICAgICAgICBpZiAoIWFy
Z3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0
ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fcGFnZUNsaWVudC0+
c2V0RWRpdENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50OiB7Ci0gICAgICAgICAgICB1aW50MzJfdCBtb2Rp
ZmllcnM7Ci0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAg
ICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEs
IHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dHMtPmRlY29kZShDb3JlSVBDOjpPdXQobW9kaWZpZXJzLCBtZXNzYWdlRGVjb2RlcikpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKSwgdXNlckRhdGEu
Z2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzLCBDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXIqIHJlcGx5KQpAQCAtODkyLDEwNSArNTUxLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3dpdGNo
IChtZXNzYWdlSUQuZ2V0PFdlYlBhZ2VQcm94eU1lc3NhZ2U6OktpbmQ+KCkpIHsKLSAgICAgICAg
Y2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpDcmVhdGVOZXdQYWdlOiB7Ci0gICAgICAgICAgICBS
ZWZQdHI8V2ViUGFnZVByb3h5PiBuZXdQYWdlID0gY3JlYXRlTmV3UGFnZSgpOwotICAgICAgICAg
ICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgICAgICAgICAgaWYg
KG5ld1BhZ2UpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyB0aGUgcmVhbCBzaXpl
LgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBuZXdQYWdlLT5jcmVhdGlvblBhcmFtZXRl
cnMoSW50U2l6ZSgxMDAsIDEwMCkpOwotICAgICAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29y
ZUlQQzo6SW4obmV3UGFnZS0+cGFnZUlEKCksIHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oMCksIHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6
UnVuSmF2YVNjcmlwdEFsZXJ0OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAg
ICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVj
b2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgcnVuSmF2YVNjcmlwdEFsZXJ0KHByb2Nlc3MoKS0+d2ViRnJhbWUo
ZnJhbWVJRCksIG1lc3NhZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0Q29uZmlybTogewotICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBlbmNvZGUgc29tZXRoaW5nIGlu
IHRoZSBjYXNlIHRoYXQgdGhlIGFyZ3VtZW50cyBkbyBub3QgZGVjb2RlIGNvcnJlY3RseS4KLSAg
ICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsK
LSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQs
IG1lc3NhZ2UpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gcnVuSmF2YVNjcmlwdENvbmZpcm0ocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlE
KSwgbWVzc2FnZSk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKHJlc3Vs
dCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdl
UHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0UHJvbXB0OiB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHByb2JhYmx5IGVuY29kZSBzb21ldGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0
aGUgYXJndW1lbnRzIGRvIG5vdCBkZWNvZGUgY29ycmVjdGx5LgotICAgICAgICAgICAgdWludDY0
X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAgICAgICAgICAgU3Ry
aW5nIGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29y
ZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSkpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHJ1bkphdmFTY3JpcHRQ
cm9tcHQocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVl
KTsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4ocmVzdWx0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6QmFja0ZvcndhcmRCYWNrSXRlbTogewotICAgICAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSogYmFja0l0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0l0ZW0oKTsKLSAgICAg
ICAgICAgIHVpbnQ2NF90IGJhY2tJdGVtSUQgPSBiYWNrSXRlbSA/IGJhY2tJdGVtLT5pdGVtSUQo
KSA6IDA7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKGJhY2tJdGVtSUQp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVBy
b3h5TWVzc2FnZTo6QmFja0ZvcndhcmRDdXJyZW50SXRlbTogewotICAgICAgICAgICAgV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogY3VycmVudEl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVu
dEl0ZW0oKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRJdGVtSUQgPSBjdXJyZW50SXRl
bSA/IGN1cnJlbnRJdGVtLT5pdGVtSUQoKSA6IDA7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2Rl
KENvcmVJUEM6OkluKGN1cnJlbnRJdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRGb3J3YXJk
SXRlbTogewotICAgICAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogZm9yd2FyZEl0ZW0g
PSBtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKTsKLSAgICAgICAgICAgIHVpbnQ2NF90
IGZvcndhcmRJdGVtSUQgPSBmb3J3YXJkSXRlbSA/IGZvcndhcmRJdGVtLT5pdGVtSUQoKSA6IDA7
Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKGZvcndhcmRJdGVtSUQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5
TWVzc2FnZTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDogewotICAgICAgICAgICAgaW50IGl0ZW1J
bmRleDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGl0
ZW1JbmRleCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChp
dGVtSW5kZXgpOwotICAgICAgICAgICAgdWludDY0X3QgaXRlbUlEID0gaXRlbSA/IGl0ZW0tPml0
ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oaXRlbUlE
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3VudDogewotICAgICAgICAgICAgaW50
IGJhY2tMaXN0Q291bnQgPSBtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpOwotICAg
ICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihiYWNrTGlzdENvdW50KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudDogewotICAgICAgICAgICAgaW50IGZvcndh
cmRMaXN0Q291bnQgPSBtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOwotICAg
ICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihmb3J3YXJkTGlzdENvdW50KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDaGFuZ2VBY2NlbGVy
YXRlZENvbXBvc2l0aW5nOiB7Ci0gICAgICAgICAgICBib29sIGNvbXBvc2l0aW5nOwotICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoY29tcG9zaXRpbmcpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGRpZENoYW5nZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoY29tcG9zaXRpbmcpOwotICAgICAgICAgICAgcmVwbHktPmVuY29kZShk
cmF3aW5nQXJlYSgpLT5pbmZvKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCByZXBseS4KKyAgICBkaWRSZWNl
aXZlU3luY1dlYlBhZ2VQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVu
dHMsIHJlcGx5KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1haW5GcmFtZSh1
aW50NjRfdCBmcmFtZUlEKQpAQCAtMTAyOCw5MSArNTkwLDE3OSBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkRmluaXNoUHJvZ3Jlc3MoKQogICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaFByb2dy
ZXNzKHRoaXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwsIEFQSU9i
amVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIHVybCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNl
ckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1
c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFt
ZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFt
ZS0+ZGlkU3RhcnRQcm92aXNpb25hbExvYWQodXJsKTsKLSAgICBtX2xvYWRlckNsaWVudC5kaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAg
bV9sb2FkZXJDbGllbnQuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh0aGlzLCBmcmFt
ZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgdXJsLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdl
UHJveHk6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50cykKIHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAg
ICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBw
YWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZSht
ZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZy
YW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwogICAgIGZyYW1lLT5kaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQodXJsKTsKLSAgICBtX2xvYWRlckNs
aWVudC5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh0
aGlzLCBmcmFtZSwgdXNlckRhdGEpOworICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0
YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbG9h
ZGVyQ2xpZW50LmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlzLCBm
cmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdl
YkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VO
YW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3Nh
Z2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUg
PSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQuZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0
YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2FkRm9yRnJhbWUo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIEFQSU9iamVjdCogdXNlckRhdGEp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
JiBjZXJ0aWZpY2F0ZUluZm8sIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQog
eworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVz
c2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29u
dGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndl
YkZyYW1lKGZyYW1lSUQpOworCiAgICAgZnJhbWUtPnNldE1JTUVUeXBlKG1pbWVUeXBlKTsKICAg
ICBmcmFtZS0+c2V0Q2VydGlmaWNhdGVJbmZvKFdlYkNlcnRpZmljYXRlSW5mbzo6Y3JlYXRlKGNl
cnRpZmljYXRlSW5mbykpOwogICAgIGZyYW1lLT5kaWRDb21taXRMb2FkKCk7Ci0gICAgbV9sb2Fk
ZXJDbGllbnQuZGlkQ29tbWl0TG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7Cisg
ICAgbV9sb2FkZXJDbGllbnQuZGlkQ29tbWl0TG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2Vy
RGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh1aW50NjRfdCBm
cmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKLSAgICBtX2xv
YWRlckNsaWVudC5kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRV
c2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2Uo
KS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNz
KCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hMb2Fk
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1
bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4
dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFj
ZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29k
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFtZS0+ZGlkRmluaXNoTG9hZCgpOwot
ICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEpOworICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSh0aGlzLCBm
cmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmFpbExv
YWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbG9hZGVyQ2xpZW50
LmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAg
ICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VE
ZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQo
KSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKTsKKworICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZhaWxMb2FkV2l0aEVycm9yRm9y
RnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIHRpdGxlLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVUaXRsZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogeworICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVz
c2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBp
ZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQp
OworCiAgICAgZnJhbWUtPmRpZFJlY2VpdmVUaXRsZSh0aXRsZSk7CiAKICAgICAvLyBDYWNoZSB0
aGUgdGl0bGUgZm9yIHRoZSBtYWluIGZyYW1lIGluIHRoZSBwYWdlLgogICAgIGlmIChmcmFtZSA9
PSBtX21haW5GcmFtZSkKICAgICAgICAgbV9wYWdlVGl0bGUgPSB0aXRsZTsKIAotICAgIG1fbG9h
ZGVyQ2xpZW50LmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHRoaXMsIHRpdGxlLCBmcmFtZSwgdXNl
ckRhdGEpOworICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHRoaXMs
IHRpdGxlLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJT2JqZWN0KiB1
c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaXJzdExheW91dEZvckZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAg
IG1fbG9hZGVyQ2xpZW50LmRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJE
YXRhKTsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNl
ck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCkt
PmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2Rlcikp
CisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2Vzcygp
LT53ZWJGcmFtZShmcmFtZUlEKTsKKworICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpcnN0TGF5b3V0
Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6OmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbG9hZGVyQ2xpZW50LmRp
ZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0
YSk7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJN
ZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5j
b250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+
d2ViRnJhbWUoZnJhbWVJRCk7CisKKyAgICBtX2xvYWRlckNsaWVudC5kaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKLSAgICBtX2xvYWRlckNsaWVudC5kaWRSZW1vdmVG
cmFtZUZyb21IaWVyYXJjaHkodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBSZWZQdHI8QVBJ
T2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3Nh
Z2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsK
KworICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh0aGlzLCBm
cmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCiAvLyBQb2xpY3lDbGllbnQKIAotdm9pZCBXZWJQ
YWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViRnJhbWVQcm94eSog
ZnJhbWUsIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJz
IG1vZGlmaWVycywgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJp
bmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG9wYXF1
ZU5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBvcGFxdWVNb2RpZmllcnMsIGludDMyX3Qgb3BhcXVl
TW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQogewor
ICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsK
KyAgICBOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSA9IHN0YXRpY19jYXN0PE5hdmlnYXRp
b25UeXBlPihvcGFxdWVOYXZpZ2F0aW9uVHlwZSk7CisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBt
b2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihvcGFxdWVNb2RpZmll
cnMpOworICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBtb3VzZUJ1dHRvbiA9IHN0YXRpY19jYXN0
PFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbj4ob3BhcXVlTW91c2VCdXR0b24pOworICAgIAogICAgIFJl
ZlB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJhbWUtPnNldFVw
UG9saWN5TGlzdGVuZXJQcm94eShsaXN0ZW5lcklEKTsKICAgICBpZiAoIW1fcG9saWN5Q2xpZW50
LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odGhpcywgbmF2aWdhdGlvblR5cGUsIG1v
ZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkKICAgICAg
ICAgbGlzdGVuZXItPnVzZSgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yTmV3V2luZG93QWN0aW9uKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBOYXZpZ2F0aW9uVHlwZSBu
YXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIFdlYk1vdXNlRXZl
bnQ6OkJ1dHRvbiBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3Rl
bmVySUQpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG9wYXF1ZU5hdmlnYXRpb25UeXBlLCB1aW50MzJf
dCBvcGFxdWVNb2RpZmllcnMsIGludDMyX3Qgb3BhcXVlTW91c2VCdXR0b24sIGNvbnN0IFN0cmlu
ZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQogeworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1l
ID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBOYXZpZ2F0aW9uVHlwZSBuYXZp
Z2F0aW9uVHlwZSA9IHN0YXRpY19jYXN0PE5hdmlnYXRpb25UeXBlPihvcGFxdWVOYXZpZ2F0aW9u
VHlwZSk7CisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxX
ZWJFdmVudDo6TW9kaWZpZXJzPihvcGFxdWVNb2RpZmllcnMpOworICAgIFdlYk1vdXNlRXZlbnQ6
OkJ1dHRvbiBtb3VzZUJ1dHRvbiA9IHN0YXRpY19jYXN0PFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbj4o
b3BhcXVlTW91c2VCdXR0b24pOworCiAgICAgUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxpc3RlbmVy
SUQpOwogICAgIGlmICghbV9wb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKHRoaXMsIG5hdmlnYXRpb25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGZy
YW1lLCBsaXN0ZW5lci5nZXQoKSkpCiAgICAgICAgIGxpc3RlbmVyLT51c2UoKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck1JTUVUeXBlKFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3Qg
bGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh1
aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBjb25zdCBTdHJpbmcmIHVy
bCwgdWludDY0X3QgbGlzdGVuZXJJRCkKIHsKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHBy
b2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxp
c3RlbmVySUQpOwogICAgIGlmICghbV9wb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yTUlNRVR5
cGUodGhpcywgTUlNRVR5cGUsIHVybCwgZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkKICAgICAgICAg
bGlzdGVuZXItPnVzZSgpOwpAQCAtMTEyMCwxOCArNzcwLDMyIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkZWNpZGVQb2xpY3lGb3JNSU1FVHkKIAogLy8gRm9ybUNsaWVudAogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6d2lsbFN1Ym1pdEZvcm0oV2ViRnJhbWVQcm94eSogZnJhbWUsIFdlYkZyYW1lUHJveHkq
IHNvdXJjZUZyYW1lLCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+JiB0ZXh0Rmll
bGRWYWx1ZXMsIEFQSU9iamVjdCogdXNlckRhdGEsIHVpbnQ2NF90IGxpc3RlbmVySUQpCit2b2lk
IFdlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
c291cmNlRnJhbWVJRCwgY29uc3QgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFsdWVzLCB1
aW50NjRfdCBsaXN0ZW5lcklELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
IHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1l
c3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNv
bnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53
ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBXZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFtZSA9IHByb2Nl
c3MoKS0+d2ViRnJhbWUoc291cmNlRnJhbWVJRCk7CisKICAgICBSZWZQdHI8V2ViRm9ybVN1Ym1p
c3Npb25MaXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9IGZyYW1lLT5zZXRVcEZvcm1TdWJtaXNzaW9u
TGlzdGVuZXJQcm94eShsaXN0ZW5lcklEKTsKLSAgICBpZiAoIW1fZm9ybUNsaWVudC53aWxsU3Vi
bWl0Rm9ybSh0aGlzLCBmcmFtZSwgc291cmNlRnJhbWUsIHRleHRGaWVsZFZhbHVlcywgdXNlckRh
dGEsIGxpc3RlbmVyLmdldCgpKSkKKyAgICBpZiAoIW1fZm9ybUNsaWVudC53aWxsU3VibWl0Rm9y
bSh0aGlzLCBmcmFtZSwgc291cmNlRnJhbWUsIHRleHRGaWVsZFZhbHVlcy5zdHJpbmdQYWlyVmVj
dG9yKCksIHVzZXJEYXRhLmdldCgpLCBsaXN0ZW5lci5nZXQoKSkpCiAgICAgICAgIGxpc3RlbmVy
LT5jb250aW51ZVN1Ym1pc3Npb24oKTsKIH0KIAogLy8gVUlDbGllbnQKIAotUGFzc1JlZlB0cjxX
ZWJQYWdlUHJveHk+IFdlYlBhZ2VQcm94eTo6Y3JlYXRlTmV3UGFnZSgpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y3JlYXRlTmV3UGFnZSh1aW50NjRfdCYgbmV3UGFnZUlELCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBuZXdQYWdlUGFyYW1ldGVycykKIHsKLSAgICByZXR1cm4gbV91aUNsaWVudC5j
cmVhdGVOZXdQYWdlKHRoaXMpOworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG5ld1BhZ2UgPSBt
X3VpQ2xpZW50LmNyZWF0ZU5ld1BhZ2UodGhpcyk7CisgICAgaWYgKG5ld1BhZ2UpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFBhc3MgdGhlIHJlYWwgc2l6ZS4KKyAgICAgICAgbmV3UGFnZUlEID0gbmV3
UGFnZS0+cGFnZUlEKCk7CisgICAgICAgIG5ld1BhZ2VQYXJhbWV0ZXJzID0gbmV3UGFnZS0+Y3Jl
YXRpb25QYXJhbWV0ZXJzKEludFNpemUoMTAwLCAxMDApKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bmV3UGFnZUlEID0gMDsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93UGFnZSgpCkBA
IC0xMTQ0LDE5ICs4MDgsMTkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsb3NlUGFnZSgpCiAgICAg
bV91aUNsaWVudC5jbG9zZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFT
Y3JpcHRBbGVydChXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
dm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgbV91aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxl
cnQodGhpcywgbWVzc2FnZSwgZnJhbWUpOworICAgIG1fdWlDbGllbnQucnVuSmF2YVNjcmlwdEFs
ZXJ0KHRoaXMsIG1lc3NhZ2UsIHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCkpOwogfQogCi1i
b29sIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViRnJhbWVQcm94eSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2Ny
aXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wm
IHJlc3VsdCkKIHsKLSAgICByZXR1cm4gbV91aUNsaWVudC5ydW5KYXZhU2NyaXB0Q29uZmlybSh0
aGlzLCBtZXNzYWdlLCBmcmFtZSk7CisgICAgcmVzdWx0ID0gbV91aUNsaWVudC5ydW5KYXZhU2Ny
aXB0Q29uZmlybSh0aGlzLCBtZXNzYWdlLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpKTsK
IH0KIAotU3RyaW5nIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdFByb21wdChXZWJGcmFtZVBy
b3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRW
YWx1ZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IFN0cmluZyYgcmVzdWx0KQogewotICAgIHJldHVybiBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRQ
cm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBmcmFtZSk7CisgICAgcmVzdWx0ID0g
bV91aUNsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0KHRoaXMsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1
ZSwgcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTExNjQsNDggKzgyOCw4NSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U3RhdHVzVGV4dChjb25zdCBTCiAgICAgbV91aUNsaWVu
dC5zZXRTdGF0dXNUZXh0KHRoaXMsIHRleHQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6bW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQSU9i
amVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQodWludDMyX3Qgb3BhcXVlTW9kaWZpZXJzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFy
Z3VtZW50cykKIHsKLSAgICBtX3VpQ2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHRoaXMs
IG1vZGlmaWVycywgdXNlckRhdGEpOworCisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7
CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0
YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNv
ZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9wYXF1
ZU1vZGlmaWVycyk7CisKKyAgICBtX3VpQ2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHRo
aXMsIG1vZGlmaWVycywgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
Y29udGVudHNTaXplQ2hhbmdlZChXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZW50c1NpemVDaGFuZ2VkKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiB7Ci0gICAgbV91
aUNsaWVudC5jb250ZW50c1NpemVDaGFuZ2VkKHRoaXMsIHNpemUsIGZyYW1lKTsKKyAgICBtX3Vp
Q2xpZW50LmNvbnRlbnRzU2l6ZUNoYW5nZWQodGhpcywgc2l6ZSwgcHJvY2VzcygpLT53ZWJGcmFt
ZShmcmFtZUlEKSk7CiB9CiAKIC8vIEJhY2tGb3J3YXJkTGlzdAogCi12b2lkIFdlYlBhZ2VQcm94
eTo6YWRkSXRlbVRvQmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0p
Cit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRBZGRJdGVtKHVpbnQ2NF90IGl0ZW1JRCkK
IHsKLSAgICBtX2JhY2tGb3J3YXJkTGlzdC0+YWRkSXRlbShpdGVtKTsKKyAgICBtX2JhY2tGb3J3
YXJkTGlzdC0+YWRkSXRlbShwcm9jZXNzKCktPndlYkJhY2tGb3J3YXJkSXRlbShpdGVtSUQpKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9JdGVtSW5CYWNrRm9yd2FyZExpc3QoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEdv
VG9JdGVtKHVpbnQ2NF90IGl0ZW1JRCkKIHsKLSAgICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0
ZW0oaXRlbSk7CisgICAgbV9iYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKHByb2Nlc3MoKS0+d2Vi
QmFja0ZvcndhcmRJdGVtKGl0ZW1JRCkpOwogfQogCi0vLyBVbmRvIG1hbmFnZW1lbnQKK3ZvaWQg
V2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEJhY2tJdGVtKHVpbnQ2NF90JiBpdGVtSUQpCit7Cisg
ICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYmFja0l0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+
YmFja0l0ZW0oKTsKKyAgICBpdGVtSUQgPSBiYWNrSXRlbSA/IGJhY2tJdGVtLT5pdGVtSUQoKSA6
IDA7Cit9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1
aW50NjRfdCBjb21tYW5kSUQsIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpiYWNrRm9yd2FyZEN1cnJlbnRJdGVtKHVpbnQ2NF90JiBpdGVtSUQpCiB7Ci0gICAgcmVn
aXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8oV2ViRWRpdENvbW1hbmRQcm94eTo6Y3JlYXRlKGNvbW1h
bmRJRCwgZWRpdEFjdGlvbiwgdGhpcykpOworICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGN1
cnJlbnRJdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCk7CisgICAgaXRlbUlE
ID0gY3VycmVudEl0ZW0gPyBjdXJyZW50SXRlbS0+aXRlbUlEKCkgOiAwOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQordm9pZCBXZWJQYWdlUHJveHk6OmJh
Y2tGb3J3YXJkRm9yd2FyZEl0ZW0odWludDY0X3QmIGl0ZW1JRCkKIHsKLSAgICBtX3BhZ2VDbGll
bnQtPmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
Zm9yd2FyZEl0ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKTsKKyAgICBpdGVt
SUQgPSBmb3J3YXJkSXRlbSA/IGZvcndhcmRJdGVtLT5pdGVtSUQoKSA6IDA7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhQYXNzUmVmUHRyPFdlYkVk
aXRDb21tYW5kUHJveHk+IGNvbW1hbmRQcm94eSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9y
d2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIHVpbnQ2NF90JiBpdGVtSUQpCiB7Ci0gICAg
bV9wYWdlQ2xpZW50LT5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmRQcm94eSwgUGFnZUNsaWVu
dDo6VW5kbyk7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9IG1fYmFja0Zvcndh
cmRMaXN0LT5pdGVtQXRJbmRleChpbmRleCk7OworICAgIGl0ZW1JRCA9IGl0ZW0gPyBpdGVtLT5p
dGVtSUQoKSA6IDA7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5k
Rm9yUmVkbyhQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmRQcm94eSkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoaW50MzJfdCYgY291bnQp
CiB7Ci0gICAgbV9wYWdlQ2xpZW50LT5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmRQcm94eSwg
UGFnZUNsaWVudDo6UmVkbyk7CisgICAgY291bnQgPSBtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0xp
c3RDb3VudCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkTGlz
dENvdW50KGludDMyX3QmIGNvdW50KQoreworICAgIGNvdW50ID0gbV9iYWNrRm9yd2FyZExpc3Qt
PmZvcndhcmRMaXN0Q291bnQoKTsKK30KKworLy8gVW5kbyBtYW5hZ2VtZW50CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1aW50NjRfdCBjb21tYW5kSUQs
IHVpbnQzMl90IGVkaXRBY3Rpb24pCit7CisgICAgcmVnaXN0ZXJFZGl0Q29tbWFuZChXZWJFZGl0
Q29tbWFuZFByb3h5OjpjcmVhdGUoY29tbWFuZElELCBzdGF0aWNfY2FzdDxFZGl0QWN0aW9uPihl
ZGl0QWN0aW9uKSwgdGhpcyksIFVuZG8pOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJB
bGxFZGl0Q29tbWFuZHMoKQoreworICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1Jl
ZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kUHJveHksIFVuZG9PclJlZG8gdW5kb09y
UmVkbykKK3sKKyAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZFBy
b3h5LCB1bmRvT3JSZWRvKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmFkZEVkaXRDb21tYW5k
KFdlYkVkaXRDb21tYW5kUHJveHkqIGNvbW1hbmQpCkBAIC0xMjQxLDggKzk0MiwxNSBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvCiAgICAgbV9wYWdlQ2xpZW50LT5z
ZXRDdXJzb3IoY3Vyc29yKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVu
dChXZWJFdmVudDo6VHlwZSB0eXBlLCBib29sIGhhbmRsZWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkVmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5h
YmxlZCwgaW50MzJfdCBzdGF0ZSkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPnNldEVkaXRDb21tYW5k
U3RhdGUoY29tbWFuZE5hbWUsIGlzRW5hYmxlZCwgc3RhdGUpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCkK
IHsKKyAgICBXZWJFdmVudDo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6OlR5cGU+
KG9wYXF1ZVR5cGUpOworCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlTW92ZToKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMwNCwxMyArMTAxMiwxNiBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0U291cmNlRm9yRnJhbWUoCiAgICAgY2FsbGJhY2st
PnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShyZXN1bHRTdHJpbmcuaW1wbCgpKTsKIH0K
IAorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBjb21wb3NpdGluZykKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgY29tcG9z
aXRpbmcsIERyYXdpbmdBcmVhQmFzZTo6RHJhd2luZ0FyZWFJbmZvJiBkcmF3aW5nQXJlYUluZm8p
CiB7CiAgICAgaWYgKGNvbXBvc2l0aW5nKQogICAgICAgICBkaWRFbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKTsKICAgICBlbHNlCiAgICAgICAgIGRpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOworCisgICAgZHJhd2luZ0FyZWFJbmZvID0gZHJhd2luZ0FyZWEoKS0+aW5mbygpOwog
fQogI2VuZGlmCiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2OTMx
MSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2Niw3IEBAIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50OwogY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNzIFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvOworY2xhc3MgU3RyaW5nUGFpclZlY3RvcjsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlz
dDsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJEYXRhOwpAQCAtMTg4
LDEwICsxODksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkTGVhdmVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CiAjZW5kaWYKIAorICAgIGVudW0gVW5kb09yUmVkbyB7IFVuZG8sIFJlZG8gfTsK
ICAgICB2b2lkIGFkZEVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHkqKTsKICAgICB2b2lk
IHJlbW92ZUVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHkqKTsKLSAgICB2b2lkIHJlZ2lz
dGVyRWRpdENvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4pOwot
ICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxXZWJFZGl0Q29t
bWFuZFByb3h5Pik7CisgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2Vi
RWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pOwogCiAgICAgV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzKCkgY29uc3Q7CiAgICAgV2ViUGFnZU5hbWVzcGFjZSogcGFnZU5hbWVzcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZU5hbWVzcGFjZS5nZXQoKTsgfQpAQCAtMjEwLDUzICsyMTEsNjQg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJ
VHlwZTsgfQogCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYlBhZ2VQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVXZWJQYWdlUHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworICAgIENvcmVJUEM6OlN5bmNSZXBseU1vZGUgZGlkUmVjZWl2ZVN5bmNX
ZWJQYWdlUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciop
OworCiAgICAgdm9pZCBkaWRDcmVhdGVNYWluRnJhbWUodWludDY0X3QgZnJhbWVJRCk7CiAgICAg
dm9pZCBkaWRDcmVhdGVTdWJGcmFtZSh1aW50NjRfdCBmcmFtZUlEKTsKIAotICAgIHZvaWQgZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5n
JiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgQVBJT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2ViRnJhbWVQ
cm94eSosIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdlYkZy
YW1lUHJveHkqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmlj
YXRlSW5mbyYsIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkRmluaXNoTG9h
ZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZhaWxM
b2FkRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkUmVj
ZWl2ZVRpdGxlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYsIEFQSU9iamVj
dCopOwotICAgIHZvaWQgZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgQVBJ
T2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFt
ZShXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRSZW1vdmVGcmFtZUZy
b21IaWVyYXJjaHkoV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOworICAgIHZvaWQgZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcm
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFN0cmluZyYsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOworICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
JiwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
KTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZEZhaWxMb2FkRm9yRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRS
ZWNlaXZlVGl0bGVGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmLCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZFJlbW92ZUZyYW1lRnJvbUhp
ZXJhcmNoeSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAg
ICB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoKTsKICAgICB2b2lkIGRpZENoYW5nZVByb2dyZXNzKGRv
dWJsZSk7CiAgICAgdm9pZCBkaWRGaW5pc2hQcm9ncmVzcygpOwogICAgIAotICAgIHZvaWQgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJGcmFtZVByb3h5KiwgV2ViQ29yZTo6TmF2
aWdhdGlvblR5cGUsIFdlYkV2ZW50OjpNb2RpZmllcnMsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiwg
Y29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOwotICAgIHZvaWQgZGVjaWRl
UG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdlYkZyYW1lUHJveHkqLCBXZWJDb3JlOjpOYXZpZ2F0
aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycywgV2ViTW91c2VFdmVudDo6QnV0dG9uLCBjb25z
dCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7Ci0gICAgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZShXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29u
c3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOworICAgIHZvaWQgZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0
aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBjb25zdCBT
dHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAgdm9pZCBkZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5
cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5n
JiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOworICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTUlN
RVR5cGUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOwogCi0gICAgdm9pZCB3aWxsU3VibWl0Rm9y
bShXZWJGcmFtZVByb3h5KiBmcmFtZSwgV2ViRnJhbWVQcm94eSogZnJhbWVTb3VyY2UsIFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0
KiB1c2VyRGF0YSwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAgdm9pZCB3aWxsU3VibWl0Rm9y
bSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBzb3VyY2VGcmFtZUlELCBjb25zdCBTdHJpbmdQ
YWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMsIHVpbnQ2NF90IGxpc3RlbmVySUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciopOwogCi0gICAgUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0
ZU5ld1BhZ2UoKTsKKyAgICB2b2lkIGNyZWF0ZU5ld1BhZ2UodWludDY0X3QmIG5ld1BhZ2VJRCwg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAgICB2
b2lkIGNsb3NlUGFnZSgpOwotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkZyYW1lUHJv
eHkqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgcnVuSmF2YVNjcmlw
dFByb21wdChXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBTdHJpbmcmLCBib29sJiByZXN1bHQpOworICAgIHZvaWQgcnVuSmF2YVNjcmlwdFBy
b21wdCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBTdHJp
bmcmIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYpOwotICAg
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViRXZlbnQ6Ok1vZGlmaWVycywgQVBJT2Jq
ZWN0Kik7Ci0gICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudCh1
aW50MzJfdCBtb2RpZmllcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQg
Y29udGVudHNTaXplQ2hhbmdlZCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CiAKICAgICAvLyBCYWNrL0ZvcndhcmQgbGlzdCBtYW5hZ2VtZW50Ci0gICAgdm9pZCBh
ZGRJdGVtVG9CYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOwotICAgIHZv
aWQgZ29Ub0l0ZW1JbkJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7Cisg
ICAgdm9pZCBiYWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKTsKKyAgICB2b2lkIGJh
Y2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlEKTsKKyAgICB2b2lkIGJhY2tGb3J3YXJk
QmFja0l0ZW0odWludDY0X3QmIGl0ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEN1cnJlbnRJ
dGVtKHVpbnQ2NF90JiBpdGVtSUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRGb3J3YXJkSXRlbSh1
aW50NjRfdCYgaXRlbUlEKTsKKyAgICB2b2lkIGJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJf
dCBpbmRleCwgdWludDY0X3QmIGl0ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEJhY2tMaXN0
Q291bnQoaW50MzJfdCYgY291bnQpOworICAgIHZvaWQgYmFja0ZvcndhcmRGb3J3YXJkTGlzdENv
dW50KGludDMyX3QmIGNvdW50KTsKIAogICAgIC8vIFVuZG8gbWFuYWdlbWVudAotICAgIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElELCBXZWJDb3JlOjpF
ZGl0QWN0aW9uKTsKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHVpbnQ2NF90
IGNvbW1hbmRJRCwgdWludDMyX3QgZWRpdEFjdGlvbik7CiAgICAgdm9pZCBjbGVhckFsbEVkaXRD
b21tYW5kcygpOwogCiAgICAgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOwogICAgIHZv
aWQgc2V0VG9vbFRpcChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2b2lkIGRpZFZhbGlkYXRlTWVudUl0ZW0oY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUpOwogCi0gICAg
dm9pZCBkaWRSZWNlaXZlRXZlbnQoV2ViRXZlbnQ6OlR5cGUsIGJvb2wgaGFuZGxlZCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKTsK
IAogICAgIHZvaWQgZGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIHVp
bnQ2NF90KTsKICAgICB2b2lkIGRpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9u
KGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90KTsKQEAgLTI2NSw3ICsyNzcsNyBAQCBwcml2YXRlOgog
ICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSBjb25zdDsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICB2b2lkIGRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9vbCBjb21wb3Np
dGluZyk7CisgICAgdm9pZCBkaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgY29t
cG9zaXRpbmcsIERyYXdpbmdBcmVhQmFzZTo6RHJhd2luZ0FyZWFJbmZvJik7CiAjZW5kaWYgICAg
CiAKICAgICBQYWdlQ2xpZW50KiBtX3BhZ2VDbGllbnQ7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkz
IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CisgICAgIyBVSSBtZXNzYWdlcy4KKyAgICBDcmVhdGVOZXdQYWdlKCkg
LT4gKHVpbnQ2NF90IG5ld1BhZ2VJRCwgV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
IG5ld1BhZ2VQYXJhbWV0ZXJzKQorICAgIFNob3dQYWdlKCkKKyAgICBDbG9zZVBhZ2UoKQorICAg
IFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyBtZXNzYWdl
KSAtPiAoKQorICAgIFJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6
U3RyaW5nIG1lc3NhZ2UpIC0+IChib29sIHJlc3VsdCkKKyAgICBSdW5KYXZhU2NyaXB0UHJvbXB0
KHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIG1lc3NhZ2UsIFdURjo6U3RyaW5nIGRlZmF1
bHRWYWx1ZSkgLT4gKFdURjo6U3RyaW5nIHJlc3VsdCkKKyAgICBNb3VzZURpZE1vdmVPdmVyRWxl
bWVudCh1aW50MzJfdCBtb2RpZmllcnMsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2Fn
ZUVuY29kZXIgdXNlckRhdGEpOworICAgIENvbnRlbnRzU2l6ZUNoYW5nZWQodWludDY0X3QgZnJh
bWVJRCwgV2ViQ29yZTo6SW50U2l6ZSBuZXdTaXplKQorICAgIERpZFJlY2VpdmVFdmVudCh1aW50
MzJfdCB0eXBlLCBib29sIGhhbmRsZWQpCisgICAgRGlkVmFsaWRhdGVNZW51SXRlbShXVEY6OlN0
cmluZyBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUpCisgICAgU2V0
Q3Vyc29yKFdlYkNvcmU6OkN1cnNvciBjdXJzb3IpCisgICAgU2V0U3RhdHVzVGV4dChXVEY6OlN0
cmluZyBzdGF0dXNUZXh0KQorICAgIFNldFRvb2xUaXAoV1RGOjpTdHJpbmcgdG9vbFRpcCkKKyAg
ICBUYWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pCisKKyAgICAjIFBvbGljeSBtZXNzYWdlcy4KKyAg
ICBEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyBN
SU1FVHlwZSwgV1RGOjpTdHJpbmcgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQorICAgIERlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2
aWdhdGlvblR5cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgV1RG
OjpTdHJpbmcgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQorICAgIERlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwg
dWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBXVEY6OlN0cmluZyB1cmws
IHVpbnQ2NF90IGxpc3RlbmVySUQpCisKKyAgICAjIFByb2dyZXNzIG1lc3NhZ2VzLgorICAgIERp
ZENoYW5nZVByb2dyZXNzKGRvdWJsZSB2YWx1ZSkKKyAgICBEaWRGaW5pc2hQcm9ncmVzcygpCisg
ICAgRGlkU3RhcnRQcm9ncmVzcygpCisKKyAgICAjIEZyYW1lIGxpZmV0aW1lIG1lc3NhZ2VzLgor
ICAgIERpZENyZWF0ZU1haW5GcmFtZSh1aW50NjRfdCBmcmFtZUlEKQorICAgIERpZENyZWF0ZVN1
YkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCisKKyAgICAjIEZyYW1lIGxvYWQgbWVzc2FnZXMuCisg
ICAgRGlkQ29tbWl0TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIG1p
bWVUeXBlLCBXZWJLaXQ6OlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbywg
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBE
aWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rl
ciB1c2VyRGF0YSkKKyAgICBEaWRGaW5pc2hMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBE
aWRGaXJzdExheW91dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0
cmluZyB1cmwsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRh
dGEpCisgICAgRGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90IGZyYW1lSUQsIFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0cmlu
ZyB1cmwsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEp
CisgICAgRGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJp
bmcgdGl0bGUsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRh
dGEpCisKKyAgICAjIEZvcm1zIG1lc3NhZ2VzLgorICAgIFdpbGxTdWJtaXRGb3JtKHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHNvdXJjZUZyYW1lSUQsIFdlYktpdDo6U3RyaW5nUGFpclZlY3Rv
ciB0ZXh0RmllbGRWYWx1ZXMsIHVpbnQ2NF90IGxpc3RlbmVySUQsIFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisKKyAgICAjIENhbGxiYWNrIG1lc3Nh
Z2VzLgorICAgIERpZEdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6U3Ry
aW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBEaWRHZXRTb3VyY2VG
b3JGcmFtZShXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisg
ICAgRGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywg
dWludDY0X3QgY2FsbGJhY2tJRCkKKworICAgICMgQmFja0ZvcndhcmQgbWVzc2FnZXMuCisgICAg
QmFja0ZvcndhcmRBZGRJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEdvVG9J
dGVtKHVpbnQ2NF90IGl0ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEJhY2tJdGVtKCkgLT4gKHVpbnQ2
NF90IGl0ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEN1cnJlbnRJdGVtKCkgLT4gKHVpbnQ2NF90IGl0
ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEZvcndhcmRJdGVtKCkgLT4gKHVpbnQ2NF90IGl0ZW1JRCkK
KyAgICBCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KHVpbnQ2NF90IGl0ZW1JRCkgLT4gKHVpbnQ2NF90
IGl0ZW1JRCkKKyAgICBCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSAtPiAoaW50MzJfdCBpdGVt
SUQpCisgICAgQmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCkgLT4gKGludDMyX3QgaXRlbUlE
KQorCisgICAgIyBVbmRvUmVkbyBtZXNzYWdlcy4KKyAgICBSZWdpc3RlckVkaXRDb21tYW5kRm9y
VW5kbyh1aW50NjRfdCBjb21tYW5kSUQsIHVpbnQzMl90IGVkaXRBY3Rpb24pCisgICAgQ2xlYXJB
bGxFZGl0Q29tbWFuZHMoKQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
ICMgQWNjZWxlcmF0ZWQgY29tcHNpdGluZyBtZXNzYWdlcy4KKyAgICBEaWRDaGFuZ2VBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKGJvb2wgY29tcG9zaXRpbmcpIC0+IChXZWJLaXQ6OkRyYXdpbmdBcmVh
QmFzZTo6RHJhd2luZ0FyZWFJbmZvIG5ld0RyYXdpbmdBcmVhKQorI2VuZGlmCit9CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA2OTMx
MSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB0b29s
VGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmIG9sZFRvb2xUaXAsIGNvbnN0IFN0cmluZyYgbmV3VG9v
bFRpcCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
KTsKIAotICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21t
YW5kUHJveHk+LCBVbmRvT3JSZWRvKTsKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFz
c1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsK
ICAgICB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdm9pZCBzZXRFZGl0Q29tbWFu
ZFN0YXRlKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3Rh
dGUpOwogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0JKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyBOU1N0
cmluZyogbmFtZUZvckVkaXRBY3Rpb24oRWRpdEEKICAgICByZXR1cm4gbmlsOwogfQogCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4gcHJwQ29tbWFuZCwgVW5kb09yUmVkbyB1bmRvT3JSZWRvKQordm9pZCBQYWdl
Q2xpZW50SW1wbDo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5k
UHJveHk+IHBycENvbW1hbmQsIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQog
ewogICAgIFJlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kID0gcHJwQ29tbWFuZDsK
IApAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENv
bW1hbmQKICAgICBOU1N0cmluZyAqYWN0aW9uTmFtZSA9IG5hbWVGb3JFZGl0QWN0aW9uKGNvbW1h
bmQtPmVkaXRBY3Rpb24oKSk7CiAKICAgICBOU1VuZG9NYW5hZ2VyICp1bmRvTWFuYWdlciA9IFtt
X3drVmlldyB1bmRvTWFuYWdlcl07Ci0gICAgW3VuZG9NYW5hZ2VyIHJlZ2lzdGVyVW5kb1dpdGhU
YXJnZXQ6bV91bmRvVGFyZ2V0LmdldCgpIHNlbGVjdG9yOigodW5kb09yUmVkbyA9PSBVbmRvKSA/
IEBzZWxlY3Rvcih1bmRvRWRpdGluZzopIDogQHNlbGVjdG9yKHJlZG9FZGl0aW5nOikpIG9iamVj
dDpjb21tYW5kT2JqQy5nZXQoKV07CisgICAgW3VuZG9NYW5hZ2VyIHJlZ2lzdGVyVW5kb1dpdGhU
YXJnZXQ6bV91bmRvVGFyZ2V0LmdldCgpIHNlbGVjdG9yOigodW5kb09yUmVkbyA9PSBXZWJQYWdl
UHJveHk6OlVuZG8pID8gQHNlbGVjdG9yKHVuZG9FZGl0aW5nOikgOiBAc2VsZWN0b3IocmVkb0Vk
aXRpbmc6KSkgb2JqZWN0OmNvbW1hbmRPYmpDLmdldCgpXTsKICAgICBpZiAoYWN0aW9uTmFtZSkK
ICAgICAgICAgW3VuZG9NYW5hZ2VyIHNldEFjdGlvbk5hbWU6YWN0aW9uTmFtZV07CiB9CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCShyZXZpc2lvbiA2OTMxMSkKKysrIFdl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMs
NyArODMsNyBAQCB2b2lkIFFXS1BhZ2VQcml2YXRlOjp0b29sVGlwQ2hhbmdlZChjb25zCiAgICAg
ZW1pdCBxLT5zdGF0dXNCYXJNZXNzYWdlKFFTdHJpbmcobmV3VG9vbHRpcCkpOwogfQogCi12b2lk
IFFXS1BhZ2VQcml2YXRlOjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4sIFVuZG9PclJlZG8pCit2b2lkIFFXS1BhZ2VQcml2YXRlOjpyZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykKIHsKIH0KIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3Bh
Z2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3Au
aAkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9w
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAgICAgdmlydHVhbCB2b2lk
IHRha2VGb2N1cyhib29sIGRpcmVjdGlvbikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBD
aGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYktpdDo6V2ViRWRpdENv
bW1hbmRQcm94eT4sIFVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRD
b21tYW5kKFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMo
KTsKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIFFSZWN0KTsKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzIsNyArNTcyLDcgQEAg
dm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6QwogICAgIDo6U2V0Q3Vyc29y
KHBsYXRmb3JtQ3Vyc29yKTsKIH0KIAotdm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5k
KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pCit2b2lkIFdlYlZp
ZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piwg
V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQogewogfQogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlw
Q2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAgICAgdmly
dHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
LCBVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNz
UmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCwgaW50KTsKIApJ
bmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDY5MzExKQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw4ICsxODksNiBAQAogCQlCQzExMUI1MTExMkY2MTkyMDAzMzdC
QUIgLyogUGFnZUNsaWVudEltcGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzExMUI0QzExMkY2MTkyMDAzMzdCQUIgLyogUGFnZUNsaWVudEltcGwu
bW0gKi87IH07CiAJCUJDMTExQjVEMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTExQjVC
MTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLzsgfTsKIAkJQkMxMTFCNUUx
MTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTExQjVDMTEyRjYyOTgwMDMzN0JBQiAvKiBX
ZWJFdmVudEZhY3RvcnkubW0gKi87IH07Ci0JCUJDMTExQjY0MTEyRjYzODMwMDMzN0JBQiAvKiBX
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMTExQjYxMTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHlN
ZXNzYWdlS2luZHMuaCAqLzsgfTsKLQkJQkMxMTFCNjUxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBy
b2Nlc3NNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMTExQjYyMTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2FnZUtp
bmRzLmggKi87IH07CiAJCUJDMTMxQkM5MTE3MjZDMjgwMEI2OTcyNyAvKiBDb3JlSVBDTWVzc2Fn
ZUtpbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzEzMUJDODExNzI2QzI4MDBCNjk3MjcgLyogQ29yZUlQQ01lc3NhZ2VLaW5kcy5oICovOyB9Owog
CQlCQzE0REY3NzEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNERGNzUx
MjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCAqLzsgfTsKIAkJ
QkMxNERGNzgxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNERGNzYx
MjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuY3BwICovOyB9OwpA
QCAtMzUxLDYgKzM0OSw5IEBACiAJCUJDQjlGOEIwMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xp
Y3lDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQjlGOEFFMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQb2xpY3lDbGllbnQuaCAqLzsgfTsKIAkJ
QkNCQ0IwQ0IxMjE1RTMyMTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkNCMENBMTIxNUUzMjEw
MERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmggKi87IH07CiAJCUJDQkNCMENEMTIxNUUz
M0EwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkNCMENDMTIxNUUzM0EwMERFNTlDQSAvKiBJ
bW11dGFibGVEaWN0aW9uYXJ5LmNwcCAqLzsgfTsKKwkJQkNCRDM5MTQxMjVCQjFBODAwRDJDMjlG
IC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JEMzkxMjEyNUJCMUE4MDBEMkMyOUYgLyogV2Vi
UGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQkNCRDM5MTUxMjVCQjFBODAw
RDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JEMzkxMzEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJQkNCRDNDM0IxMjVCRkE3QTAwRDJDMjlGIC8qIFN0
cmluZ1BhaXJWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDQkQzQzNBMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJpbmdQYWlyVmVjdG9yLmggKi87
IH07CiAJCUJDQzU2Rjc5MTE1OTk1N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTZGNzcxMTU5OTU3RDAwMUND
QUY5IC8qIE1hY2hQb3J0LmggKi87IH07CiAJCUJDQzU3MTVCMTE1QURBRUYwMDFDQ0FGOSAvKiBX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDQzU3MTU5MTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCAqLzsgfTsKIAkJQkNDNTcxNUMxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFj
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzU3
MTVBMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi87IH07CkBAIC02
NDEsOCArNjQyLDYgQEAKIAkJQkMxMTFCNEMxMTJGNjE5MjAwMzM3QkFCIC8qIFBhZ2VDbGllbnRJ
bXBsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUNsaWVu
dEltcGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjVCMTEyRjYyOTgw
MDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViRXZlbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MTExQjVDMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudEZhY3RvcnkubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMTExQjYxMTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQYWdl
UHJveHlNZXNzYWdlS2luZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UGFnZVByb3h5TWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
MTExQjYyMTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NNZXNzYWdlS2luZHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMzFCQzgxMTcyNkMyODAwQjY5NzI3IC8qIENv
cmVJUENNZXNzYWdlS2luZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29y
ZUlQQ01lc3NhZ2VLaW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzE0REY3
NTEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTRERjc2MTIwQjVCNzkwMDgyNkMwQyAvKiBJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODAzLDYgKzgwMiwxMCBAQAogCQlCQ0I5RjhBRTExMjRFMDc3MDBBMTM3
RTAgLyogV2ViUG9saWN5Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlBvbGljeUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JDQjBD
QTEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbW11dGFibGVEaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQkNCMENDMTIxNUUzM0EwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0
aW9uYXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltbXV0YWJs
ZURpY3Rpb25hcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JEMzhGQTEy
NUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNCRDM5MTIxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0JEMzkxMzEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZVByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmlu
Z1BhaXJWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUGFp
clZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M1NkY3NzExNTk5NTdE
MDAxQ0NBRjkgLyogTWFjaFBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFjaFBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDNTcxNTkxMTVBREFF
RjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJTeXN0ZW1JbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNDNTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN5c3RlbUludGVyZmFj
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzAsNiArMTEzMyw3IEBACiAJ
CQkJMUEwRjI5Q0ExMjBCMzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuaCAqLywKIAkJ
CQlCQzFERDdCMTExNERDMzk2MDA1QURBRjMgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggKi8s
CiAJCQkJQkNGNTA3MjYxMjQzMjlBQTAwNTk1NUFFIC8qIFdlYkNlcnRpZmljYXRlSW5mby5oICov
LAorCQkJCUJDQkQzQzNBMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJpbmdQYWlyVmVjdG9yLmggKi8s
CiAJCQkJNTE1NzhCODIxMjA5RUNFRjAwQTM3QzRBIC8qIFdlYkRhdGEuaCAqLywKIAkJCQk1MTZB
NEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLywKIAkJCQlCQzAzMkRBRjEwRjQz
ODBGMDA1OEMxNUEgLyogV2ViRXZlbnQuaCAqLywKQEAgLTEzMzAsNiArMTMzNCw3IEBACiAJCQkJ
QkNFRTk4QzUxMTMzMTRENzAwNkJDQzI0IC8qIFdlYlBhZ2VOYW1lc3BhY2UuaCAqLywKIAkJCQlC
QzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLywKIAkJCQlCQzAz
MkRDQjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVByb3h5LmggKi8sCisJCQkJQkNCRDM4RkEx
MjVCQUI5QTAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQ0I5
RjhBRDExMjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmNwcCAqLywKIAkJCQlCQ0I5
RjhBRTExMjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmggKi8sCiAJCQkJQkNENTk3
RkUxMTJCNTdCRTAwRUM4QzIzIC8qIFdlYlByZWZlcmVuY2VzLmNwcCAqLywKQEAgLTE0NjAsOCAr
MTQ2NSw2IEBACiAJCQkJQkM5RTk2OTkxMTQ1N0VERTAwODcwRTcxIC8qIERyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlS2luZHMuaCAqLywKIAkJCQlCQ0IyOENCRjEyMDIzM0Q5MDA3RDk5QkMgLyogSW5q
ZWN0ZWRCdW5kbGVNZXNzYWdlS2luZHMuaCAqLywKIAkJCQlCQ0NCNzVDNTEyMDNBMUNFMDAyMjJE
MUIgLyogV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oICovLAotCQkJCUJDMTExQjYxMTEyRjYzODMw
MDMzN0JBQiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCAqLywKLQkJCQlCQzExMUI2MjEx
MkY2MzgzMDAzMzdCQUIgLyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oICovLAogCQkJCUJDQjcz
NDZEMTFDRUUzRkYwMEVDNTAwMiAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gQ29yZUlQQ1N1cHBvcnQ7CkBAIC0xNzAyLDYgKzE3MDUsOCBAQAog
CQkJCTFBOEVGQTZGMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggKi8s
CiAJCQkJQzBDRTcyOUUxMjQ3RTcxRDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdlUmVjZWl2ZXIu
Y3BwICovLAogCQkJCUMwQ0U3MjlGMTI0N0U3MUQwMEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMu
aCAqLywKKwkJCQlCQ0JEMzkxMjEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlCQ0JEMzkxMzEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBMDQzRjY4MTI1
MTREOEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJ
QkMzMDY2QkMxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLApAQCAtMTgwNyw3ICsxODEyLDYgQEAKIAkJCQlCQzAzMkQ4RjEwRjQzN0EwMDA1OEMxNUEg
LyogV2ViUGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTk4QzcxMTMzMTRENzAwNkJDQzI0
IC8qIFdlYlBhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyREQxMTBGNDM4
OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMTExQjY0
MTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBM0U3MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjlGOEIwMTEyNEUwNzcwMEExMzdFMCAvKiBXZWJQ
b2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDU5N0ZGMTEyQjU3QkUwMEVDOEMy
MyAvKiBXZWJQcmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODE1LDcgKzE4MTksNiBA
QAogCQkJCUJDMDMyRDk3MTBGNDM3QUYwMDU4QzE1QSAvKiBXZWJQcm9jZXNzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTZGQTAyMDExRTE1Mjg3MDBEQjEzNzEgLyogV2ViUHJvY2Vzc01haW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMDMyREQzMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQcm9jZXNz
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxMTFCNjUxMTJGNjM4MzAwMzM3QkFCIC8q
IFdlYlByb2Nlc3NNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyREQ1MTBG
NDM4OUYwMDU4QzE1QSAvKiBXZWJQcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QjczNDZFMTFDRUUzRkYwMEVDNTAwMiAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQzU3MTVCMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1J
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTkzOCw2ICsxOTQxLDggQEAKIAkJCQlCQzMw
NjVGQTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2RlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMzMDY2QkYxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMzMDY4MjQxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQkQzOTE1MTI1QkIxQTgwMEQyQzI5
RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNCRDNDM0Ix
MjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MjIzNSw2ICsyMjQwLDcgQEAKIAkJCQlCQzMwNjVDNDEyNTkyRjg5MDBFNzEyNzggLyogV2ViUHJv
Y2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAv
KiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2
ODI1MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUJDQkQzOTE0MTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2
aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUg
IldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUg
IldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIFdlYkNocm9t
ZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiB3aW5kb3dSZWN0KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC05OCw4ICs5OCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xp
ZW50OjpjYW5UYWtlRm9jdXMoRm9jdXMKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRha2VGb2N1
cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlRha2VGb2N1cywgbV9wYWdl
LT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCA/IHRydWUgOiBmYWxzZSk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlRha2VGb2N1cyhkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkID8gdHJ1
ZSA6IGZhbHNlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojpmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopCkBAIC0xMTEsMTAgKzExMCw5IEBAIFBhZ2UqIFdl
YkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW0KIHsKICAgICB1aW50NjRfdCBuZXdQYWdl
SUQgPSAwOwogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6Q3JlYXRlTmV3UGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6T3V0KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGlt
ZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZSgpLAorICAgICAgICAg
ICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6UmVwbHkobmV3UGFnZUlE
LCBwYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNv
bm5lY3Rpb246Ok5vVGltZW91dCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0y
MzYsMTAgKzIzNCw4IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQK
ICAgICAvLyBOb3RpZnkgdGhlIGJ1bmRsZSBjbGllbnQuCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFTY3JpcHRBbGVydChtX3BhZ2UsIGFsZXJ0VGV4dCwg
d2ViRnJhbWUpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
U3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQsIG1fcGFnZS0+cGFn
ZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3JlSVBDOjpJbih3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBhbGVydFRleHQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25u
ZWN0aW9uOjpOb1RpbWVvdXQpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdl
YkZyYW1lLT5mcmFtZUlEKCksIGFsZXJ0VGV4dCksCisgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQpAQCAtMjUwLDEyICsyNDYsOSBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlw
dENvbmZpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFT
Y3JpcHRDb25maXJtKG1fcGFnZSwgbWVzc2FnZSwgd2ViRnJhbWUpOwogCiAgICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6UnVuSmF2YVNjcmlwdENvbmZpcm0sIG1fcGFn
ZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcmVJUEM6OkluKHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBD
OjpPdXQocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICgh
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNz
YWdlKSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6Tm9UaW1lb3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC0yNjcsMTIgKzI2MCw5IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50
OjpydW5KYXZhU2NyaXB0UHJvbXAKICAgICAvLyBOb3RpZnkgdGhlIGJ1bmRsZSBjbGllbnQuCiAg
ICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFTY3JpcHRQcm9t
cHQobV9wYWdlLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHdlYkZyYW1lKTsKIAotICAgIGlmICgh
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlN
ZXNzYWdlOjpSdW5KYXZhU2NyaXB0UHJvbXB0LCBtX3BhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3
ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQocmVz
dWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSksCisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdFByb21wdDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29u
bmVjdGlvbjo6Tm9UaW1lb3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAogICAg
IHJldHVybiAhcmVzdWx0LmlzTnVsbCgpOwogfQpAQCAtMjgyLDcgKzI3Miw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRTdGF0dXNiYXJUZXh0KGMKICAgICAvLyBOb3RpZnkgdGhlIGJ1bmRs
ZSBjbGllbnQuCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFNldFN0
YXR1c2JhclRleHQobV9wYWdlLCBzdGF0dXNiYXJUZXh0KTsKIAotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRTdGF0dXNU
ZXh0LCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGF0dXNiYXJUZXh0KTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0U3Rh
dHVzVGV4dChzdGF0dXNiYXJUZXh0KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKQEAgLTM0Myw4ICszMzMs
OCBAQCBQbGF0Zm9ybVBhZ2VDbGllbnQgV2ViQ2hyb21lQ2xpZW50OjpwbGF0CiB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSogZnJhbWUsIGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0CiB7CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gIHN0YXRpY19jYXN0
PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZy
YW1lKCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBh
Z2VQcm94eU1lc3NhZ2U6OkNvbnRlbnRzU2l6ZUNoYW5nZWQsIG1fcGFnZS0+cGFnZUlEKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKHdl
YkZyYW1lLT5mcmFtZUlEKCksIHNpemUpKTsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDb250ZW50c1NpemVDaGFu
Z2VkKHdlYkZyYW1lLT5mcmFtZUlEKCksIHNpemUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgU2Nyb2xsVmlldyopIGNvbnN0CkBAIC0zNjUsNyArMzU1LDcgQEAgdm9pZCBXZWJDaHJv
bWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVV
SUNsaWVudCgpLm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1fcGFnZSwgaGl0VGVzdFJlc3VsdCwg
c3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJGbGFncyksIHVzZXJEYXRh
KTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpNb3VzZURpZE1vdmVP
dmVyRWxlbWVudCwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obW9kaWZpZXJGbGFncywg
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1vZGlmaWVyRmxhZ3MsIEluamVjdGVkQnVu
ZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRv
b2xUaXAsIFRleHREaXJlY3Rpb24pCkBAIC0zNzYsNyArMzY2LDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFRvb2xUaXAoY29uc3QgUwogICAgICAgICByZXR1cm47CiAgICAgbV9jYWNoZWRU
b29sVGlwID0gdG9vbFRpcDsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRUb29sVGlwLCBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpJbihtX2NhY2hlZFRvb2xUaXApKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0VG9vbFRpcCht
X2NhY2hlZFRvb2xUaXApLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnByaW50KEZyYW1lKikKQEAgLTQ3Niw3ICs0NjYsNyBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29y
KGNvbnN0IEN1cnNvciYgY3Vyc29yKQogewogI2lmIFVTRShMQVpZX05BVElWRV9DVVJTT1IpCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1l
c3NhZ2U6OlNldEN1cnNvciwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oY3Vyc29yKSk7
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJzb3IpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICNlbmRp
ZgogfQogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KQEAgLTIxMSw4ICsyMTEsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6cmVnaXN0ZXJDb21tYW5kRm9yCiAgICAgbV9wYWdlLT5hZGRXZWJFZGl0Q29tbWFu
ZCh3ZWJDb21tYW5kLT5jb21tYW5kSUQoKSwgd2ViQ29tbWFuZC5nZXQoKSk7CiAgICAgdWludDMy
X3QgZWRpdEFjdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3ZWJDb21tYW5kLT5jb21tYW5k
KCktPmVkaXRpbmdBY3Rpb24oKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6UmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVu
ZG8sIG1fcGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcmVJUEM6OkluKHdlYkNvbW1hbmQtPmNvbW1hbmRJRCgpLCBlZGl0QWN0aW9u
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYkNvbW1hbmQtPmNv
bW1hbmRJRCgpLCBlZGl0QWN0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmQ+KQpAQCAtMjIxLDcgKzIyMCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNv
bW1hbmRGb3IKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25z
KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFn
ZVByb3h5TWVzc2FnZTo6Q2xlYXJBbGxFZGl0Q29tbWFuZHMsIG1fcGFnZS0+cGFnZUlEKCksIENv
cmVJUEM6OkluKCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDbGVhckFsbEVkaXRDb21tYW5kcygpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmNhblVuZG8oKSBjb25zdApJ
bmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2OTMxMSkKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNs
dWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rvci5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50LmgiCkBAIC0zOCw3ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRz
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgpAQCAtMTI1LDcgKzEyNiw4IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVAKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1
bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh3ZWJQYWdlLCBt
X2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5LCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQ
Qzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rl
cih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFy
Y2h5KG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIo
dXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOworCiB9CiAKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDMoKQpAQCAtMjIzLDcgKzIyNSw3IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKICAgICB3ZWJQYWdlLT5p
bmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAg
IC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6
OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgdXJsLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5j
b2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCB1cmwsIElu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRD
YW5jZWxDbGllbnRSZWRpcmVjdCgpCkBAIC0yOTUsNyArMjk3LDcgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdAogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9h
ZGVyQ2xpZW50KCkuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2Zy
YW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6
RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJ
UEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgdXJsLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIHVybCwgSW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQog
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBTdHJpbmcmIHRpdGxlKQpAQCAtMzEwLDcgKzMxMiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkUmUKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNs
aWVudCgpLmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHdlYlBhZ2UsIHRpdGxlLCBtX2ZyYW1lLCB1
c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVj
ZWl2ZVRpdGxlRm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1l
LT5mcmFtZUlEKCksIHRpdGxlLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2Vy
RGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUobV9mcmFt
ZS0+ZnJhbWVJRCgpLCB0aXRsZSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNl
ckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUljb25zKCkKQEAgLTMzMSw3ICszMzMsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvCiAgICAgd2ViUGFnZS0+aW5q
ZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRDb21taXRMb2FkRm9yRnJhbWUod2ViUGFnZSwg
bV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZENvbW1pdExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6Oklu
KG1fZnJhbWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UubWltZVR5cGUoKSwgUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8ocmVzcG9uc2UpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2Vy
RGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUt
PmZyYW1lSUQoKSwgcmVzcG9uc2UubWltZVR5cGUoKSwgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8o
cmVzcG9uc2UpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKQEAgLTM0Niw3ICszNDgsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZEZhCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGYWls
UHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRh
dGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZhaWxQcm92
aXNpb25hbExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJh
bWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEu
Z2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2Zy
YW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRh
LmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEg
bG9hZCBsaXN0ZW5lciwgbm90aWZ5IGl0LgogICAgIGlmIChXZWJGcmFtZTo6TG9hZExpc3RlbmVy
KiBsb2FkTGlzdGVuZXIgPSBtX2ZyYW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAgLTM2NSw3ICszNjcs
NyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhCiAgICAgd2ViUGFn
ZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGYWlsTG9hZFdpdGhFcnJvckZvckZy
YW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQ
cm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQ
YWdlUHJveHlNZXNzYWdlOjpEaWRGYWlsTG9hZEZvckZyYW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwg
Q29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbExvYWRGb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVz
ZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIC8vIElmIHdlIGhhdmUg
YSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdlYkZyYW1lOjpMb2FkTGlzdGVu
ZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5lcigpKQpAQCAtMzg0LDcgKzM4
Niw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmkKICAgICB3ZWJQ
YWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpbmlzaERvY3VtZW50TG9hZEZv
ckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUg
VUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChX
ZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSwgd2ViUGFn
ZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZp
bmlzaERvY3VtZW50TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQo
KQpAQCAtMzk5LDcgKzQwMSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkRmkKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpbmlz
aExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoTG9hZEZvckZyYW1lLCB3ZWJQYWdl
LT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlu
aXNoTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogCiAgICAg
Ly8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJh
bWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkp
CkBAIC00MTgsNyArNDIwLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRGaQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRmlyc3RM
YXlvdXRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmlyc3RMYXlvdXRGb3JGcmFtZSwgd2ViUGFn
ZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZp
cnN0TGF5b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAK
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KCkKQEAgLTQzMyw3ICs0MzUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZEZpCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQo
KS5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1l
LCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBD
b3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VF
bmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAogRnJhbWUqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKQpAQCAt
NTE0LDggKzUxNiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWQK
ICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gbV9mcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lcihm
dW5jdGlvbik7CiAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSByZXF1ZXN0LnVybCgpLnN0cmluZygp
OyAvLyBGSVhNRTogUGFzcyBlbnRpcmUgcmVxdWVzdC4KIAotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lG
b3JNSU1FVHlwZSwgd2ViUGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQoKSwgTUlNRVR5
cGUsIHVybCwgbGlzdGVuZXJJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JNSU1FVHlw
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIE1JTUVUeXBlLCB1cmwsIGxpc3RlbmVySUQpLCB3ZWJQYWdl
LT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24s
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZy
YW1lTmFtZSkKQEAgLTUzNCw4ICs1MzUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERlY2lkCiAgICAgdWludDMyX3QgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yTmF2aWdh
dGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBpbnQzMl90IG1vdXNlQnV0dG9uID0g
bW91c2VCdXR0b25Gb3JOYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb25BY3Rpb24pOwogCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbiwgd2ViUGFnZS0+cGFnZUlEKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24s
IHVybCwgbGlzdGVuZXJJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwgbW9kaWZpZXJzLCBtb3Vz
ZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlv
biYgbmF2aWdhdGlvbkFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4pCkBAIC01NjAsOCArNTYwLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgIHVpbnQzMl90IG1vZGlmaWVycyA9IG1vZGlmaWVy
c0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CiAgICAgaW50MzJfdCBtb3Vz
ZUJ1dHRvbiA9IG1vdXNlQnV0dG9uRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9u
KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdl
UHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLCB3ZWJQYWdlLT5w
YWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwgbW9kaWZpZXJzLCBt
b3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uVHlwZSwgbW9k
aWZpZXJzLCBtb3VzZUJ1dHRvbiwgdXJsLCBsaXN0ZW5lcklEKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxQb2xpY3lDaGVjaygpCkBA
IC01OTIsOSArNTkxLDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxs
UwogCiAKICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gbV9mcmFtZS0+c2V0VXBQb2xpY3lMaXN0
ZW5lcihmdW5jdGlvbik7CisgICAgU3RyaW5nUGFpclZlY3RvciB2YWx1ZXNWZWN0b3IodmFsdWVz
KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdl
UHJveHlNZXNzYWdlOjpXaWxsU3VibWl0Rm9ybSwgd2ViUGFnZS0+cGFnZUlEKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1fZnJhbWUt
PmZyYW1lSUQoKSwgc291cmNlRnJhbWUtPmZyYW1lSUQoKSwgdmFsdWVzLCBsaXN0ZW5lcklELCBJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6V2lsbFN1Ym1pdEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3VyY2VGcmFtZS0+ZnJh
bWVJRCgpLCB2YWx1ZXNWZWN0b3IsIGxpc3RlbmVySUQsIEluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3Vt
ZW50TG9hZGVyKikKQEAgLTYzMCwyMSArNjI5LDIyIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpZENoYW5nZUVzdGkKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gbV9m
cmFtZS0+cGFnZSgpKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkU3RhcnRQcm9ncmVzcywgd2ViUGFnZS0+cGFn
ZUlEKCksIENvcmVJUEM6OkluKCkpOworICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRQcm9ncmVzcygp
LCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBv
c3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7CiAgICAgaWYgKFdlYlBh
Z2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgZG91YmxlIHByb2dyZXNz
ID0gd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsK
LSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZENoYW5nZVByb2dyZXNzLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQ
Qzo6SW4ocHJvZ3Jlc3MpKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZVByb2dyZXNzKHByb2dy
ZXNzKSwgd2ViUGFnZS0+cGFnZUlEKCkpOworCiAgICAgfQogfQogCiB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiB7CiAgICAgaWYg
KFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGaW5p
c2hQcm9ncmVzcywgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCkpOworICAgICAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmluaXNoUHJvZ3Jlc3MoKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpCkBA
IC05NDgsNyArOTQ4LDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OgogICAgIFJlZlB0cjxXZWJGcmFtZT4gc3ViZnJhbWUgPSBXZWJGcmFtZTo6Y3JlYXRlU3ViZnJh
bWUod2ViUGFnZSwgbmFtZSwgb3duZXJFbGVtZW50KTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUkg
cHJvY2VzcyB0aGF0IHN1YmZyYW1lIGhhcyBiZWVuIGFkZGVkLgotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDcmVhdGVT
dWJGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKHN1YmZyYW1lLT5mcmFtZUlE
KCkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkQ3JlYXRlU3ViRnJhbWUoc3ViZnJhbWUtPmZyYW1lSUQoKSks
IHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIEZyYW1lKiBjb3JlU3ViZnJhbWUgPSBzdWJmcmFt
ZS0+Y29yZUZyYW1lKCk7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAJKHJldmlzaW9uIDY5MzExKQorKysg
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtMTE5LDcgKzExOSw3IEBA
IHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW0oUGEKIAogICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IHBycEl0ZW07CiAgICAgdWludDY0X3QgaXRlbUlEID0gaGlzdG9y
eUl0ZW1Ub0lETWFwKCkuZ2V0KGl0ZW0pOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEFkZEl0ZW0sIG1f
cGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGl0ZW1JRCkpOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9y
d2FyZEFkZEl0ZW0oaXRlbUlEKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6OmdvQmFjaygpCkBAIC0xMzUsMTYgKzEzNSwxNiBAQCB2b2lkIFdl
YkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpnb0ZvcndhcmQoCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dFByb3h5Ojpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICB1aW50NjRfdCBpdGVt
SUQgPSBoaXN0b3J5SXRlbVRvSURNYXAoKS5nZXQoaXRlbSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJk
R29Ub0l0ZW0sIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGl0ZW1JRCkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpCYWNrRm9yd2FyZEdvVG9JdGVtKGl0ZW1JRCksIG1fcGFnZS0+cGFnZUlEKCkpOworCiB9
CiAKIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0l0ZW0oKQogewog
ICAgIHVpbnQ2NF90IGJhY2tJdGVtSUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2Fy
ZEJhY2tJdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoYmFja0l0
ZW1JRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6QmFja0ZvcndhcmRCYWNrSXRlbSgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkJhY2tGb3J3YXJkQmFja0l0ZW06OlJlcGx5KGJhY2tJdGVtSUQpLAorICAgICAgICAg
ICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xNTgsMTAgKzE1OCw5IEBAIEhpc3RvcnlJ
dGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmEKIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6Y3VycmVudEl0ZW0oKQogewogICAgIHVpbnQ2NF90IGN1cnJlbnRJdGVt
SUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
U3luYyhXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEN1cnJlbnRJdGVtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBh
Z2VJRCgpLCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoY3VycmVudEl0ZW1JRCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNv
bm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRD
dXJyZW50SXRlbSgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tG
b3J3YXJkQ3VycmVudEl0ZW06OlJlcGx5KGN1cnJlbnRJdGVtSUQpLAorICAgICAgICAgICAgIG1f
cGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xNzUsMTAgKzE3NCw5IEBAIEhpc3RvcnlJdGVtKiBX
ZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y3UKIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6Zm9yd2FyZEl0ZW0oKQogewogICAgIHVpbnQ2NF90IGZvcndhcmRJdGVtSUQgPSAw
OwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhX
ZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpJbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoZm9yd2FyZEl0ZW1JRCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rp
b246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJk
SXRlbSgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJk
Rm9yd2FyZEl0ZW06OlJlcGx5KGZvcndhcmRJdGVtSUQpLAorICAgICAgICAgICAgIG1fcGFnZS0+
cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCkBAIC0xOTIsMTAgKzE5MCw5IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNr
Rm9yd2FyZExpc3RQcm94eTo6Zm8KIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6aXRlbUF0SW5kZXgoaW50IGl0ZW1JbmRleCkKIHsKICAgICB1aW50NjRfdCBpdGVtSUQgPSAw
OwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhX
ZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpJbihpdGVtSW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQoaXRlbUlEKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6Tm9UaW1lb3V0KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1B
dEluZGV4KGl0ZW1JbmRleCksCisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwKKyAgICAgICAgICAgICBtX3Bh
Z2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIApAQCAtMjM5LDEwICsyMzYsOSBAQCB2b2lkIFdlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjpzZXRFbmFibGVkCiBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmJh
Y2tMaXN0Q291bnQoKQogewogICAgIGludCBiYWNrTGlzdENvdW50ID0gMDsKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVz
c2FnZTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJ
bigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb3JlSVBDOjpPdXQoYmFja0xpc3RDb3VudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91
dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50KCksCisg
ICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlzdENv
dW50OjpSZXBseShiYWNrTGlzdENvdW50KSwKKyAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgp
LCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIApAQCAtMjUyLDEwICsyNDgsOSBAQCBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6
OmJhY2tMaXN0Q291CiBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmZvcndhcmRMaXN0Q291
bnQoKQogewogICAgIGludCBmb3J3YXJkTGlzdENvdW50ID0gMDsKLSAgICBpZiAoIVdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6
QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3JlSVBDOjpPdXQoZm9yd2FyZExpc3RDb3VudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91
dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCks
CisgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJk
TGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50KSwKKyAgICAgICAgICAgICBtX3BhZ2Ut
PnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHJldmlzaW9uIDY5MzExKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlS2luZHMu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC0xNDIsNyArMTQyLDcgQEAgV2ViUGFnZTo6V2Vi
UGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0CiAgICAgU2V0dGluZ3M6OnNldE1pbkRPTVRpbWVy
SW50ZXJ2YWwoMC4wMDQpOwogCiAgICAgbV9tYWluRnJhbWUgPSBXZWJGcmFtZTo6Y3JlYXRlTWFp
bkZyYW1lKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDcmVhdGVNYWluRnJhbWUsIG1fcGFnZUlELCBDb3Jl
SVBDOjpJbihtX21haW5GcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENyZWF0ZU1h
aW5GcmFtZShtX21haW5GcmFtZS0+ZnJhbWVJRCgpKSwgbV9wYWdlSUQpOwogCiAjaWZuZGVmIE5E
RUJVRwogICAgIHdlYlBhZ2VDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtMjQ2LDEwICsyNDYsMTAg
QEAgdm9pZCBXZWJQYWdlOjpjaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aQogICAgIC8vIFRlbGwg
dGhlIFVJIHByb2Nlc3MgdGhhdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBjaGFuZ2VkLiBJdCBt
YXkgcmVzcG9uZCBieSBjaGFuZ2luZwogICAgIC8vIGRyYXdpbmcgYXJlYSB0eXBlcy4KICAgICBE
cmF3aW5nQXJlYTo6RHJhd2luZ0FyZWFJbmZvIG5ld0RyYXdpbmdBcmVhSW5mbzsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oY29tcG9z
aXRpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29yZUlQQzo6T3V0KG5ld0RyYXdpbmdBcmVhSW5mbyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQp
OworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGNvbXBv
c2l0aW5nKSwKKyAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2hhbmdlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZzo6UmVwbHkobmV3RHJhd2luZ0FyZWFJbmZvKSwKKyAgICAgICAgbV9w
YWdlSUQsIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCk7CiAgICAgCiAgICAgaWYgKG5l
d0RyYXdpbmdBcmVhSW5mby50eXBlICE9IGRyYXdpbmdBcmVhKCktPmluZm8oKS50eXBlKSB7CiAg
ICAgICAgIG1fZHJhd2luZ0FyZWEgPSAwOwpAQCAtMjYzLDEwICsyNjMsNyBAQCB2b2lkIFdlYlBh
Z2U6OmNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpCiB2b2lkIFdlYlBhZ2U6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgY2hhbmdl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXIpOwotICAgIAotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICBtX2RyYXdpbmdBcmVhLT5zZXRSb290Q29tcG9zaXRpbmdM
YXllcihsYXllcik7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQYWdlOjpleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKQpAQCAtMjk3LDcgKzI5NCw3IEBAIHZvaWQgV2ViUGFnZTo6dHJ5Q2xv
c2UoKQogCiB2b2lkIFdlYlBhZ2U6OnNlbmRDbG9zZSgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNsb3NlUGFnZSwg
bV9wYWdlSUQsIENvcmVJUEM6OkluKCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDbG9zZVBhZ2UoKSwgbV9wYWdl
SUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmxvYWRVUkwoY29uc3QgU3RyaW5nJiB1cmwpCkBAIC00
ODEsOCArNDc4LDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRQog
ICAgIEN1cnJlbnRFdmVudCBjdXJyZW50RXZlbnQobW91c2VFdmVudCk7CiAKICAgICBib29sIGhh
bmRsZWQgPSBoYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIG1fcGFnZS5nZXQoKSk7Ci0KLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkUmVjZWl2ZUV2ZW50LCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG1vdXNlRXZlbnQudHlwZSgpKSwgaGFuZGxlZCkpOworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRS
ZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1vdXNlRXZlbnQudHlwZSgpKSwgaGFu
ZGxlZCksIG1fcGFnZUlEKTsKIH0KIAogc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25z
dCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBQYWdlKiBwYWdlKQpAQCAtNTAwLDcgKzQ5Niw3
IEBAIHZvaWQgV2ViUGFnZTo6d2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEUKICAgICBDdXJyZW50
RXZlbnQgY3VycmVudEV2ZW50KHdoZWVsRXZlbnQpOwogCiAgICAgYm9vbCBoYW5kbGVkID0gaGFu
ZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBtX3BhZ2UuZ2V0KCkpOwotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNl
aXZlRXZlbnQsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihzdGF0aWNfY2FzdDx1aW50MzJfdD4od2hl
ZWxFdmVudC50eXBlKCkpLCBoYW5kbGVkKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2hlZWxFdmVudC50eXBlKCkpLCBoYW5kbGVkKSwgbV9wYWdl
SUQpOwogfQogCiBzdGF0aWMgYm9vbCBoYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2
ZW50JiBrZXlib2FyZEV2ZW50LCBQYWdlKiBwYWdlKQpAQCAtNTE5LDIxICs1MTUsMjEgQEAgdm9p
ZCBXZWJQYWdlOjprZXlFdmVudChjb25zdCBXZWJLZXlib2FyZAogICAgIGlmICghaGFuZGxlZCkK
ICAgICAgICAgaGFuZGxlZCA9IHBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChrZXli
b2FyZEV2ZW50KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlRXZlbnQsIG1fcGFnZUlELCBDb3JlSVBD
OjpJbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oa2V5Ym9hcmRFdmVudC50eXBlKCkpLCBoYW5kbGVk
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2FzdDx1aW50MzJfdD4oa2V5
Ym9hcmRFdmVudC50eXBlKCkpLCBoYW5kbGVkKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBh
Z2U6OnZhbGlkYXRlTWVudUl0ZW0oY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIHsKICAgICBi
b29sIGlzRW5hYmxlZCA9IGZhbHNlOwotICAgIGludCBzdGF0ZSA9IDA7CisgICAgaW50MzJfdCBz
dGF0ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgIEVkaXRvcjo6
Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsK
ICAgICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRlKCk7CiAgICAgICAgIGlzRW5hYmxlZCA9IGNv
bW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOwogICAgIH0KLSAgICAK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5
TWVzc2FnZTo6RGlkVmFsaWRhdGVNZW51SXRlbSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKGNvbW1h
bmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKSk7CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkVmFsaWRhdGVNZW51
SXRlbShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSksIG1fcGFnZUlEKTsKIH0KIAogdm9p
ZCBXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkK
QEAgLTU1Nyw3ICs1NTMsNyBAQCB2b2lkIFdlYlBhZ2U6OnRvdWNoRXZlbnQoY29uc3QgV2ViVG91
Y2hFCiAKICAgICBib29sIGhhbmRsZWQgPSBoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQsIG1f
cGFnZS5nZXQoKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2ZUV2ZW50LCBtX3BhZ2VJRCwgQ29yZUlQ
Qzo6SW4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdWNoRXZlbnQudHlwZSgpKSwgaGFuZGxlZCkp
OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvdWNo
RXZlbnQudHlwZSgpKSwgaGFuZGxlZCksIG1fcGFnZUlEKTsKIH0KICNlbmRpZgogCkBAIC02MTIs
NyArNjA4LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odQogCiB2
b2lkIFdlYlBhZ2U6OnNob3coKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rp
b24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpTaG93UGFnZSwgbV9wYWdlSUQsIENvcmVJ
UEM6OkluKCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGFnZSgpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQg
V2ViUGFnZTo6c2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFN0cmluZyYgY3VzdG9tVXNlckFnZW50
KQpAQCAtNjUzLDEzICs2NDksMTMgQEAgdm9pZCBXZWJQYWdlOjpydW5KYXZhU2NyaXB0SW5NYWlu
RnJhbWUoYwogICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBtX21haW5GcmFtZS0+Y29yZUZyYW1l
KCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwogICAg
IFN0cmluZyByZXN1bHRTdHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcocmVzdWx0VmFsdWUudG9TdHJp
bmcobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4ocmVzdWx0U3RyaW5nLCBj
YWxsYmFja0lEKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShyZXN1
bHRTdHJpbmcsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0
UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24odWludDY0X3QgY2FsbGJhY2tJRCkKIHsK
ICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gcmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b24oKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFn
ZVByb3h5TWVzc2FnZTo6RGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24sIG1f
cGFnZUlELCBDb3JlSVBDOjpJbihyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24ocmVzdWx0U3RyaW5nLCBj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFNvdXJjZUZvckZy
YW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC02NjcsNyArNjYz
LDggQEAgdm9pZCBXZWJQYWdlOjpnZXRTb3VyY2VGb3JGcmFtZSh1aW50NjRfdAogICAgIFN0cmlu
ZyByZXN1bHRTdHJpbmc7CiAgICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNo
YXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpKQogICAgICAgIHJlc3VsdFN0cmluZyA9IGZyYW1lLT5z
b3VyY2UoKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2Vi
UGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0U291cmNlRm9yRnJhbWUsIG1fcGFnZUlELCBDb3JlSVBD
OjpJbihyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKTsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRHZXRTb3Vy
Y2VGb3JGcmFtZShyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9y
ZSYgc3RvcmUpCkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24gNjkzMTEpCisrKyBXZWJLaXQy
L3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDYgKzQ0OSwxMCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFy
ZWRcU3RyaW5nUGFpclZlY3Rvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXFVzZXJNZXNzYWdlQ29kZXJzLmgiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpAQCAtNDk3LDE5ICs1MDEsMTkgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxXZWJQcmVmZXJl
bmNlc1N0b3JlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXFNoYXJlZFxXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXFdlYlByZWZlcmVuY2VzU3RvcmUuaCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxXZWJQ
cmVmZXJlbmNlc1N0b3JlLmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcV2ViUHJlZmVyZW5jZXNTdG9yZS5oIg0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC03NjcsMTAgKzc3MSw2IEBA
CiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXENvcmVJUENTdXBwb3J0XFdlYlBhZ2VQcm94
eU1lc3NhZ2VLaW5kcy5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxDb3JlSVBDU3VwcG9ydFxXZWJQcm9jZXNzUHJveHlN
ZXNzYWdlS2luZHMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KIAkJCTwvRmlsdGVyPg0KIAkJ
CTxGaWx0ZXINCiAJCQkJTmFtZT0id2luIg0KQEAgLTE1MTMsNiArMTUxMywxMCBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Nc
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYlBvbGljeUNsaWVudC5jcHAiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTg3NiwxNSArMTg4MCwxNSBAQAogCQkJCQk+DQogCQkJ
CTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cQ29y
ZUlQQ1xEYXRhUmVmZXJlbmNlLmNwcCINCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1c
Q29yZUlQQ1xDb3JlSVBDTWVzc2FnZUtpbmRzLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cQ29yZUlQQ1xEYXRhUmVm
ZXJlbmNlLmgiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXENvcmVJUENcRGF0YVJl
ZmVyZW5jZS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cQ29yZUlQQ1xDb3JlSVBDTWVzc2FnZUtpbmRzLmgiDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXENvcmVJUENcRGF0YVJlZmVyZW5jZS5oIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQpAQCAtMjAyOSw2ICsyMDMzLDE0IEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2Vi
S2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViUGFnZVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcV2ViUGFnZVByb3h5TWVzc2FnZXMuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5j
cHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70118</attachid>
            <date>2010-10-07 11:03:02 -0700</date>
            <delta_ts>2010-10-11 17:07:51 -0700</delta_ts>
            <desc>Updated</desc>
            <filename>fixQt.diff</filename>
            <type>text/plain</type>
            <size>128056</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTAtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmF0
ZSB0aGUgbWVzc2FnZXMgc2VudCB0byB0aGUgV2ViUGFnZVByb3h5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzOQorCisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcm86CisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudHMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBD
L0hhbmRsZU1lc3NhZ2UuaDoKKyAgICAgICAgKENvcmVJUEM6OmhhbmRsZU1lc3NhZ2UpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlZ2lz
dGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6
CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFn
ZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJGb3JtQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9ybUNsaWVudDo6
d2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiB3aW4vV2Vi
S2l0Mi52Y3Byb2o6CisKIDIwMTAtMTAtMDcgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5p
QG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCkluZGV4OiBXZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktp
dDIvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAgVlBB
VEggPSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1BsdWdpbnMgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MgXAorICAg
ICQoV2ViS2l0MikvVUlQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9QbHVnaW5z
IFwKICMKIApAQCAtMTIsNiArMTMsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVn
aW5Qcm9jZXNzUHJveHkgXAogICAgIFBsdWdpblByb3h5IFwKICAgICBXZWJQYWdlIFwKKyAgICBX
ZWJQYWdlUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlByb2Nlc3NDb25uZWN0aW9u
IFwKICMKSW5kZXg6IFdlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvRGVy
aXZlZFNvdXJjZXMucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxOCBAQCBtZXNzYWdl
cmVjZWl2ZXJfZ2VuZXJhdG9yLnRhcmdldCAgID0gJCR7CiBnZW5lcmF0ZWRfZmlsZXMuZGVwZW5k
cyAgICAgICAgICAgICs9IG1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3IKIFFNQUtFX0VYVFJBX1RB
UkdFVFMgICAgICAgICAgICAgICAgKz0gbWVzc2FnZXJlY2VpdmVyX2dlbmVyYXRvcgogCitwYWdl
cHJveHltZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5jb21tYW5kcyA9IHB5dGhvbiAkJHtTUkNfUk9P
VF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1tZXNzYWdlcy1oZWFkZXIucHkgICQke1NS
Q19ST09UX0RJUn0vV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluID4g
JCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VzLmgKK3Bh
Z2Vwcm94eW1lc3NhZ2VoZWFkZXJfZ2VuZXJhdG9yLmRlcGVuZHMgID0gJCR7U1JDX1JPT1RfRElS
fS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZXMtaGVhZGVyLnB5ICQke1NSQ19ST09U
X0RJUn0vV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCitwYWdlcHJv
eHltZXNzYWdlaGVhZGVyX2dlbmVyYXRvci50YXJnZXQgICA9ICQke09VVFBVVF9ESVJ9L1dlYktp
dDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94eU1lc3NhZ2VzLmgKK2dlbmVyYXRlZF9maWxlcy5kZXBl
bmRzICAgICAgICAgICAgICAgICArPSBwYWdlcHJveHltZXNzYWdlaGVhZGVyX2dlbmVyYXRvcgor
UU1BS0VfRVhUUkFfVEFSR0VUUyAgICAgICAgICAgICAgICAgICAgICs9IHBhZ2Vwcm94eW1lc3Nh
Z2VoZWFkZXJfZ2VuZXJhdG9yCisKK3BhZ2Vwcm94eW1lc3NhZ2VyZWNlaXZlcl9nZW5lcmF0b3Iu
Y29tbWFuZHMgPSBweXRob24gJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJh
dGUtbWVzc2FnZS1yZWNlaXZlci5weSAgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gPiAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0
ZWQvV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorcGFnZXByb3h5bWVzc2FnZXJlY2Vp
dmVyX2dlbmVyYXRvci5kZXBlbmRzICA9ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9TY3JpcHRz
L2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2ZXIucHkgJCR7U1JDX1JPT1RfRElSfS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KK3BhZ2Vwcm94eW1lc3NhZ2VyZWNlaXZl
cl9nZW5lcmF0b3IudGFyZ2V0ICAgPSAkJHtPVVRQVVRfRElSfS9XZWJLaXQyL2dlbmVyYXRlZC9X
ZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitnZW5lcmF0ZWRfZmlsZXMuZGVwZW5kcyAg
ICAgICAgICAgICAgICAgICArPSBwYWdlcHJveHltZXNzYWdlcmVjZWl2ZXJfZ2VuZXJhdG9yCitR
TUFLRV9FWFRSQV9UQVJHRVRTICAgICAgICAgICAgICAgICAgICAgICArPSBwYWdlcHJveHltZXNz
YWdlcmVjZWl2ZXJfZ2VuZXJhdG9yCisKIHByb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5j
b21tYW5kcyA9IHB5dGhvbiAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0
ZS1tZXNzYWdlcy1oZWFkZXIucHkgICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gPiAkJE9VVFBVVF9ESVIvV2ViS2l0Mi9nZW5lcmF0ZWQv
V2ViUHJvY2Vzc01lc3NhZ2VzLmgKIHByb2Nlc3NtZXNzYWdlaGVhZGVyX2dlbmVyYXRvci5kZXBl
bmRzICA9ICQke1NSQ19ST09UX0RJUn0vV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2Vz
LWhlYWRlci5weSAkJHtTUkNfUk9PVF9ESVJ9L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCiBwcm9jZXNzbWVzc2FnZWhlYWRlcl9nZW5lcmF0b3IudGFyZ2V0ICAgPSAk
JHtPVVRQVVRfRElSfS9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQcm9jZXNzTWVzc2FnZXMuaApJbmRl
eDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJv
CShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTE0MiwxMCArMTQyLDEyIEBAIERFRklORVMgKz0gQlVJTERJTkdfUVRfXwogCiBXRUJLSVQy
X0dFTkVSQVRFRF9IRUFERVJTID0gXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRl
ZC9XZWJQYWdlTWVzc2FnZXMuaCBcCisgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVk
L1dlYlBhZ2VQcm94eU1lc3NhZ2VzLmggXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVy
YXRlZC9XZWJQcm9jZXNzTWVzc2FnZXMuaAogCiBXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTID0g
XAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRlZC9XZWJQYWdlTWVzc2FnZVJlY2Vp
dmVyLmNwcCBcCisgICAgJCRPVVRQVVRfRElSL1dlYktpdDIvZ2VuZXJhdGVkL1dlYlBhZ2VQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogICAgICQkT1VUUFVUX0RJUi9XZWJLaXQyL2dlbmVyYXRl
ZC9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogCiBIRUFERVJTICs9IFwKQEAgLTE3Nyw3
ICsxNzksNiBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvQVBJL2MvV0tVUkxSZXNwb25zZS5o
IFwKICAgICBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCBc
CiAgICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0L0RyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMu
aCBcCi0gICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5o
IFwKICAgICBTaGFyZWQvQ2FjaGVNb2RlbC5oIFwKICAgICBTaGFyZWQvRHJhd2luZ0FyZWFCYXNl
LmggXAogICAgIFNoYXJlZC9JbW11dGFibGVBcnJheS5oIFwKQEAgLTE4Niw2ICsxODcsNyBAQCBI
RUFERVJTICs9IFwKICAgICBTaGFyZWQvTXV0YWJsZURpY3Rpb25hcnkuaCBcCiAgICAgU2hhcmVk
L05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBcCiAgICAgU2hhcmVkL05vdEltcGxlbWVudGVkLmgg
XAorICAgIFNoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmggXAogICAgIFNoYXJlZC9xdC9NYXBwZWRN
ZW1vcnkuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAogICAg
IFNoYXJlZC9xdC9VcGRhdGVDaHVuay5oIFwKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9IYW5kbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0hhbmRsZU1lc3NhZ2UuaAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvSGFuZGxlTWVzc2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsOCBAQAogCiBu
YW1lc3BhY2UgQ29yZUlQQyB7CiAKKy8vIERpc3BhdGNoIGZ1bmN0aW9ucyB3aXRoIG5vIHJlcGx5
IGFyZ3VtZW50cy4KKwogdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+CiB2b2lkIGNh
bGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMwJiwgQyogb2JqZWN0LCBNRiBmdW5jdGlv
bikKIHsKQEAgLTUxLDYgKzUzLDIwIEBAIHZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFy
Z3VtZW50czcKICAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFy
Z3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3MuYXJndW1lbnQ0LCBhcmdzLmFyZ3VtZW50NSwg
YXJncy5hcmd1bWVudDYsIGFyZ3MuYXJndW1lbnQ3KTsKIH0KIAorLy8gRGlzcGF0Y2ggZnVuY3Rp
b25zIHdpdGggcmVwbHkgYXJndW1lbnRzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFt
ZSBNRiwgdHlwZW5hbWUgUjE+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVu
dHMwJiwgQXJndW1lbnRzMTxSMT4mIHJlcGx5QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikK
K3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKHJlcGx5QXJncy5hcmd1bWVudDEpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUjEsIHR5cGVuYW1lIFIy
Pgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzMCYsIEFyZ3VtZW50czI8
UjEsIFIyPiYgcmVwbHlBcmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmpl
Y3QtPipmdW5jdGlvbikocmVwbHlBcmdzLmFyZ3VtZW50MSwgcmVwbHlBcmdzLmFyZ3VtZW50Mik7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMT4KIHZv
aWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czE8UDE+JiBhcmdzLCBBcmd1bWVu
dHMwJiwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKIHsKQEAgLTYzLDE2ICs3OSw4MSBAQCB2b2lk
IGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMxCiAgICAgKG9iamVjdC0+KmZ1bmN0
aW9uKShhcmdzLmFyZ3VtZW50MSwgcmVwbHlBcmdzLmFyZ3VtZW50MSk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDI+Cit2b2lk
IGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMyPFAxLCBQMj4mIGFyZ3MsIEFyZ3Vt
ZW50czAmLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQoreworICAgIChvYmplY3QtPipmdW5jdGlv
bikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUjE+
Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMyPFAxLCBQMj4mIGFyZ3Ms
IEFyZ3VtZW50czE8UjE+JiByZXBseUFyZ3MsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCit7Cisg
ICAgKG9iamVjdC0+KmZ1bmN0aW9uKShhcmdzLmFyZ3VtZW50MSwgYXJncy5hcmd1bWVudDIsIHJl
cGx5QXJncy5hcmd1bWVudDEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBN
RiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUjE+Cit2
b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVudHMzPFAxLCBQMiwgUDM+JiBhcmdz
LCBBcmd1bWVudHMxPFIxPiYgcmVwbHlBcmdzLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQorewor
ICAgIChvYmplY3QtPipmdW5jdGlvbikoYXJncy5hcmd1bWVudDEsIGFyZ3MuYXJndW1lbnQyLCBh
cmdzLmFyZ3VtZW50MywgcmVwbHlBcmdzLmFyZ3VtZW50MSk7Cit9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUjE+CiB2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25z
dCBBcmd1bWVudHM0PFAxLCBQMiwgUDMsIFA0PiYgYXJncywgQXJndW1lbnRzMTxSMT4mIHJlcGx5
QXJncywgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKIHsKICAgICAob2JqZWN0LT4qZnVuY3Rpb24p
KGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3MuYXJn
dW1lbnQ0LCByZXBseUFyZ3MuYXJndW1lbnQxKTsKIH0KIAorLy8gVmFyaWFkaWMgZGlzcGF0Y2gg
ZnVuY3Rpb25zLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KK3ZvaWQgY2Fs
bE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3VtZW50czAmLCBBcmd1bWVudERlY29kZXIqIGFyZ3Vt
ZW50RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVu
Y3Rpb24pKGFyZ3VtZW50RGVjb2Rlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVu
YW1lIE1GLCB0eXBlbmFtZSBQMT4KK3ZvaWQgY2FsbE1lbWJlckZ1bmN0aW9uKGNvbnN0IEFyZ3Vt
ZW50czE8UDE+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2Jq
ZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1l
bnQxLCBhcmd1bWVudERlY29kZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFt
ZSBNRiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyPgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24o
Y29uc3QgQXJndW1lbnRzMjxQMSwgUDI+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50
RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rp
b24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJndW1lbnREZWNvZGVyKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgTUYsIHR5cGVuYW1lIFAxLCB0eXBlbmFt
ZSBQMiwgdHlwZW5hbWUgUDM+Cit2b2lkIGNhbGxNZW1iZXJGdW5jdGlvbihjb25zdCBBcmd1bWVu
dHMzPFAxLCBQMiwgUDM+JiBhcmdzLCBBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50RGVjb2Rlciwg
Qyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAob2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3Mu
YXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5hcmd1bWVudDMsIGFyZ3VtZW50RGVjb2Rl
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQND4KK3ZvaWQgY2FsbE1lbWJlckZ1
bmN0aW9uKGNvbnN0IEFyZ3VtZW50czQ8UDEsIFAyLCBQMywgUDQ+JiBhcmdzLCBBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAo
b2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5h
cmd1bWVudDMsIGFyZ3MuYXJndW1lbnQ0LCBhcmd1bWVudERlY29kZXIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRiwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBl
bmFtZSBQMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIFA1Pgordm9pZCBjYWxsTWVtYmVyRnVuY3Rp
b24oY29uc3QgQXJndW1lbnRzNTxQMSwgUDIsIFAzLCBQNCwgUDU+JiBhcmdzLCBBcmd1bWVudERl
Y29kZXIqIGFyZ3VtZW50RGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlvbikKK3sKKyAgICAo
b2JqZWN0LT4qZnVuY3Rpb24pKGFyZ3MuYXJndW1lbnQxLCBhcmdzLmFyZ3VtZW50MiwgYXJncy5h
cmd1bWVudDMsIGFyZ3MuYXJndW1lbnQ0LCBhcmdzLmFyZ3VtZW50NSwgYXJndW1lbnREZWNvZGVy
KTsKK30KKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GLCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDUsIHR5
cGVuYW1lIFA2Pgordm9pZCBjYWxsTWVtYmVyRnVuY3Rpb24oY29uc3QgQXJndW1lbnRzNjxQMSwg
UDIsIFAzLCBQNCwgUDUsIFA2PiYgYXJncywgQXJndW1lbnREZWNvZGVyKiBhcmd1bWVudERlY29k
ZXIsIEMqIG9iamVjdCwgTUYgZnVuY3Rpb24pCit7CisgICAgKG9iamVjdC0+KmZ1bmN0aW9uKShh
cmdzLmFyZ3VtZW50MSwgYXJncy5hcmd1bWVudDIsIGFyZ3MuYXJndW1lbnQzLCBhcmdzLmFyZ3Vt
ZW50NCwgYXJncy5hcmd1bWVudDUsIGFyZ3MuYXJndW1lbnQ2LCBhcmd1bWVudERlY29kZXIpOwor
fQorCisKKy8vIE1haW4gZGlzcGF0Y2ggZnVuY3Rpb25zCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GPgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVj
b2RlciogYXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9uKQogewotICAgIHR5
cGVuYW1lIFQ6OlZhbHVlVHlwZSBhcmd1bWVudHM7CisgICAgdHlwZW5hbWUgVDo6RGVjb2RlVHlw
ZTo6VmFsdWVUeXBlIGFyZ3VtZW50czsKICAgICBpZiAoIWFyZ3VtZW50RGVjb2Rlci0+ZGVjb2Rl
KGFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybjsKICAgICBjYWxsTWVtYmVyRnVuY3Rpb24oYXJn
dW1lbnRzLCBvYmplY3QsIGZ1bmN0aW9uKTsKQEAgLTgxLDcgKzE2Miw3IEBAIHZvaWQgaGFuZGxl
TWVzc2FnZShBcmd1bWVudERlY29kZXIqIGFyZ3UKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEMsIHR5cGVuYW1lIE1GPgogdm9pZCBoYW5kbGVNZXNzYWdlKEFyZ3VtZW50RGVjb2Rlciog
YXJndW1lbnREZWNvZGVyLCBBcmd1bWVudEVuY29kZXIqIHJlcGx5RW5jb2RlciwgQyogb2JqZWN0
LCBNRiBmdW5jdGlvbikKIHsKLSAgICB0eXBlbmFtZSBUOjpWYWx1ZVR5cGUgYXJndW1lbnRzOwor
ICAgIHR5cGVuYW1lIFQ6OkRlY29kZVR5cGU6OlZhbHVlVHlwZSBhcmd1bWVudHM7CiAgICAgaWYg
KCFhcmd1bWVudERlY29kZXItPmRlY29kZShhcmd1bWVudHMpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTkwLDYgKzE3MSwxNSBAQCB2b2lkIGhhbmRsZU1lc3NhZ2UoQXJndW1lbnREZWNvZGVyKiBh
cmd1CiAgICAgcmVwbHlFbmNvZGVyLT5lbmNvZGUocmVwbHlBcmd1bWVudHMpOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBNRj4KK3ZvaWQgaGFuZGxlTWVz
c2FnZVZhcmlhZGljKEFyZ3VtZW50RGVjb2RlciogYXJndW1lbnREZWNvZGVyLCBDKiBvYmplY3Qs
IE1GIGZ1bmN0aW9uKQoreworICAgIHR5cGVuYW1lIFQ6OkRlY29kZVR5cGU6OlZhbHVlVHlwZSBh
cmd1bWVudHM7CisgICAgaWYgKCFhcmd1bWVudERlY29kZXItPmRlY29kZShhcmd1bWVudHMpKQor
ICAgICAgICByZXR1cm47CisgICAgY2FsbE1lbWJlckZ1bmN0aW9uKGFyZ3VtZW50cywgYXJndW1l
bnREZWNvZGVyLCBvYmplY3QsIGZ1bmN0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQ
QwogCiAjZW5kaWYgLy8gSGFuZGxlTWVzc2FnZV9oCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAi
UHJvY2Vzc0xhdW5jaGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgi
CiAjaW5jbHVkZSAiV29ya0l0ZW0uaCIKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVk
ZSA8UUxvY2FsU2VydmVyPgpJbmRleDogV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHJl
dmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDkgQEAgY2xhc3MgTWVzc2FnZVJlY2VpdmVyKG9iamVj
dCk6CiAgICAgZGVmIGl0ZXJwYXJhbWV0ZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gKHBhcmFt
ZXRlciBmb3IgbWVzc2FnZSBpbiBzZWxmLm1lc3NhZ2VzIGZvciBwYXJhbWV0ZXIgaW4gbWVzc2Fn
ZS5wYXJhbWV0ZXJzKQogCisgICAgZGVmIGl0ZXJyZXBseXBhcmFtZXRlcnMoc2VsZik6CisgICAg
ICAgIHJldHVybiAocmVwbHlfcGFyYW1ldGVyIGZvciBtZXNzYWdlIGluIHNlbGYubWVzc2FnZXMg
Zm9yIHJlcGx5X3BhcmFtZXRlciBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMpCisKICAgICBA
Y2xhc3NtZXRob2QKICAgICBkZWYgcGFyc2UoY2xzLCBmaWxlKToKICAgICAgICAgZGVzdGluYXRp
b24gPSBOb25lCkBAIC0xMDcsNiArMTEwLDEwIEBAIGNsYXNzIE1lc3NhZ2Uob2JqZWN0KToKICAg
ICAgICAgaWYgc2VsZi5yZXBseV9wYXJhbWV0ZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAg
c2VsZi5kZWxheWVkID0gZGVsYXllZAogICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlv
bgorICAgICAgICBpZiBsZW4oc2VsZi5wYXJhbWV0ZXJzKSAhPSAwOgorICAgICAgICAgICAgc2Vs
Zi5pc192YXJpYWRpYyA9IHBhcmFtZXRlcl90eXBlX2lzX3ZhcmlhZGljKHNlbGYucGFyYW1ldGVy
c1stMV0udHlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaXNfdmFyaWFkaWMg
PSBGYWxzZQogCiAgICAgZGVmIGlkKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzSUQnICUgc2Vs
Zi5uYW1lCkBAIC0xNDAsNiArMTQ3LDEzIEBAIGRlZiBtZXNzYWdlc190b19raW5kX2VudW0obWVz
c2FnZXMpOgogICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKIAogCitkZWYgcGFyYW1ldGVyX3R5
cGVfaXNfdmFyaWFkaWModHlwZSk6CisgICAgdmFyaWFkaWNfdHlwZXMgPSBmcm96ZW5zZXQoWwor
ICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlcicsCisgICAg
XSkKKworICAgIHJldHVybiB0eXBlIGluIHZhcmlhZGljX3R5cGVzCisKIGRlZiBmdW5jdGlvbl9w
YXJhbWV0ZXJfdHlwZSh0eXBlKToKICAgICAjIERvbid0IHVzZSByZWZlcmVuY2VzIGZvciBidWls
dC1pbiB0eXBlcy4KICAgICBidWlsdGluX3R5cGVzID0gZnJvemVuc2V0KFsKQEAgLTE1MCw2ICsx
NjQsMTAgQEAgZGVmIGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHR5cGUpOgogICAgICAgICAndWlu
dDE2X3QnLAogICAgICAgICAndWludDMyX3QnLAogICAgICAgICAndWludDY0X3QnLAorICAgICAg
ICAnaW50OF90JywKKyAgICAgICAgJ2ludDE2X3QnLAorICAgICAgICAnaW50MzJfdCcsCisgICAg
ICAgICdpbnQ2NF90JywKICAgICBdKQogCiAgICAgaWYgdHlwZSBpbiBidWlsdGluX3R5cGVzOgpA
QCAtMTc3LDYgKzE5NSwxMiBAQCBkZWYgcmVwbHlfdHlwZShtZXNzYWdlKToKICAgICByZXR1cm4g
YXJndW1lbnRzX3R5cGUobWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzLCByZXBseV9wYXJhbWV0ZXJf
dHlwZSkKIAogCitkZWYgZGVjb2RlX3R5cGUobWVzc2FnZSk6CisgICAgaWYgbWVzc2FnZS5pc192
YXJpYWRpYzoKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50c190eXBlKG1lc3NhZ2UucGFyYW1ldGVy
c1s6LTFdLCByZXBseV9wYXJhbWV0ZXJfdHlwZSkKKyAgICByZXR1cm4gYmFzZV9jbGFzcyhtZXNz
YWdlKQorCisKIGRlZiBkZWxheWVkX3JlcGx5X3R5cGUobWVzc2FnZSk6CiAgICAgcmV0dXJuIGFy
Z3VtZW50c190eXBlKG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycywgZnVuY3Rpb25fcGFyYW1ldGVy
X3R5cGUpCiAKQEAgLTE4OSw2ICsyMTMsOCBAQCBkZWYgbWVzc2FnZV90b19zdHJ1Y3RfZGVjbGFy
YXRpb24obWVzc2FnCiAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN0YXRpYyBjb25zdCBLaW5kIG1l
c3NhZ2VJRCA9ICVzO1xuJyAlIG1lc3NhZ2UuaWQoKSkKICAgICBpZiBtZXNzYWdlLnJlcGx5X3Bh
cmFtZXRlcnMgIT0gTm9uZToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHR5cGVkZWYgJXMg
UmVwbHk7XG4nICUgcmVwbHlfdHlwZShtZXNzYWdlKSkKKworICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICB0eXBlZGVmICVzIERlY29kZVR5cGU7XG4nICUgZGVjb2RlX3R5cGUobWVzc2FnZSkpCiAgICAg
aWYgbGVuKGZ1bmN0aW9uX3BhcmFtZXRlcnMpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
JXMlcyglcyknICUgKGxlbihmdW5jdGlvbl9wYXJhbWV0ZXJzKSA9PSAxIGFuZCAnZXhwbGljaXQg
JyBvciAnJywgbWVzc2FnZS5uYW1lLCAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGluIGZ1
bmN0aW9uX3BhcmFtZXRlcnNdKSkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuICAgICAgICA6
ICVzKCVzKVxuJyAlIChiYXNlX2NsYXNzKG1lc3NhZ2UpLCAnLCAnLmpvaW4oW3hbMV0gZm9yIHgg
aW4gZnVuY3Rpb25fcGFyYW1ldGVyc10pKSkKQEAgLTI5OSw5ICszMjUsMTMgQEAgZGVmIGhhbmRs
ZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpOgogCiAKIGRlZiBhc3luY19jYXNlX3N0YXRl
bWVudChyZWNlaXZlciwgbWVzc2FnZSk6CisgICAgZGlzcGF0Y2hfZnVuY3Rpb24gPSAnaGFuZGxl
TWVzc2FnZScKKyAgICBpZiBtZXNzYWdlLmlzX3ZhcmlhZGljOgorICAgICAgICBkaXNwYXRjaF9m
dW5jdGlvbiArPSAnVmFyaWFkaWMnCisKICAgICByZXN1bHQgPSBbXQogICAgIHJlc3VsdC5hcHBl
bmQoJyAgICBjYXNlIE1lc3NhZ2VzOjolczo6JXM6XG4nICUgKHJlY2VpdmVyLm5hbWUsIG1lc3Nh
Z2UuaWQoKSkpCi0gICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBDb3JlSVBDOjpoYW5kbGVNZXNz
YWdlPE1lc3NhZ2VzOjolczo6JXM+KGFyZ3VtZW50cywgdGhpcywgJiVzKTtcbicgJSAocmVjZWl2
ZXIubmFtZSwgbWVzc2FnZS5uYW1lLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdl
KSkpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBDb3JlSVBDOjolczxNZXNzYWdlczo6JXM6
OiVzPihhcmd1bWVudHMsIHRoaXMsICYlcyk7XG4nICUgKGRpc3BhdGNoX2Z1bmN0aW9uLCByZWNl
aXZlci5uYW1lLCBtZXNzYWdlLm5hbWUsIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3Nh
Z2UpKSkKICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgcmV0dXJu
IHN1cnJvdW5kX2luX2NvbmRpdGlvbignJy5qb2luKHJlc3VsdCksIG1lc3NhZ2UuY29uZGl0aW9u
KQogCkBAIC0zMjQsNiArMzU0LDcgQEAgZGVmIGFyZ3VtZW50X2NvZGVyX2hlYWRlcnNfZm9yX3R5
cGUodHlwZQogCiAgICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3RyaW5nJzog
JyJBcmd1bWVudENvZGVycy5oIicsCisgICAgICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VFbmNvZGVyJzogJyJJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgiJywK
ICAgICB9CiAKICAgICBpZiB0eXBlIGluIHNwZWNpYWxfY2FzZXM6CkBAIC0zODMsNiArNDE0LDE4
IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIoZmlsZSk6CiAgICAgICAgIHR5cGVfaGVh
ZGVycyA9IGhlYWRlcnNfZm9yX3R5cGUodHlwZSkKICAgICAgICAgaGVhZGVycy51cGRhdGUodHlw
ZV9oZWFkZXJzKQogCisgICAgZm9yIG1lc3NhZ2UgaW4gcmVjZWl2ZXIubWVzc2FnZXM6CisgICAg
ICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IGZvciByZXBseV9wYXJhbWV0ZXIgaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzOgorICAgICAg
ICAgICAgICAgIHR5cGUgPSByZXBseV9wYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50X2VuY29kZXJfaGVhZGVycyA9IGFyZ3VtZW50X2NvZGVyX2hlYWRlcnNfZm9yX3R5cGUo
dHlwZSkKKyAgICAgICAgICAgICAgICBpZiBhcmd1bWVudF9lbmNvZGVyX2hlYWRlcnM6CisgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGFyZ3VtZW50X2VuY29kZXJfaGVhZGVycykK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHR5cGVfaGVh
ZGVycyA9IGhlYWRlcnNfZm9yX3R5cGUodHlwZSkKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnVw
ZGF0ZSh0eXBlX2hlYWRlcnMpCisKICAgICByZXN1bHQgPSBbXQogCiAgICAgcmVzdWx0LmFwcGVu
ZChfbGljZW5zZV9oZWFkZXIpCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9TdHJpbmdQYWlyVmVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvU3RyaW5nUGFpclZlY3Rvci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdHJpbmdQYWlyVmVjdG9y
X2gKKyNkZWZpbmUgU3RyaW5nUGFpclZlY3Rvcl9oCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVy
cy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgY2xhc3MgaXMgYSBoYWNrIHRv
IHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgdGhlIElQQyBtZXNzYWdlIGdlbmVyYXRvcgorLy8g
Y2Fubm90IGRlYWwgd2l0aCBjbGFzcyB0ZW1wbGF0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmFt
dGVyLgorY2xhc3MgU3RyaW5nUGFpclZlY3RvciB7CitwdWJsaWM6CisgICAgU3RyaW5nUGFpclZl
Y3RvcigpCisgICAgeworICAgIH0KKworICAgIFN0cmluZ1BhaXJWZWN0b3IoVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBzdHJpbmdQYWlyVmVjdG9yKQorICAgIHsKKyAgICAgICAg
bV9zdHJpbmdQYWlyVmVjdG9yLnN3YXAoc3RyaW5nUGFpclZlY3Rvcik7CisgICAgfQorCisgICAg
dm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc3RyaW5nUGFpclZlY3Rvcik7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgU3RyaW5nUGFpclZlY3RvciYgc3RyaW5nUGFpclZlY3RvcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBkZWNvZGVyLT5kZWNvZGUoc3RyaW5nUGFpclZlY3Rvci5tX3N0cmluZ1BhaXJWZWN0b3Ip
OworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4m
IHN0cmluZ1BhaXJWZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1BhaXJWZWN0b3I7IH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+IG1fc3Ry
aW5nUGFpclZlY3RvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
U3RyaW5nUGFpclZlY3Rvcl9oCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9X
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9D
b3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkocmV2aXNpb24gNjkzMTcp
CisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2lu
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKLSNkZWZpbmUgV2ViUGFnZVByb3h5TWVzc2Fn
ZUtpbmRzX2gKLQotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotCi0vLyBNZXNzYWdlcyBzZW50IGZy
b20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBXZWJQYWdlUHJveHkuCi0KLW5hbWVzcGFjZSBXZWJQ
YWdlUHJveHlNZXNzYWdlIHsKLQotZW51bSBLaW5kIHsKLSAgICBDcmVhdGVOZXdQYWdlLAotICAg
IFNob3dQYWdlLAotICAgIFJ1bkphdmFTY3JpcHRBbGVydCwKLSAgICBSdW5KYXZhU2NyaXB0Q29u
ZmlybSwKLSAgICBSdW5KYXZhU2NyaXB0UHJvbXB0LAotCi0gICAgQ2xvc2VQYWdlLAotICAgIENv
bnRlbnRzU2l6ZUNoYW5nZWQsCi0gICAgRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUsCi0gICAgRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICBEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24sCi0gICAgRGlkQ2hhbmdlUHJvZ3Jlc3MsCi0gICAgRGlkQ29tbWl0TG9hZEZvckZy
YW1lLAotICAgIERpZENyZWF0ZU1haW5GcmFtZSwKLSAgICBEaWRDcmVhdGVTdWJGcmFtZSwKLSAg
ICBEaWRGYWlsTG9hZEZvckZyYW1lLAotICAgIERpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSwKLSAgICBEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSwKLSAgICBEaWRGaW5pc2hMb2Fk
Rm9yRnJhbWUsCi0gICAgRGlkRmluaXNoUHJvZ3Jlc3MsCi0gICAgRGlkRmlyc3RMYXlvdXRGb3JG
cmFtZSwKLSAgICBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSwKLSAgICBE
aWRHZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbiwKLSAgICBEaWRHZXRTb3VyY2VG
b3JGcmFtZSwKLSAgICBEaWRSZWNlaXZlRXZlbnQsCi0gICAgRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCi0gICAgRGlkUmVjZWl2ZVRpdGxlRm9yRnJh
bWUsCi0gICAgRGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5LAotICAgIERpZFJ1bkphdmFTY3Jp
cHRJbk1haW5GcmFtZSwKLSAgICBEaWRTZXRGcmFtZSwKLSAgICBEaWRTdGFydFByb2dyZXNzLAot
ICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCi0gICAgRGlkVmFsaWRhdGVNZW51
SXRlbSwKLSAgICBNb3VzZURpZE1vdmVPdmVyRWxlbWVudCwKLSAgICBTZXRDdXJzb3IsCi0gICAg
U2V0U3RhdHVzVGV4dCwKLSAgICBTZXRUb29sVGlwLAotICAgIFRha2VGb2N1cywKLSAgICBXaWxs
U3VibWl0Rm9ybSwKLQotICAgIEJhY2tGb3J3YXJkQWRkSXRlbSwKLSAgICBCYWNrRm9yd2FyZEdv
VG9JdGVtLAotICAgIEJhY2tGb3J3YXJkQmFja0l0ZW0sCi0gICAgQmFja0ZvcndhcmRDdXJyZW50
SXRlbSwKLSAgICBCYWNrRm9yd2FyZEZvcndhcmRJdGVtLAotICAgIEJhY2tGb3J3YXJkSXRlbUF0
SW5kZXgsCi0gICAgQmFja0ZvcndhcmRCYWNrTGlzdENvdW50LAotICAgIEJhY2tGb3J3YXJkRm9y
d2FyZExpc3RDb3VudCwKLQotICAgIFJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvLAotICAgIENs
ZWFyQWxsRWRpdENvbW1hbmRzLAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIERpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsCi0jZW5kaWYKLX07Ci0KLX0KLQot
bmFtZXNwYWNlIENvcmVJUEMgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBNZXNzYWdlS2luZFRyYWl0
czxXZWJQYWdlUHJveHlNZXNzYWdlOjpLaW5kPiB7IAotICAgIHN0YXRpYyBjb25zdCBNZXNzYWdl
Q2xhc3MgbWVzc2FnZUNsYXNzID0gTWVzc2FnZUNsYXNzV2ViUGFnZVByb3h5OwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzX2gKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgJKHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFBhZ2VDbGllbnRf
aAogI2RlZmluZSBQYWdlQ2xpZW50X2gKIAorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDggKzQ5
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3Jl
OjpDdXJzb3ImKSA9IDA7CiAKLSAgICBlbnVtIFVuZG9PclJlZG8geyBVbmRvLCBSZWRvIH07Ci0g
ICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29t
bWFuZFByb3h5PiwgVW5kb09yUmVkbykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKSA9IDA7CiAKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCShyZXZpc2lvbiA2OTMxNykK
KysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgV2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGFnZS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5kSUQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLSAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JSZWRvKHRoaXMpOworICAg
IG1fcGFnZS0+cmVnaXN0ZXJFZGl0Q29tbWFuZCh0aGlzLCBXZWJQYWdlUHJveHk6OlVuZG8pOwog
fQogCiB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQpAQCAtNjIsNyArNjIsNyBA
QCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX3BhZ2UtPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVhcHBseUVk
aXRDb21tYW5kKG1fY29tbWFuZElEKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5y
ZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh0aGlzKTsKKyAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRp
dENvbW1hbmQodGhpcywgV2ViUGFnZVByb3h5OjpSZWRvKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkocmV2aXNpb24gNjkz
MTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIFdlYkZvcm1DbGllbnQ6OmluaXRpYWxpemUoY29uc3Qg
V0tQCiAgICAgICAgIG1lbXNldCgmbV9wYWdlRm9ybUNsaWVudCwgMCwgc2l6ZW9mKG1fcGFnZUZv
cm1DbGllbnQpKTsKIH0KIAotYm9vbCBXZWJGb3JtQ2xpZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQ
YWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVByb3h5KiBzb3Vy
Y2VGcmFtZSwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFs
dWVzLCBBUElPYmplY3QqIHVzZXJEYXRhLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkq
IGxpc3RlbmVyKQorYm9vbCBXZWJGb3JtQ2xpZW50Ojp3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJv
eHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFtZVByb3h5KiBzb3VyY2VGcmFt
ZSwgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgdGV4dEZpZWxkVmFs
dWVzLCBBUElPYmplY3QqIHVzZXJEYXRhLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkq
IGxpc3RlbmVyKQogewogICAgIGlmICghbV9wYWdlRm9ybUNsaWVudC53aWxsU3VibWl0Rm9ybSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRm9ybUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkZvcm1DbGllbnQuaAko
cmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIFdlYkZvcm1DbGllbnQo
KTsKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgV0tQYWdlRm9ybUNsaWVudCopOwogCi0gICAg
Ym9vbCB3aWxsU3VibWl0Rm9ybShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViRnJh
bWVQcm94eSosIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHRleHRGaWVsZFZh
bHVlcywgQVBJT2JqZWN0KiB1c2VyRGF0YSwgV2ViRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5
Kik7IAorICAgIGJvb2wgd2lsbFN1Ym1pdEZvcm0oV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
PiA+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSU9iamVjdCogdXNlckRhdGEsIFdlYkZvcm1TdWJtaXNz
aW9uTGlzdGVuZXJQcm94eSopOyAKIAogcHJpdmF0ZToKICAgICBXS1BhZ2VGb3JtQ2xpZW50IG1f
cGFnZUZvcm1DbGllbnQ7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlz
aW9uIDY5MzE3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1
ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisj
aW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rvci5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlz
dC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJD
ZXJ0aWZpY2F0ZUluZm8uaCIKQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlICJXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZU5hbWVzcGFjZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5k
cy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01h
bmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTU0MCwzNDkgKzU0
MCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHN3aXRjaCAobWVzc2FnZUlELmdldDxXZWJQYWdlUHJveHlN
ZXNzYWdlOjpLaW5kPigpKSB7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlk
Q3JlYXRlTWFpbkZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShmcmFtZUlEKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBkaWRDcmVhdGVNYWluRnJhbWUoZnJhbWVJRCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZENyZWF0ZVN1YkZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShmcmFtZUlEKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBkaWRDcmVhdGVTdWJGcmFtZShmcmFtZUlEKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0
X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0KLSAgICAgICAgICAgIFJlZlB0
cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdl
RGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0
KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChm
cmFtZUlELCB1cmwsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+
d2ViRnJhbWUoZnJhbWVJRCksIHVybCwgdXNlckRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZTogewotICAgICAgICAg
ICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0KLSAgICAgICAg
ICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVz
ZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgp
LT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJ
UEM6Ok91dChmcmFtZUlELCB1cmwsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1cmwsIHVzZXJE
YXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
V2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOiB7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBS
ZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVz
c2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29u
dGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpP
dXQoZnJhbWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShwcm9jZXNzKCktPndl
YkZyYW1lKGZyYW1lSUQpLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENvbW1pdExvYWRG
b3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIFN0
cmluZyBtaW1lVHlwZTsKLSAgICAgICAgICAgIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvIGNlcnRp
ZmljYXRlSW5mbzsKLQotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0g
ICAgICAgICAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVz
ZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1pbWVUeXBlLCBjZXJ0aWZp
Y2F0ZUluZm8sIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
IAotICAgICAgICAgICAgZGlkQ29tbWl0TG9hZEZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUo
ZnJhbWVJRCksIG1pbWVUeXBlLCBjZXJ0aWZpY2F0ZUluZm8sIHVzZXJEYXRhLmdldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwot
ICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1
c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVjb2Rlcikp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWUocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdl
UHJveHlNZXNzYWdlOjpEaWRGaW5pc2hMb2FkRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwot
ICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1
c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCBtZXNzYWdlRGVjb2Rlcikp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkRmluaXNoTG9hZEZv
ckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6RGlkRmFpbExvYWRGb3JGcmFtZTogewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJ
RDsKLQotICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgICAgICAg
ICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBw
YWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRGYWlsTG9hZEZvckZyYW1lKHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVj
ZWl2ZVRpdGxlRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAg
ICAgICAgICBTdHJpbmcgdGl0bGU7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IHVz
ZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdl
RGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwotCi0gICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlELCB0aXRsZSwg
bWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHRp
dGxlLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWU6IHsK
LSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxBUElP
YmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2Rl
ciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOwot
Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChmcmFtZUlE
LCBtZXNzYWdlRGVjb2RlcikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCB1
c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckZyYW1lOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotCi0gICAgICAgICAgICBS
ZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVz
c2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29u
dGV4dCgpKTsKLQotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpP
dXQoZnJhbWVJRCwgbWVzc2FnZURlY29kZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHByb2Nl
c3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHVzZXJEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVt
b3ZlRnJhbWVGcm9tSGllcmFyY2h5OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwot
Ci0gICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdl
YkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VO
YW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBkaWRSZWNlaXZlV2ViUGFnZVByb3h5TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAKLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG1lc3NhZ2VEZWNvZGVyKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZW1vdmVGcmFtZUZy
b21IaWVyYXJjaHkocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgdXNlckRhdGEuZ2V0KCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJv
eHlNZXNzYWdlOjpEaWRTdGFydFByb2dyZXNzOgotICAgICAgICAgICAgZGlkU3RhcnRQcm9ncmVz
cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6RGlkQ2hhbmdlUHJvZ3Jlc3M6IHsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZTsKLSAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGRpZENoYW5nZVByb2dyZXNzKHZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlk
RmluaXNoUHJvZ3Jlc3M6Ci0gICAgICAgICAgICBkaWRGaW5pc2hQcm9ncmVzcygpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkUmVjZWl2
ZUV2ZW50OiB7Ci0gICAgICAgICAgICB1aW50MzJfdCB0eXBlOwotICAgICAgICAgICAgYm9vbCBo
YW5kbGVkOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQo
dHlwZSwgaGFuZGxlZCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRp
ZFJlY2VpdmVFdmVudCgoV2ViRXZlbnQ6OlR5cGUpdHlwZSwgaGFuZGxlZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlRh
a2VGb2N1czogewotICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBlbnVtIGhlcmUuCi0gICAgICAg
ICAgICBib29sIGRpcmVjdGlvbjsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
ZGlyZWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0YWtlRm9j
dXMoZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjog
ewotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIHVpbnQzMl90IG5h
dmlnYXRpb25UeXBlOwotICAgICAgICAgICAgdWludDMyX3QgbW9kaWZpZXJzOwotICAgICAgICAg
ICAgaW50MzJfdCBtb3VzZUJ1dHRvbjsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRl
Y29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91
c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJRCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24ocHJvY2VzcygpLT53ZWJG
cmFtZShmcmFtZUlEKSwgc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG5hdmlnYXRpb25UeXBl
KSwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKSwgc3RhdGljX2Nh
c3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihtb3VzZUJ1dHRvbiksIHVybCwgbGlzdGVuZXJJRCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OkRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbjogewotICAgICAgICAgICAg
dWludDY0X3QgZnJhbWVJRDsKLSAgICAgICAgICAgIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlOwot
ICAgICAgICAgICAgdWludDMyX3QgbW9kaWZpZXJzOwotICAgICAgICAgICAgaW50MzJfdCBtb3Vz
ZUJ1dHRvbjsKLSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAgICAgICB1aW50NjRfdCBs
aXN0ZW5lcklEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpP
dXQoZnJhbWVJRCwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwg
bGlzdGVuZXJJRCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBz
dGF0aWNfY2FzdDxOYXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpLCBzdGF0aWNfY2FzdDxX
ZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpLCBzdGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50
OjpCdXR0b24+KG1vdXNlQnV0dG9uKSwgdXJsLCBsaXN0ZW5lcklEKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRl
UG9saWN5Rm9yTUlNRVR5cGU6IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAg
ICAgICAgICBTdHJpbmcgTUlNRVR5cGU7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAgICAg
ICAgICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5k
ZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIE1JTUVUeXBlLCB1cmwsIGxpc3RlbmVySUQpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWNpZGVQb2xpY3lGb3JNSU1F
VHlwZShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBNSU1FVHlwZSwgdXJsLCBsaXN0ZW5l
cklEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6V2lsbFN1Ym1pdEZvcm06IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGZy
YW1lSUQ7Ci0gICAgICAgICAgICB1aW50NjRfdCBzb3VyY2VGcmFtZUlEOwotICAgICAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiB0ZXh0RmllbGRWYWx1ZXM7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEOwotCi0gICAgICAgICAgICBSZWZQdHI8QVBJT2Jq
ZWN0PiB1c2VyRGF0YTsKLSAgICAgICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIg
bWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwg
c291cmNlRnJhbWVJRCwgdGV4dEZpZWxkVmFsdWVzLCBsaXN0ZW5lcklELCBtZXNzYWdlRGVjb2Rl
cikpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgd2lsbFN1Ym1pdEZv
cm0ocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgcHJvY2VzcygpLT53ZWJGcmFtZShzb3Vy
Y2VGcmFtZUlEKSwgdGV4dEZpZWxkVmFsdWVzLCB1c2VyRGF0YS5nZXQoKSwgbGlzdGVuZXJJRCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OkRpZFJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZTogewotICAgICAgICAgICAgU3Ry
aW5nIHJlc3VsdFN0cmluZzsKLSAgICAgICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQ7Ci0gICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChyZXN1bHRTdHJpbmcs
IGNhbGxiYWNrSUQpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkaWRS
dW5KYXZhU2NyaXB0SW5NYWluRnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6RGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb246IHsKLSAgICAgICAgICAg
IFN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwot
ICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQocmVzdWx0U3Ry
aW5nLCBjYWxsYmFja0lEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ZGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24ocmVzdWx0U3RyaW5nLCBjYWxs
YmFja0lEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2Vi
UGFnZVByb3h5TWVzc2FnZTo6RGlkR2V0U291cmNlRm9yRnJhbWU6IHsKLSAgICAgICAgICAgIFN0
cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lEOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQocmVzdWx0U3RyaW5n
LCBjYWxsYmFja0lEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZGlk
R2V0U291cmNlRm9yRnJhbWUocmVzdWx0U3RyaW5nLCBjYWxsYmFja0lEKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0
VG9vbFRpcDogewotICAgICAgICAgICAgU3RyaW5nIHRvb2xUaXA7Ci0gICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKHRvb2xUaXApKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHNldFRvb2xUaXAodG9vbFRpcCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNldEN1cnNvcjogewotI2lm
IFVTRShMQVpZX05BVElWRV9DVVJTT1IpCi0gICAgICAgICAgICBDdXJzb3IgY3Vyc29yOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShjdXJzb3IpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIHNldEN1cnNvcihjdXJzb3IpOwotI2VuZGlmCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OlNob3dQYWdlOiB7Ci0gICAgICAgICAgICBzaG93UGFnZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpDbG9zZVBhZ2U6
IHsKLSAgICAgICAgICAgIGNsb3NlUGFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEFkZEl0ZW06
IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGl0ZW1JRDsKLSAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGl0ZW1JRCkpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGFkZEl0ZW1Ub0JhY2tGb3J3YXJkTGlzdChwcm9jZXNzKCktPndlYkJh
Y2tGb3J3YXJkSXRlbShpdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRHb1RvSXRlbTogewot
ICAgICAgICAgICAgdWludDY0X3QgaXRlbUlEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMt
PmRlY29kZShDb3JlSVBDOjpPdXQoaXRlbUlEKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgZ29Ub0l0ZW1JbkJhY2tGb3J3YXJkTGlzdChwcm9jZXNzKCktPndlYkJhY2tG
b3J3YXJkSXRlbShpdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6Q29udGVudHNTaXplQ2hhbmdlZDogewotICAg
ICAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICAgICAgdWludDY0X3QgZnJhbWVJRDsKLSAg
ICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIHNp
emUpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250ZW50c1NpemVD
aGFuZ2VkKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCksIHNpemUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRT
dGF0dXNUZXh0OiB7Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgIGlmICgh
YXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KHRleHQpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBzZXRTdGF0dXNUZXh0KHRleHQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpSZWdpc3Rl
ckVkaXRDb21tYW5kRm9yVW5kbzogewotICAgICAgICAgICAgdWludDY0X3QgY29tbWFuZElEOwot
ICAgICAgICAgICAgdWludDMyX3QgZWRpdEFjdGlvbjsKLSAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNvbW1hbmRJRCwgZWRpdEFjdGlvbikpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlZ2lzdGVy
RWRpdENvbW1hbmRGb3JVbmRvKGNvbW1hbmRJRCwgc3RhdGljX2Nhc3Q8RWRpdEFjdGlvbj4oZWRp
dEFjdGlvbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
ZWJQYWdlUHJveHlNZXNzYWdlOjpDbGVhckFsbEVkaXRDb21tYW5kczoKLSAgICAgICAgICAgIGNs
ZWFyQWxsRWRpdENvbW1hbmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
ZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRWYWxpZGF0ZU1lbnVJdGVtOiB7Ci0gICAgICAgICAgICBp
bnQgc3RhdGU7Ci0gICAgICAgICAgICBib29sIGlzRW5hYmxlZDsKLSAgICAgICAgICAgIFN0cmlu
ZyBjb21tYW5kTmFtZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQ
Qzo6T3V0KGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgbV9wYWdlQ2xpZW50LT5zZXRFZGl0Q29tbWFuZFN0YXRlKGNv
bW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6TW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQ6IHsKLSAgICAgICAgICAgIHVpbnQzMl90IG1vZGlmaWVyczsKLSAgICAgICAgICAgIFJl
ZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgICAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNz
YWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250
ZXh0KCkpOwotCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91
dChtb2RpZmllcnMsIG1lc3NhZ2VEZWNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChzdGF0aWNfY2FzdDxXZWJFdmVu
dDo6TW9kaWZpZXJzPihtb2RpZmllcnMpLCB1c2VyRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBhcmd1bWVudHMsIENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogcmVwbHkpCkBAIC04OTIs
MTA1ICs1NTEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKG1lc3NhZ2VJRC5nZXQ8V2ViUGFn
ZVByb3h5TWVzc2FnZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkNyZWF0ZU5ld1BhZ2U6IHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG5l
d1BhZ2UgPSBjcmVhdGVOZXdQYWdlKCk7Ci0gICAgICAgICAgICBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBpZiAobmV3UGFnZSkgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBQYXNzIHRoZSByZWFsIHNpemUuCi0gICAgICAgICAgICAgICAgcGFy
YW1ldGVycyA9IG5ld1BhZ2UtPmNyZWF0aW9uUGFyYW1ldGVycyhJbnRTaXplKDEwMCwgMTAwKSk7
Ci0gICAgICAgICAgICAgICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihuZXdQYWdlLT5wYWdl
SUQoKSwgcGFyYW1ldGVycykpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICByZXBseS0+ZW5jb2RlKENvcmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKSwgcGFy
YW1ldGVycykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpSdW5KYXZhU2NyaXB0QWxlcnQ6IHsK
LSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2Fn
ZTsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1l
SUQsIG1lc3NhZ2UpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBydW5K
YXZhU2NyaXB0QWxlcnQocHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSwgbWVzc2FnZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1l
c3NhZ2U6OlJ1bkphdmFTY3JpcHRDb25maXJtOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHByb2JhYmx5IGVuY29kZSBzb21ldGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0aGUgYXJn
dW1lbnRzIGRvIG5vdCBkZWNvZGUgY29ycmVjdGx5LgotICAgICAgICAgICAgdWludDY0X3QgZnJh
bWVJRDsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVzc2FnZSkpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5KYXZhU2NyaXB0
Q29uZmlybShwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpLCBtZXNzYWdlKTsKLSAgICAgICAg
ICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4ocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlJ1bkphdmFT
Y3JpcHRQcm9tcHQ6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkg
ZW5jb2RlIHNvbWV0aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBhcmd1bWVudHMgZG8gbm90IGRl
Y29kZSBjb3JyZWN0bHkuCi0gICAgICAgICAgICB1aW50NjRfdCBmcmFtZUlEOwotICAgICAgICAg
ICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbWVz
c2FnZSwgZGVmYXVsdFZhbHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBTdHJpbmcgcmVzdWx0ID0gcnVuSmF2YVNjcmlwdFByb21wdChwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpOwotICAgICAgICAgICAgcmVwbHkt
PmVuY29kZShDb3JlSVBDOjpJbihyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEJhY2tJ
dGVtOiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBiYWNrSXRlbSA9IG1f
YmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOwotICAgICAgICAgICAgdWludDY0X3QgYmFja0l0
ZW1JRCA9IGJhY2tJdGVtID8gYmFja0l0ZW0tPml0ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJl
cGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oYmFja0l0ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2Fy
ZEN1cnJlbnRJdGVtOiB7Ci0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBjdXJy
ZW50SXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpOwotICAgICAgICAgICAg
dWludDY0X3QgY3VycmVudEl0ZW1JRCA9IGN1cnJlbnRJdGVtID8gY3VycmVudEl0ZW0tPml0ZW1J
RCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5lbmNvZGUoQ29yZUlQQzo6SW4oY3VycmVudEl0
ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQ
YWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtOiB7Ci0gICAgICAgICAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmb3J3YXJkSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5m
b3J3YXJkSXRlbSgpOwotICAgICAgICAgICAgdWludDY0X3QgZm9yd2FyZEl0ZW1JRCA9IGZvcndh
cmRJdGVtID8gZm9yd2FyZEl0ZW0tPml0ZW1JRCgpIDogMDsKLSAgICAgICAgICAgIHJlcGx5LT5l
bmNvZGUoQ29yZUlQQzo6SW4oZm9yd2FyZEl0ZW1JRCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEl0
ZW1BdEluZGV4OiB7Ci0gICAgICAgICAgICBpbnQgaXRlbUluZGV4OwotICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoaXRlbUluZGV4KSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVt
ID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGl0ZW1JbmRleCk7Ci0gICAgICAgICAg
ICB1aW50NjRfdCBpdGVtSUQgPSBpdGVtID8gaXRlbS0+aXRlbUlEKCkgOiAwOwotICAgICAgICAg
ICAgcmVwbHktPmVuY29kZShDb3JlSVBDOjpJbihpdGVtSUQpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0Zvcndh
cmRCYWNrTGlzdENvdW50OiB7Ci0gICAgICAgICAgICBpbnQgYmFja0xpc3RDb3VudCA9IG1fYmFj
a0ZvcndhcmRMaXN0LT5iYWNrTGlzdENvdW50KCk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2Rl
KENvcmVJUEM6OkluKGJhY2tMaXN0Q291bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRGb3J3YXJk
TGlzdENvdW50OiB7Ci0gICAgICAgICAgICBpbnQgZm9yd2FyZExpc3RDb3VudCA9IG1fYmFja0Zv
cndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2Rl
KENvcmVJUEM6OkluKGZvcndhcmRMaXN0Q291bnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBjYXNlIFdl
YlBhZ2VQcm94eU1lc3NhZ2U6OkRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc6IHsKLSAg
ICAgICAgICAgIGJvb2wgY29tcG9zaXRpbmc7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+
ZGVjb2RlKENvcmVJUEM6Ok91dChjb21wb3NpdGluZykpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhjb21wb3Np
dGluZyk7Ci0gICAgICAgICAgICByZXBseS0+ZW5jb2RlKGRyYXdpbmdBcmVhKCktPmluZm8oKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyB3aXRoIHJlcGx5LgorICAgIGRpZFJlY2VpdmVTeW5jV2ViUGFnZVByb3h5TWVz
c2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywgcmVwbHkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCkBAIC0x
MDI4LDkxICs1OTAsMTc5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hQcm9ncmVzcygp
CiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoUHJvZ3Jlc3ModGhpcyk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFN0cmluZyYgdXJsLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3Vt
ZW50cykKIHsKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0
VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNl
KCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2Rl
cikpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2Vz
cygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwogICAgIGZyYW1lLT5kaWRTdGFydFByb3Zpc2lvbmFs
TG9hZCh1cmwpOwotICAgIG1fbG9hZGVyQ2xpZW50LmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBtX2xvYWRlckNsaWVudC5kaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmws
IEFQSU9iamVjdCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgU3RyaW5nJiB1cmwsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewor
ICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2Fn
ZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4
dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZy
YW1lKGZyYW1lSUQpOworCiAgICAgZnJhbWUtPmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZCh1cmwpOwotICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7
CisgICAgbV9sb2FkZXJDbGllbnQuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5
KiBmcmFtZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWls
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAg
UmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVj
b2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkp
OworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUo
ZnJhbWVJRCk7CisKKyAgICBtX2xvYWRlckNsaWVudC5kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0
aEVycm9yRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbywgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDb21taXRMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVj
dD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVj
b2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJn
dW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAg
ICBmcmFtZS0+c2V0TUlNRVR5cGUobWltZVR5cGUpOwogICAgIGZyYW1lLT5zZXRDZXJ0aWZpY2F0
ZUluZm8oV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoY2VydGlmaWNhdGVJbmZvKSk7CiAgICAg
ZnJhbWUtPmRpZENvbW1pdExvYWQoKTsKLSAgICBtX2xvYWRlckNsaWVudC5kaWRDb21taXRMb2Fk
Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBtX2xvYWRlckNsaWVudC5kaWRD
b21taXRMb2FkRm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZp
bmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgUmVmUHRyPEFQ
SU9iamVjdD4gdXNlckRhdGE7CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNz
YWdlRGVjb2Rlcih1c2VyRGF0YSwgcGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlm
ICghYXJndW1lbnRzLT5kZWNvZGUobWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisK
KyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7
CisKKyAgICBtX2xvYWRlckNsaWVudC5kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh0aGlz
LCBmcmFtZSwgdXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlu
aXNoTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRh
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKKyAgICBSZWZQdHI8
QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1l
c3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAg
aWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsK
KworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlE
KTsKKwogICAgIGZyYW1lLT5kaWRGaW5pc2hMb2FkKCk7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlk
RmluaXNoTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2FkZXJD
bGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGYWlsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZh
aWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVz
ZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIo
dXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50
cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJh
bWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9s
b2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNl
ckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVRpdGxlRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEFQSU9iamVj
dCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiBhcmd1bWVudHMpCiB7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Cisg
ICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0YSwg
cGFnZU5hbWVzcGFjZSgpLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
bWVzc2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZVByb3h5KiBm
cmFtZSA9IHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCk7CisKICAgICBmcmFtZS0+ZGlkUmVj
ZWl2ZVRpdGxlKHRpdGxlKTsKIAogICAgIC8vIENhY2hlIHRoZSB0aXRsZSBmb3IgdGhlIG1haW4g
ZnJhbWUgaW4gdGhlIHBhZ2UuCiAgICAgaWYgKGZyYW1lID09IG1fbWFpbkZyYW1lKQogICAgICAg
ICBtX3BhZ2VUaXRsZSA9IHRpdGxlOwogCi0gICAgbV9sb2FkZXJDbGllbnQuZGlkUmVjZWl2ZVRp
dGxlRm9yRnJhbWUodGhpcywgdGl0bGUsIGZyYW1lLCB1c2VyRGF0YSk7CisgICAgbV9sb2FkZXJD
bGllbnQuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodGhpcywgdGl0bGUsIGZyYW1lLCB1c2VyRGF0
YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaXJzdExheW91dEZvckZyYW1l
KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBBUElPYmplY3QqIHVzZXJEYXRhKQordm9pZCBXZWJQYWdl
UHJveHk6OmRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmly
c3RMYXlvdXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElP
YmplY3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2Fn
ZURlY29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOwor
CisgICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh0aGlzLCBmcmFtZSwg
dXNlckRhdGEuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCog
dXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBh
cmd1bWVudHMpCiB7Ci0gICAgbV9sb2FkZXJDbGllbnQuZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9yRnJhbWUodGhpcywgZnJhbWUsIHVzZXJEYXRhKTsKKyAgICBSZWZQdHI8QVBJT2Jq
ZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VE
ZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNvbnRleHQoKSk7CisgICAgaWYgKCFh
cmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKTsKKwor
ICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1l
KHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVj
dCogdXNlckRhdGEpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFy
Y2h5KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRz
KQogewotICAgIG1fbG9hZGVyQ2xpZW50LmRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh0aGlz
LCBmcmFtZSwgdXNlckRhdGEpOworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOworICAg
IFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIodXNlckRhdGEsIHBh
Z2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKG1l
c3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVQcm94eSogZnJh
bWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworCisgICAgbV9sb2FkZXJDbGllbnQu
ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7
CiB9CiAKIC8vIFBvbGljeUNsaWVudAogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJGcmFtZVByb3h5KiBmcmFtZSwgTmF2aWdhdGlvblR5cGUg
bmF2aWdhdGlvblR5cGUsIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBXZWJNb3VzZUV2
ZW50OjpCdXR0b24gbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0
ZW5lcklEKQordm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVpbnQz
Ml90IG9wYXF1ZU1vZGlmaWVycywgaW50MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3QgU3Ry
aW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7CisgICAgV2ViRnJhbWVQcm94eSogZnJh
bWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAgIE5hdmlnYXRpb25UeXBlIG5h
dmlnYXRpb25UeXBlID0gc3RhdGljX2Nhc3Q8TmF2aWdhdGlvblR5cGU+KG9wYXF1ZU5hdmlnYXRp
b25UeXBlKTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0
PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9wYXF1ZU1vZGlmaWVycyk7CisgICAgV2ViTW91c2VFdmVu
dDo6QnV0dG9uIG1vdXNlQnV0dG9uID0gc3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9u
PihvcGFxdWVNb3VzZUJ1dHRvbik7CisgICAgCiAgICAgUmVmUHRyPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxp
c3RlbmVySUQpOwogICAgIGlmICghbV9wb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbih0aGlzLCBuYXZpZ2F0aW9uVHlwZSwgbW9kaWZpZXJzLCBtb3VzZUJ1dHRvbiwg
dXJsLCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2Vi
RnJhbWVQcm94eSogZnJhbWUsIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXZWJFdmVu
dDo6TW9kaWZpZXJzIG1vZGlmaWVycywgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9u
LCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWlu
dDMyX3Qgb3BhcXVlTmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG9wYXF1ZU1vZGlmaWVycywgaW50
MzJfdCBvcGFxdWVNb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3Rl
bmVySUQpCiB7CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1l
KGZyYW1lSUQpOworICAgIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlID0gc3RhdGljX2Nh
c3Q8TmF2aWdhdGlvblR5cGU+KG9wYXF1ZU5hdmlnYXRpb25UeXBlKTsKKyAgICBXZWJFdmVudDo6
TW9kaWZpZXJzIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG9w
YXF1ZU1vZGlmaWVycyk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIG1vdXNlQnV0dG9uID0g
c3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihvcGFxdWVNb3VzZUJ1dHRvbik7CisK
ICAgICBSZWZQdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9IGZyYW1l
LT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkobGlzdGVuZXJJRCk7CiAgICAgaWYgKCFtX3BvbGlj
eUNsaWVudC5kZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odGhpcywgbmF2aWdhdGlvblR5
cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkK
ICAgICAgICAgbGlzdGVuZXItPnVzZSgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRl
UG9saWN5Rm9yTUlNRVR5cGUoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgTUlN
RVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQordm9pZCBXZWJQ
YWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck1JTUVUeXBlKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklE
KQogeworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShmcmFt
ZUlEKTsKICAgICBSZWZQdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBsaXN0ZW5lciA9
IGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkobGlzdGVuZXJJRCk7CiAgICAgaWYgKCFt
X3BvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh0aGlzLCBNSU1FVHlwZSwgdXJs
LCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7CkBAIC0x
MTIwLDE4ICs3NzAsMzIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck1JTUVU
eQogCiAvLyBGb3JtQ2xpZW50CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShX
ZWJGcmFtZVByb3h5KiBmcmFtZSwgV2ViRnJhbWVQcm94eSogc291cmNlRnJhbWUsIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgQVBJT2JqZWN0KiB1
c2VyRGF0YSwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3Vi
bWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBzb3VyY2VGcmFtZUlELCBjb25zdCBT
dHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMsIHVpbnQ2NF90IGxpc3RlbmVySUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogeworICAgIFJlZlB0cjxBUElPYmpl
Y3Q+IHVzZXJEYXRhOworICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURl
Y29kZXIodXNlckRhdGEsIHBhZ2VOYW1lc3BhY2UoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIWFy
Z3VtZW50cy0+ZGVjb2RlKG1lc3NhZ2VEZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViRnJhbWVQcm94eSogZnJhbWUgPSBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpOworICAg
IFdlYkZyYW1lUHJveHkqIHNvdXJjZUZyYW1lID0gcHJvY2VzcygpLT53ZWJGcmFtZShzb3VyY2VG
cmFtZUlEKTsKKwogICAgIFJlZlB0cjxXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHk+IGxp
c3RlbmVyID0gZnJhbWUtPnNldFVwRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5KGxpc3RlbmVy
SUQpOwotICAgIGlmICghbV9mb3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtKHRoaXMsIGZyYW1lLCBz
b3VyY2VGcmFtZSwgdGV4dEZpZWxkVmFsdWVzLCB1c2VyRGF0YSwgbGlzdGVuZXIuZ2V0KCkpKQor
ICAgIGlmICghbV9mb3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtKHRoaXMsIGZyYW1lLCBzb3VyY2VG
cmFtZSwgdGV4dEZpZWxkVmFsdWVzLnN0cmluZ1BhaXJWZWN0b3IoKSwgdXNlckRhdGEuZ2V0KCks
IGxpc3RlbmVyLmdldCgpKSkKICAgICAgICAgbGlzdGVuZXItPmNvbnRpbnVlU3VibWlzc2lvbigp
OwogfQogCiAvLyBVSUNsaWVudAogCi1QYXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gV2ViUGFnZVBy
b3h5OjpjcmVhdGVOZXdQYWdlKCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpjcmVhdGVOZXdQYWdlKHVp
bnQ2NF90JiBuZXdQYWdlSUQsIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIG5ld1BhZ2VQYXJh
bWV0ZXJzKQogewotICAgIHJldHVybiBtX3VpQ2xpZW50LmNyZWF0ZU5ld1BhZ2UodGhpcyk7Cisg
ICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbmV3UGFnZSA9IG1fdWlDbGllbnQuY3JlYXRlTmV3UGFn
ZSh0aGlzKTsKKyAgICBpZiAobmV3UGFnZSkgeworICAgICAgICAvLyBGSVhNRTogUGFzcyB0aGUg
cmVhbCBzaXplLgorICAgICAgICBuZXdQYWdlSUQgPSBuZXdQYWdlLT5wYWdlSUQoKTsKKyAgICAg
ICAgbmV3UGFnZVBhcmFtZXRlcnMgPSBuZXdQYWdlLT5jcmVhdGlvblBhcmFtZXRlcnMoSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgIH0gZWxzZQorICAgICAgICBuZXdQYWdlSUQgPSAwOwogfQogICAg
IAogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dQYWdlKCkKQEAgLTExNDQsMTkgKzgwOCwxOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6Y2xvc2VQYWdlKCkKICAgICBtX3VpQ2xpZW50LmNsb3NlKHRoaXMp
OwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFdlYlBhZ2VQcm94eTo6cnVu
SmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKLSAgICBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRBbGVydCh0aGlzLCBtZXNzYWdlLCBmcmFt
ZSk7CisgICAgbV91aUNsaWVudC5ydW5KYXZhU2NyaXB0QWxlcnQodGhpcywgbWVzc2FnZSwgcHJv
Y2VzcygpLT53ZWJGcmFtZShmcmFtZUlEKSk7CiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5OjpydW5K
YXZhU2NyaXB0Q29uZmlybShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRDb25maXJtKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgYm9vbCYgcmVzdWx0KQogewotICAgIHJldHVy
biBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtKHRoaXMsIG1lc3NhZ2UsIGZyYW1lKTsK
KyAgICByZXN1bHQgPSBtX3VpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtKHRoaXMsIG1lc3Nh
Z2UsIHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCkpOwogfQogCi1TdHJpbmcgV2ViUGFnZVBy
b3h5OjpydW5KYXZhU2NyaXB0UHJvbXB0KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlKQordm9pZCBXZWJQYWdlUHJv
eHk6OnJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCiB7Ci0g
ICAgcmV0dXJuIG1fdWlDbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCh0aGlzLCBtZXNzYWdlLCBk
ZWZhdWx0VmFsdWUsIGZyYW1lKTsKKyAgICByZXN1bHQgPSBtX3VpQ2xpZW50LnJ1bkphdmFTY3Jp
cHRQcm9tcHQodGhpcywgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBwcm9jZXNzKCktPndlYkZyYW1l
KGZyYW1lSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN0YXR1c1RleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0KQpAQCAtMTE2NCw0OCArODI4LDg1IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRTdGF0dXNUZXh0KGNvbnN0IFMKICAgICBtX3VpQ2xpZW50LnNldFN0YXR1c1RleHQodGhpcywg
dGV4dCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChX
ZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3ZvaWQg
V2ViUGFnZVByb3h5Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCh1aW50MzJfdCBvcGFxdWVNb2Rp
ZmllcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fdWlD
bGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodGhpcywgbW9kaWZpZXJzLCB1c2VyRGF0YSk7
CisKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNlck1l
c3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBwYWdlTmFtZXNwYWNlKCktPmNv
bnRleHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gc3Rh
dGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4ob3BhcXVlTW9kaWZpZXJzKTsKKworICAgIG1f
dWlDbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodGhpcywgbW9kaWZpZXJzLCB1c2VyRGF0
YS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZW50c1NpemVDaGFuZ2VkKFdl
YkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQordm9pZCBX
ZWJQYWdlUHJveHk6OmNvbnRlbnRzU2l6ZUNoYW5nZWQodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3VpQ2xpZW50LmNvbnRlbnRzU2l6ZUNo
YW5nZWQodGhpcywgc2l6ZSwgZnJhbWUpOworICAgIG1fdWlDbGllbnQuY29udGVudHNTaXplQ2hh
bmdlZCh0aGlzLCBzaXplLCBwcm9jZXNzKCktPndlYkZyYW1lKGZyYW1lSUQpKTsKIH0KIAogLy8g
QmFja0ZvcndhcmRMaXN0CiAKLXZvaWQgV2ViUGFnZVByb3h5OjphZGRJdGVtVG9CYWNrRm9yd2Fy
ZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojpi
YWNrRm9yd2FyZEFkZEl0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIG1fYmFja0ZvcndhcmRM
aXN0LT5hZGRJdGVtKGl0ZW0pOworICAgIG1fYmFja0ZvcndhcmRMaXN0LT5hZGRJdGVtKHByb2Nl
c3MoKS0+d2ViQmFja0ZvcndhcmRJdGVtKGl0ZW1JRCkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6Z29Ub0l0ZW1JbkJhY2tGb3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVt
KQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkR29Ub0l0ZW0odWludDY0X3QgaXRlbUlE
KQogewotICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShpdGVtKTsKKyAgICBtX2JhY2tG
b3J3YXJkTGlzdC0+Z29Ub0l0ZW0ocHJvY2VzcygpLT53ZWJCYWNrRm9yd2FyZEl0ZW0oaXRlbUlE
KSk7CiB9CiAKLS8vIFVuZG8gbWFuYWdlbWVudAordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3
YXJkQmFja0l0ZW0odWludDY0X3QmIGl0ZW1JRCkKK3sKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiBiYWNrSXRlbSA9IG1fYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOworICAgIGl0ZW1J
RCA9IGJhY2tJdGVtID8gYmFja0l0ZW0tPml0ZW1JRCgpIDogMDsKK30KIAotdm9pZCBXZWJQYWdl
UHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgRWRp
dEFjdGlvbiBlZGl0QWN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkQ3VycmVu
dEl0ZW0odWludDY0X3QmIGl0ZW1JRCkKIHsKLSAgICByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5k
byhXZWJFZGl0Q29tbWFuZFByb3h5OjpjcmVhdGUoY29tbWFuZElELCBlZGl0QWN0aW9uLCB0aGlz
KSk7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogY3VycmVudEl0ZW0gPSBtX2JhY2tGb3J3
YXJkTGlzdC0+Y3VycmVudEl0ZW0oKTsKKyAgICBpdGVtSUQgPSBjdXJyZW50SXRlbSA/IGN1cnJl
bnRJdGVtLT5pdGVtSUQoKSA6IDA7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFsbEVk
aXRDb21tYW5kcygpCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRGb3J3YXJkSXRlbSh1
aW50NjRfdCYgaXRlbUlEKQogewotICAgIG1fcGFnZUNsaWVudC0+Y2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKTsKKyAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmb3J3YXJkSXRlbSA9IG1fYmFja0Zv
cndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpOworICAgIGl0ZW1JRCA9IGZvcndhcmRJdGVtID8gZm9y
d2FyZEl0ZW0tPml0ZW1JRCgpIDogMDsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVy
RWRpdENvbW1hbmRGb3JVbmRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFu
ZFByb3h5KQordm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaW50MzJf
dCBpbmRleCwgdWludDY0X3QmIGl0ZW1JRCkKIHsKLSAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVy
RWRpdENvbW1hbmQoY29tbWFuZFByb3h5LCBQYWdlQ2xpZW50OjpVbmRvKTsKKyAgICBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtID0gbV9iYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGlu
ZGV4KTsKKyAgICBpdGVtSUQgPSBpdGVtID8gaXRlbS0+aXRlbUlEKCkgOiAwOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29tbWFuZEZvclJlZG8oUGFzc1JlZlB0cjxXZWJF
ZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kUHJveHkpCit2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0Zv
cndhcmRCYWNrTGlzdENvdW50KGludDMyX3QmIGNvdW50KQogewotICAgIG1fcGFnZUNsaWVudC0+
cmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5kUHJveHksIFBhZ2VDbGllbnQ6OlJlZG8pOworICAg
IGNvdW50ID0gbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKK30KKwordm9pZCBX
ZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudChpbnQzMl90JiBjb3VudCkK
K3sKKyAgICBjb3VudCA9IG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Cit9
CisKKy8vIFVuZG8gbWFuYWdlbWVudAorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0
Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElELCB1aW50MzJfdCBlZGl0QWN0aW9uKQor
eworICAgIHJlZ2lzdGVyRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eTo6Y3JlYXRlKGNv
bW1hbmRJRCwgc3RhdGljX2Nhc3Q8RWRpdEFjdGlvbj4oZWRpdEFjdGlvbiksIHRoaXMpLCBVbmRv
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKK3sKKyAg
ICBtX3BhZ2VDbGllbnQtPmNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94
eT4gY29tbWFuZFByb3h5LCBVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgbV9wYWdlQ2xp
ZW50LT5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmRQcm94eSwgdW5kb09yUmVkbyk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjphZGRFZGl0Q29tbWFuZChXZWJFZGl0Q29tbWFuZFByb3h5KiBj
b21tYW5kKQpAQCAtMTI0MSw4ICs5NDIsMTUgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEN1cnNv
cihjb25zdCBXZWJDbwogICAgIG1fcGFnZUNsaWVudC0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZlbnQoV2ViRXZlbnQ6OlR5cGUgdHlwZSwg
Ym9vbCBoYW5kbGVkKQordm9pZCBXZWJQYWdlUHJveHk6OmRpZFZhbGlkYXRlTWVudUl0ZW0oY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUpCit7
CisgICAgbV9wYWdlQ2xpZW50LT5zZXRFZGl0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBpc0Vu
YWJsZWQsIHN0YXRlKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCh1
aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQpCiB7CisgICAgV2ViRXZlbnQ6OlR5cGUg
dHlwZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpUeXBlPihvcGFxdWVUeXBlKTsKKwogICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEzMDQsMTMgKzEwMTIsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZEdldFNvdXJjZUZvckZyYW1lKAogICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0
dXJuVmFsdWUocmVzdWx0U3RyaW5nLmltcGwoKSk7CiB9CiAKKwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKGJvb2wgY29tcG9zaXRpbmcpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNvbXBvc2l0aW5nLCBEcmF3aW5nQXJlYUJhc2U6
OkRyYXdpbmdBcmVhSW5mbyYgZHJhd2luZ0FyZWFJbmZvKQogewogICAgIGlmIChjb21wb3NpdGlu
ZykKICAgICAgICAgZGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAgICAgZWxzZQog
ICAgICAgICBkaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKworICAgIGRyYXdpbmdB
cmVhSW5mbyA9IGRyYXdpbmdBcmVhKCktPmluZm8oKTsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBjbGFzcyBE
cmF3aW5nQXJlYVByb3h5OwogY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBh
Z2VDbGllbnQ7CiBjbGFzcyBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbzsKK2NsYXNzIFN0cmluZ1Bh
aXJWZWN0b3I7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3Q7CiBjbGFzcyBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtOwogY2xhc3MgV2ViRGF0YTsKQEAgLTE4OCwxMCArMTg5LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogI2VuZGlmCiAKKyAg
ICBlbnVtIFVuZG9PclJlZG8geyBVbmRvLCBSZWRvIH07CiAgICAgdm9pZCBhZGRFZGl0Q29tbWFu
ZChXZWJFZGl0Q29tbWFuZFByb3h5Kik7CiAgICAgdm9pZCByZW1vdmVFZGl0Q29tbWFuZChXZWJF
ZGl0Q29tbWFuZFByb3h5Kik7Ci0gICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyhQ
YXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+KTsKLSAgICB2b2lkIHJlZ2lzdGVyRWRpdENv
bW1hbmRGb3JSZWRvKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4pOworICAgIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBVbmRv
T3JSZWRvKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcygpIGNvbnN0OwogICAgIFdl
YlBhZ2VOYW1lc3BhY2UqIHBhZ2VOYW1lc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VOYW1l
c3BhY2UuZ2V0KCk7IH0KQEAgLTIxMCw1MyArMjExLDY0IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KIAorICAgIC8vIEltcGxl
bWVudGVkIGluIGdlbmVyYXRlZCBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCisgICAg
dm9pZCBkaWRSZWNlaXZlV2ViUGFnZVByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICBDb3Jl
SVBDOjpTeW5jUmVwbHlNb2RlIGRpZFJlY2VpdmVTeW5jV2ViUGFnZVByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqLCBDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKTsKKwogICAgIHZvaWQgZGlkQ3JlYXRl
TWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpOwogICAgIHZvaWQgZGlkQ3JlYXRlU3ViRnJhbWUo
dWludDY0X3QgZnJhbWVJRCk7CiAKLSAgICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYsIEFQSU9iamVjdCopOwotICAgIHZv
aWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFN0cmluZyYsIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKLSAg
ICB2b2lkIGRpZENvbW1pdExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8mLCBBUElPYmplY3QqKTsK
LSAgICB2b2lkIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBB
UElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJGcmFtZVByb3h5
KiwgQVBJT2JqZWN0Kik7Ci0gICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1lKFdlYkZyYW1lUHJv
eHkqLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdlYkZy
YW1lUHJveHkqLCBjb25zdCBTdHJpbmcmLCBBUElPYmplY3QqKTsKLSAgICB2b2lkIGRpZEZpcnN0
TGF5b3V0Rm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOwotICAgIHZvaWQgZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV2ViRnJhbWVQcm94eSosIEFQSU9i
amVjdCopOwotICAgIHZvaWQgZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KFdlYkZyYW1lUHJv
eHkqLCBBUElPYmplY3QqKTsKKyAgICB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKik7CisgICAgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmLCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGRp
ZENvbW1pdExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyYsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRGaW5pc2hM
b2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CisgICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CisgICAgdm9pZCBkaWRGaXJzdExheW91dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
Kik7CisgICAgdm9pZCBkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkodWludDY0X3QgZnJhbWVJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCBkaWRTdGFydFByb2dyZXNz
KCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhkb3VibGUpOwogICAgIHZvaWQgZGlkRmlu
aXNoUHJvZ3Jlc3MoKTsKICAgICAKLSAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV2ViRnJhbWVQcm94eSosIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6
TW9kaWZpZXJzLCBXZWJNb3VzZUV2ZW50OjpCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50
NjRfdCBsaXN0ZW5lcklEKTsKLSAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bihXZWJGcmFtZVByb3h5KiwgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGUsIFdlYkV2ZW50OjpNb2Rp
ZmllcnMsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90
IGxpc3RlbmVySUQpOwotICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoV2ViRnJhbWVQ
cm94eSosIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRf
dCBsaXN0ZW5lcklEKTsKKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24o
dWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG1vZGlm
aWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxp
c3RlbmVySUQpOworICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMs
IGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5l
cklEKTsKKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvck1JTUVUeXBlKHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0
ZW5lcklEKTsKIAotICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV2ViRnJhbWVQcm94eSogZnJhbWUs
IFdlYkZyYW1lUHJveHkqIGZyYW1lU291cmNlLCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPiA+JiB0ZXh0RmllbGRWYWx1ZXMsIEFQSU9iamVjdCogdXNlckRhdGEsIHVpbnQ2NF90IGxp
c3RlbmVySUQpOworICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0odWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3Qgc291cmNlRnJhbWVJRCwgY29uc3QgU3RyaW5nUGFpclZlY3RvciYgdGV4dEZpZWxkVmFs
dWVzLCB1aW50NjRfdCBsaXN0ZW5lcklELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKIAot
ICAgIFBhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlKCk7CisgICAgdm9pZCBj
cmVhdGVOZXdQYWdlKHVpbnQ2NF90JiBuZXdQYWdlSUQsIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMmKTsKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9pZCBjbG9zZVBhZ2UoKTsKLSAgICB2
b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXZWJGcmFtZVByb3h5KiwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgU3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViRnJhbWVQcm94eSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcnVuSmF2YVNj
cmlwdEFsZXJ0KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcnVu
SmF2YVNjcmlwdENvbmZpcm0odWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCYg
cmVzdWx0KTsKKyAgICB2b2lkIHJ1bkphdmFTY3JpcHRQcm9tcHQodWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgU3RyaW5nJiByZXN1bHQpOwogICAgIHZvaWQg
c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KFdlYkV2ZW50OjpNb2RpZmllcnMsIEFQSU9iamVjdCopOwotICAgIHZvaWQgY29udGVu
dHNTaXplQ2hhbmdlZChXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwor
ICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodWludDMyX3QgbW9kaWZpZXJzLCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCiAgICAgLy8gQmFjay9G
b3J3YXJkIGxpc3QgbWFuYWdlbWVudAotICAgIHZvaWQgYWRkSXRlbVRvQmFja0ZvcndhcmRMaXN0
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKLSAgICB2b2lkIGdvVG9JdGVtSW5CYWNrRm9yd2Fy
ZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworICAgIHZvaWQgYmFja0ZvcndhcmRBZGRJ
dGVtKHVpbnQ2NF90IGl0ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtKHVpbnQ2
NF90IGl0ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEJhY2tJdGVtKHVpbnQ2NF90JiBpdGVt
SUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRDdXJyZW50SXRlbSh1aW50NjRfdCYgaXRlbUlEKTsK
KyAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2FyZEl0ZW0odWludDY0X3QmIGl0ZW1JRCk7CisgICAg
dm9pZCBiYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGludDMyX3QgaW5kZXgsIHVpbnQ2NF90JiBpdGVt
SUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRCYWNrTGlzdENvdW50KGludDMyX3QmIGNvdW50KTsK
KyAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudChpbnQzMl90JiBjb3VudCk7CiAK
ICAgICAvLyBVbmRvIG1hbmFnZW1lbnQKLSAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmRGb3JV
bmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgV2ViQ29yZTo6RWRpdEFjdGlvbik7CisgICAgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1aW50NjRfdCBjb21tYW5kSUQsIHVpbnQzMl90IGVk
aXRBY3Rpb24pOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKIAogICAgIHZvaWQg
dGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAg
dm9pZCBkaWRWYWxpZGF0ZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wg
aXNFbmFibGVkLCBpbnQzMl90IHN0YXRlKTsKIAotICAgIHZvaWQgZGlkUmVjZWl2ZUV2ZW50KFdl
YkV2ZW50OjpUeXBlLCBib29sIGhhbmRsZWQpOworICAgIHZvaWQgZGlkUmVjZWl2ZUV2ZW50KHVp
bnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCk7CiAKICAgICB2b2lkIGRpZFJ1bkphdmFT
Y3JpcHRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCk7CiAgICAgdm9pZCBkaWRH
ZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCB1aW50NjRf
dCk7CkBAIC0yNjUsNyArMjc3LDcgQEAgcHJpdmF0ZToKICAgICBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycyhjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkaWRDaGFuZ2VB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgY29tcG9zaXRpbmcpOworICAgIHZvaWQgZGlkQ2hh
bmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNvbXBvc2l0aW5nLCBEcmF3aW5nQXJlYUJh
c2U6OkRyYXdpbmdBcmVhSW5mbyYpOwogI2VuZGlmICAgIAogCiAgICAgUGFnZUNsaWVudCogbV9w
YWdlQ2xpZW50OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgeworICAgICMg
VUkgbWVzc2FnZXMuCisgICAgQ3JlYXRlTmV3UGFnZSgpIC0+ICh1aW50NjRfdCBuZXdQYWdlSUQs
IFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBuZXdQYWdlUGFyYW1ldGVycykKKyAg
ICBTaG93UGFnZSgpCisgICAgQ2xvc2VQYWdlKCkKKyAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWlu
dDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgbWVzc2FnZSkgLT4gKCkKKyAgICBSdW5KYXZhU2Ny
aXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyBtZXNzYWdlKSAtPiAoYm9v
bCByZXN1bHQpCisgICAgUnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFtZUlELCBXVEY6
OlN0cmluZyBtZXNzYWdlLCBXVEY6OlN0cmluZyBkZWZhdWx0VmFsdWUpIC0+IChXVEY6OlN0cmlu
ZyByZXN1bHQpCisgICAgTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQodWludDMyX3QgbW9kaWZpZXJz
LCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKTsKKyAg
ICBDb250ZW50c1NpemVDaGFuZ2VkKHVpbnQ2NF90IGZyYW1lSUQsIFdlYkNvcmU6OkludFNpemUg
bmV3U2l6ZSkKKyAgICBEaWRSZWNlaXZlRXZlbnQodWludDMyX3QgdHlwZSwgYm9vbCBoYW5kbGVk
KQorICAgIERpZFZhbGlkYXRlTWVudUl0ZW0oV1RGOjpTdHJpbmcgY29tbWFuZE5hbWUsIGJvb2wg
aXNFbmFibGVkLCBpbnQzMl90IHN0YXRlKQorICAgIFNldEN1cnNvcihXZWJDb3JlOjpDdXJzb3Ig
Y3Vyc29yKQorICAgIFNldFN0YXR1c1RleHQoV1RGOjpTdHJpbmcgc3RhdHVzVGV4dCkKKyAgICBT
ZXRUb29sVGlwKFdURjo6U3RyaW5nIHRvb2xUaXApCisgICAgVGFrZUZvY3VzKGJvb2wgZGlyZWN0
aW9uKQorCisgICAgIyBQb2xpY3kgbWVzc2FnZXMuCisgICAgRGVjaWRlUG9saWN5Rm9yTUlNRVR5
cGUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgTUlNRVR5cGUsIFdURjo6U3RyaW5nIHVy
bCwgdWludDY0X3QgbGlzdGVuZXJJRCkKKyAgICBEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBt
b2RpZmllcnMsIGludDMyX3QgbW91c2VCdXR0b24sIFdURjo6U3RyaW5nIHVybCwgdWludDY0X3Qg
bGlzdGVuZXJJRCkKKyAgICBEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3Qg
ZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50
MzJfdCBtb3VzZUJ1dHRvbiwgV1RGOjpTdHJpbmcgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQor
CisgICAgIyBQcm9ncmVzcyBtZXNzYWdlcy4KKyAgICBEaWRDaGFuZ2VQcm9ncmVzcyhkb3VibGUg
dmFsdWUpCisgICAgRGlkRmluaXNoUHJvZ3Jlc3MoKQorICAgIERpZFN0YXJ0UHJvZ3Jlc3MoKQor
CisgICAgIyBGcmFtZSBsaWZldGltZSBtZXNzYWdlcy4KKyAgICBEaWRDcmVhdGVNYWluRnJhbWUo
dWludDY0X3QgZnJhbWVJRCkKKyAgICBEaWRDcmVhdGVTdWJGcmFtZSh1aW50NjRfdCBmcmFtZUlE
KQorCisgICAgIyBGcmFtZSBsb2FkIG1lc3NhZ2VzLgorICAgIERpZENvbW1pdExvYWRGb3JGcmFt
ZSh1aW50NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyBtaW1lVHlwZSwgV2ViS2l0OjpQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8sIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmFpbExvYWRGb3JGcmFtZSh1aW50
NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVz
ZXJEYXRhKQorICAgIERpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQor
ICAgIERpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmlu
aXNoTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCisgICAgRGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVy
IHVzZXJEYXRhKQorICAgIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIg
dXNlckRhdGEpCisgICAgRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgdXJsLCBXZWJLaXQ6OkluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgdXJsLCBXZWJLaXQ6OkluamVjdGVk
QnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZFJlY2VpdmVUaXRsZUZv
ckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIHRpdGxlLCBXZWJLaXQ6OkluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorCisgICAgIyBGb3JtcyBtZXNz
YWdlcy4KKyAgICBXaWxsU3VibWl0Rm9ybSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBzb3Vy
Y2VGcmFtZUlELCBXZWJLaXQ6OlN0cmluZ1BhaXJWZWN0b3IgdGV4dEZpZWxkVmFsdWVzLCB1aW50
NjRfdCBsaXN0ZW5lcklELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVy
IHVzZXJEYXRhKQorCisgICAgIyBDYWxsYmFjayBtZXNzYWdlcy4KKyAgICBEaWRHZXRSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCisgICAgRGlkR2V0U291cmNlRm9yRnJhbWUoV1RGOjpTdHJpbmcgcmVz
dWx0U3RyaW5nLCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAgIERpZFJ1bkphdmFTY3JpcHRJbk1h
aW5GcmFtZShXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisK
KyAgICAjIEJhY2tGb3J3YXJkIG1lc3NhZ2VzLgorICAgIEJhY2tGb3J3YXJkQWRkSXRlbSh1aW50
NjRfdCBpdGVtSUQpCisgICAgQmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQpCisg
ICAgQmFja0ZvcndhcmRCYWNrSXRlbSgpIC0+ICh1aW50NjRfdCBpdGVtSUQpCisgICAgQmFja0Zv
cndhcmRDdXJyZW50SXRlbSgpIC0+ICh1aW50NjRfdCBpdGVtSUQpCisgICAgQmFja0ZvcndhcmRG
b3J3YXJkSXRlbSgpIC0+ICh1aW50NjRfdCBpdGVtSUQpCisgICAgQmFja0ZvcndhcmRJdGVtQXRJ
bmRleCh1aW50NjRfdCBpdGVtSUQpIC0+ICh1aW50NjRfdCBpdGVtSUQpCisgICAgQmFja0Zvcndh
cmRCYWNrTGlzdENvdW50KCkgLT4gKGludDMyX3QgaXRlbUlEKQorICAgIEJhY2tGb3J3YXJkRm9y
d2FyZExpc3RDb3VudCgpIC0+IChpbnQzMl90IGl0ZW1JRCkKKworICAgICMgVW5kb1JlZG8gbWVz
c2FnZXMuCisgICAgUmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElE
LCB1aW50MzJfdCBlZGl0QWN0aW9uKQorICAgIENsZWFyQWxsRWRpdENvbW1hbmRzKCkKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAjIEFjY2VsZXJhdGVkIGNvbXBzaXRp
bmcgbWVzc2FnZXMuCisgICAgRGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNv
bXBvc2l0aW5nKSAtPiAoV2ViS2l0OjpEcmF3aW5nQXJlYUJhc2U6OkRyYXdpbmdBcmVhSW5mbyBu
ZXdEcmF3aW5nQXJlYSkKKyNlbmRpZgorfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5n
JiBvbGRUb29sVGlwLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVy
RWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7
CisgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQ
cm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdm9pZCBjbGVhckFsbEVkaXRD
b21tYW5kcygpOwogICAgIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKTsKIApJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA2OTMxNykKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5hbWVGb3JFZGl0QWN0aW9u
KEVkaXRBCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IHBycENvbW1hbmQs
IFVuZG9PclJlZG8gdW5kb09yUmVkbykKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRp
dENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBwcnBDb21tYW5kLCBXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKIHsKICAgICBSZWZQdHI8V2ViRWRpdENv
bW1hbmRQcm94eT4gY29tbWFuZCA9IHBycENvbW1hbmQ7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kCiAgICAgTlNTdHJpbmcgKmFj
dGlvbk5hbWUgPSBuYW1lRm9yRWRpdEFjdGlvbihjb21tYW5kLT5lZGl0QWN0aW9uKCkpOwogCiAg
ICAgTlNVbmRvTWFuYWdlciAqdW5kb01hbmFnZXIgPSBbbV93a1ZpZXcgdW5kb01hbmFnZXJdOwot
ICAgIFt1bmRvTWFuYWdlciByZWdpc3RlclVuZG9XaXRoVGFyZ2V0Om1fdW5kb1RhcmdldC5nZXQo
KSBzZWxlY3RvcjooKHVuZG9PclJlZG8gPT0gVW5kbykgPyBAc2VsZWN0b3IodW5kb0VkaXRpbmc6
KSA6IEBzZWxlY3RvcihyZWRvRWRpdGluZzopKSBvYmplY3Q6Y29tbWFuZE9iakMuZ2V0KCldOwor
ICAgIFt1bmRvTWFuYWdlciByZWdpc3RlclVuZG9XaXRoVGFyZ2V0Om1fdW5kb1RhcmdldC5nZXQo
KSBzZWxlY3RvcjooKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IEBzZWxlY3Rv
cih1bmRvRWRpdGluZzopIDogQHNlbGVjdG9yKHJlZG9FZGl0aW5nOikpIG9iamVjdDpjb21tYW5k
T2JqQy5nZXQoKV07CiAgICAgaWYgKGFjdGlvbk5hbWUpCiAgICAgICAgIFt1bmRvTWFuYWdlciBz
ZXRBY3Rpb25OYW1lOmFjdGlvbk5hbWVdOwogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2twYWdlLmNwcAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBRV0tQYWdl
UHJpdmF0ZTo6dG9vbFRpcENoYW5nZWQoY29ucwogICAgIGVtaXQgcS0+c3RhdHVzQmFyTWVzc2Fn
ZShRU3RyaW5nKG5ld1Rvb2x0aXApKTsKIH0KIAotdm9pZCBRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0
ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBVbmRvT3JSZWRv
KQordm9pZCBRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdl
YkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pCiB7CiB9CiAKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgJKHJldmlzaW9uIDY5MzE3KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdl
YkNvcmU6OkN1cnNvciYpOwogICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rp
b24pIHsgfQogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmlu
ZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENv
bW1hbmQoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk+LCBVbmRvT3JSZWRv
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYktp
dDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAKICAgICB2b2lkIHBhaW50KFFQ
YWludGVyKiBwYWludGVyLCBRUmVjdCk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcyLDcgKzU3Miw3IEBAIHZvaWQgV2ViVmlldzo6c2V0Q3Vyc29y
KGNvbnN0IFdlYkNvcmU6OkMKICAgICA6OlNldEN1cnNvcihwbGF0Zm9ybUN1cnNvcik7CiB9CiAK
LXZvaWQgV2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21t
YW5kUHJveHk+LCBVbmRvT3JSZWRvKQordm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5k
KFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVk
bykKIHsKIH0KIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA2OTMxNykK
KysrIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGly
ZWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpTdHJp
bmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1h
bmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CisgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFBy
b3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShj
b25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCk7CiAKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODksOCAr
MTg5LDYgQEAKIAkJQkMxMTFCNTExMTJGNjE5MjAwMzM3QkFCIC8qIFBhZ2VDbGllbnRJbXBsLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMTFCNEMx
MTJGNjE5MjAwMzM3QkFCIC8qIFBhZ2VDbGllbnRJbXBsLm1tICovOyB9OwogCQlCQzExMUI1RDEx
MkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2Vi
RXZlbnRGYWN0b3J5LmggKi87IH07CiAJCUJDMTExQjVFMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJF
dmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzExMUI1QzExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tICovOyB9
OwotCQlCQzExMUI2NDExMkY2MzgzMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExMUI2
MTExMkY2MzgzMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmggKi87IH07Ci0J
CUJDMTExQjY1MTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExMUI2MjExMkY2
MzgzMDAzMzdCQUIgLyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oICovOyB9OwogCQlCQzEzMUJD
OTExNzI2QzI4MDBCNjk3MjcgLyogQ29yZUlQQ01lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzFCQzgxMTcyNkMyODAwQjY5NzI3
IC8qIENvcmVJUENNZXNzYWdlS2luZHMuaCAqLzsgfTsKIAkJQkMxNERGNzcxMjBCNUI3OTAwODI2
QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTRERjc1MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggKi87IH07CiAJCUJDMTRERjc4MTIwQjVCNzkwMDgyNkMw
QyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTRERjc2MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmNwcCAqLzsgfTsKQEAgLTM1MSw2ICszNDksOSBAQAogCQlC
Q0I5RjhCMDExMjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I5RjhBRTExMjRFMDc3MDBBMTM3
RTAgLyogV2ViUG9saWN5Q2xpZW50LmggKi87IH07CiAJCUJDQkNCMENCMTIxNUUzMjEwMERFNTlD
QSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0JDQjBDQTEyMTVFMzIxMDBERTU5Q0EgLyogSW1tdXRhYmxlRGlj
dGlvbmFyeS5oICovOyB9OwogCQlCQ0JDQjBDRDEyMTVFMzNBMDBERTU5Q0EgLyogSW1tdXRhYmxl
RGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0JDQjBDQzEyMTVFMzNBMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAg
Ki87IH07CisJCUJDQkQzOTE0MTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCRDM5MTIxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CisJCUJDQkQzOTE1MTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNCRDM5MTMxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggKi87IH07
CisJCUJDQkQzQzNCMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJpbmdQYWlyVmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JEM0MzQTEyNUJGQTdB
MDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oICovOyB9OwogCQlCQ0M1NkY3OTExNTk5NTdE
MDAxQ0NBRjkgLyogTWFjaFBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzU2Rjc3MTE1OTk1N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oICovOyB9
OwogCQlCQ0M1NzE1QjExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NzE1OTExNUFE
QUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggKi87IH07CiAJCUJDQzU3MTVDMTE1
QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NzE1QTExNUFEQUVGMDAxQ0NBRjkgLyog
V2ViU3lzdGVtSW50ZXJmYWNlLm1tICovOyB9OwpAQCAtNjQxLDggKzY0Miw2IEBACiAJCUJDMTEx
QjRDMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VDbGllbnRJbXBsLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzExMUI1QjExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0
b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50RmFjdG9yeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUI1QzExMkY2Mjk4MDAzMzdCQUIg
LyogV2ViRXZlbnRGYWN0b3J5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViRXZlbnRGYWN0b3J5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
QzExMUI2MTExMkY2MzgzMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzExMUI2MjExMkY2MzgzMDAzMzdCQUIg
LyogV2ViUHJvY2Vzc01lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMTMxQkM4MTE3MjZDMjgwMEI2OTcyNyAvKiBDb3JlSVBDTWVzc2FnZUtpbmRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVJUENNZXNzYWdlS2luZHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNERGNzUxMjBCNUI3OTAwODI2QzBDIC8qIElu
amVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzE0REY3NjEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwMyw2ICs4
MDIsMTAgQEAKIAkJQkNCOUY4QUUxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb2xpY3lDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCQ0IwQ0ExMjE1RTMyMTAwREU1OUNBIC8qIElt
bXV0YWJsZURpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1t
dXRhYmxlRGljdGlvbmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JDQjBD
QzEyMTVFMzNBMDBERTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbW11dGFibGVEaWN0aW9uYXJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNCRDM4RkExMjVCQUI5QTAwRDJDMjlGIC8qIFdlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYWdlUHJveHku
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQkQzOTEyMTI1QkIx
QTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNCRDM5MTMxMjVCQjFBODAwRDJDMjlG
IC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDQkQzQzNBMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJpbmdQYWlyVmVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1BhaXJWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNDNTZGNzcxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY2hQb3J0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQzU3MTU5MTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1J
bnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU3lzdGVtSW50
ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzU3MTVBMTE1QURBRUYw
MDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJTeXN0ZW1JbnRlcmZhY2UubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTMwLDYgKzExMzMsNyBAQAogCQkJCTFBMEYyOUNBMTIwQjM3MTYwMDUz
RDFCOSAvKiBWaXNpdGVkTGlua1RhYmxlLmggKi8sCiAJCQkJQkMxREQ3QjExMTREQzM5NjAwNUFE
QUYzIC8qIFdlYkNvcmVBcmd1bWVudENvZGVycy5oICovLAogCQkJCUJDRjUwNzI2MTI0MzI5QUEw
MDU5NTVBRSAvKiBXZWJDZXJ0aWZpY2F0ZUluZm8uaCAqLywKKwkJCQlCQ0JEM0MzQTEyNUJGQTdB
MDBEMkMyOUYgLyogU3RyaW5nUGFpclZlY3Rvci5oICovLAogCQkJCTUxNTc4QjgyMTIwOUVDRUYw
MEEzN0M0QSAvKiBXZWJEYXRhLmggKi8sCiAJCQkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8q
IFdlYkVycm9yLmggKi8sCiAJCQkJQkMwMzJEQUYxMEY0MzgwRjAwNThDMTVBIC8qIFdlYkV2ZW50
LmggKi8sCkBAIC0xMzMwLDYgKzEzMzQsNyBAQAogCQkJCUJDRUU5OEM1MTEzMzE0RDcwMDZCQ0My
NCAvKiBXZWJQYWdlTmFtZXNwYWNlLmggKi8sCiAJCQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFC
IC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJEQ0IxMEY0Mzg5RjAwNThDMTVBIC8q
IFdlYlBhZ2VQcm94eS5oICovLAorCQkJCUJDQkQzOEZBMTI1QkFCOUEwMEQyQzI5RiAvKiBXZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkNCOUY4QUQxMTI0RTA3NzAwQTEzN0UwIC8q
IFdlYlBvbGljeUNsaWVudC5jcHAgKi8sCiAJCQkJQkNCOUY4QUUxMTI0RTA3NzAwQTEzN0UwIC8q
IFdlYlBvbGljeUNsaWVudC5oICovLAogCQkJCUJDRDU5N0ZFMTEyQjU3QkUwMEVDOEMyMyAvKiBX
ZWJQcmVmZXJlbmNlcy5jcHAgKi8sCkBAIC0xNDYwLDggKzE0NjUsNiBAQAogCQkJCUJDOUU5Njk5
MTE0NTdFREUwMDg3MEU3MSAvKiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZUtpbmRzLmggKi8sCiAJ
CQkJQkNCMjhDQkYxMjAyMzNEOTAwN0Q5OUJDIC8qIEluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRz
LmggKi8sCiAJCQkJQkNDQjc1QzUxMjAzQTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRleHRNZXNzYWdl
S2luZHMuaCAqLywKLQkJCQlCQzExMUI2MTExMkY2MzgzMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5
TWVzc2FnZUtpbmRzLmggKi8sCi0JCQkJQkMxMTFCNjIxMTJGNjM4MzAwMzM3QkFCIC8qIFdlYlBy
b2Nlc3NNZXNzYWdlS2luZHMuaCAqLywKIAkJCQlCQ0I3MzQ2RDExQ0VFM0ZGMDBFQzUwMDIgLyog
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IENvcmVJ
UENTdXBwb3J0OwpAQCAtMTcwMiw2ICsxNzA1LDggQEAKIAkJCQkxQThFRkE2RjEyNTJCODQxMDBG
NzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlcy5oICovLAogCQkJCUMwQ0U3MjlFMTI0N0U3MUQw
MEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlDMENFNzI5RjEy
NDdFNzFEMDBCQzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggKi8sCisJCQkJQkNCRDM5MTIxMjVC
QjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJ
QkNCRDM5MTMxMjVCQjFBODAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eU1lc3NhZ2VzLmggKi8sCiAJ
CQkJMUEwNDNGNjcxMjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQTA0M0Y2ODEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJCUJDMzA2NkJDMTI1QTQ0MjEwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTE4MDcsNyArMTgxMiw2
IEBACiAJCQkJQkMwMzJEOEYxMEY0MzdBMDAwNThDMTVBIC8qIFdlYlBhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRUU5OEM3MTEzMzE0RDcwMDZCQ0MyNCAvKiBXZWJQYWdlTmFtZXNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkREMTEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVBy
b3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzExMUI2NDExMkY2MzgzMDAzMzdCQUIgLyogV2Vi
UGFnZVByb3h5TWVzc2FnZUtpbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNFNzM2MTExQ0My
NjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0I5RjhCMDExMjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0Q1OTdGRjExMkI1N0JFMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLApAQCAtMTgxNSw3ICsxODE5LDYgQEAKIAkJCQlCQzAzMkQ5NzEwRjQzN0FG
MDA1OEMxNUEgLyogV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkEwMjAxMUUx
NTI4NzAwREIxMzcxIC8qIFdlYlByb2Nlc3NNYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAz
MkREMzEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJvY2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCUJDMTExQjY1MTEyRjYzODMwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWVzc2FnZUtpbmRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkRENTEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJv
Y2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0I3MzQ2RTExQ0VFM0ZGMDBFQzUwMDIg
LyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZUtpbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M1
NzE1QjExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTE5MzgsNiArMTk0MSw4IEBACiAJCQkJQkMzMDY1RkExMjU5MzQ0RTAwRTcxMjc4IC8q
IENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2NkJGMTI1QTQ0MjEwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2ODI0MTI1
QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCQ0JEMzkxNTEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQkQzQzNCMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJp
bmdQYWlyVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyMzUsNiArMjI0MCw3IEBACiAJCQkJ
QkMzMDY1QzQxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMwNjgyNTEyNUE2Qjk0MDBFNzEyNzggLyog
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0JE
MzkxNDEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnUuaCIKICNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpAQCAt
NTcsNyArNTcsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKCkKICAg
ICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgd2luZG93UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtOTgsOCArOTgsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6Y2FuVGFrZUZvY3VzKEZvY3Vz
CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQ
YWdlUHJveHlNZXNzYWdlOjpUYWtlRm9jdXMsIG1fcGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVj
dGlvbkZvcndhcmQgPyB0cnVlIDogZmFsc2UpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpUYWtlRm9jdXMoZGlyZWN0
aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCA/IHRydWUgOiBmYWxzZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6Zm9jdXNlZE5vZGVDaGFuZ2VkKE5v
ZGUqKQpAQCAtMTExLDEwICsxMTAsOSBAQCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdp
bmRvdyhGcmFtCiB7CiAgICAgdWludDY0X3QgbmV3UGFnZUlEID0gMDsKICAgICBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNyZWF0ZU5ld1Bh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6Ok91dChuZXdQYWdlSUQsIHBh
cmFtZXRlcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkNyZWF0ZU5ld1BhZ2UoKSwKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkNyZWF0ZU5ld1BhZ2U6OlJlcGx5KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksCisgICAgICAg
ICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjM2LDEwICsyMzQsOCBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0CiAgICAgLy8gTm90aWZ5IHRoZSBidW5k
bGUgY2xpZW50LgogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLndpbGxSdW5K
YXZhU2NyaXB0QWxlcnQobV9wYWdlLCBhbGVydFRleHQsIHdlYkZyYW1lKTsKIAotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6UnVuSmF2YVNjcmlwdEFsZXJ0LCBtX3BhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViRnJhbWUtPmZy
YW1lSUQoKSwgYWxlcnRUZXh0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvcmVJUEM6Ok91dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBhbGVy
dFRleHQpLAorICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxl
cnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGlt
ZW91dCk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTI1MCwxMiArMjQ2LDkgQEAg
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maQogICAgIG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVVSUNsaWVudCgpLndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShtX3BhZ2UsIG1l
c3NhZ2UsIHdlYkZyYW1lKTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1l
c3NhZ2U6OlJ1bkphdmFTY3JpcHRDb25maXJtLCBtX3BhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3
ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KHJlc3VsdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNv
bm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlw
dENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVzc2FnZSksCisgICAgICAgICAgICAgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCks
IG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjY3
LDEyICsyNjAsOSBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wCiAg
ICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xpZW50LgogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5k
bGVVSUNsaWVudCgpLndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KG1fcGFnZSwgbWVzc2FnZSwgZGVm
YXVsdFZhbHVlLCB3ZWJGcmFtZSk7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6UnVuSmF2YVNjcmlwdFBy
b21wdCwgbV9wYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVz
c2FnZSwgZGVmYXVsdFZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KHJlc3VsdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246
Ok5vVGltZW91dCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3
ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLAorICAgICAgICAgICAg
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3Vs
dCksIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKICAgICByZXR1cm4gIXJlc3VsdC5pc051bGwo
KTsKIH0KQEAgLTI4Miw3ICsyNzIsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0U3RhdHVz
YmFyVGV4dChjCiAgICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xpZW50LgogICAgIG1fcGFnZS0+
aW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLndpbGxTZXRTdGF0dXNiYXJUZXh0KG1fcGFnZSwgc3Rh
dHVzYmFyVGV4dCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0U3RhdHVzVGV4dCwgbV9wYWdlLT5wYWdlSUQoKSwg
c3RhdHVzYmFyVGV4dCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFN0YXR1c1RleHQoc3RhdHVzYmFyVGV4dCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6c2hvdWxkSW50
ZXJydXB0SmF2YVNjcmlwdCgpCkBAIC0zNDMsOCArMzMzLDggQEAgUGxhdGZvcm1QYWdlQ2xpZW50
IFdlYkNocm9tZUNsaWVudDo6cGxhdAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNvbnRlbnRzU2l6
ZUNoYW5nZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAg
IFdlYkZyYW1lKiB3ZWJGcmFtZSA9ICBzdGF0aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCo+
KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJGcmFtZSgpOwotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpDb250ZW50
c1NpemVDaGFuZ2VkLCBtX3BhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBzaXpl
KSk7CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Q29udGVudHNTaXplQ2hhbmdlZCh3ZWJGcmFtZS0+ZnJhbWVJRCgp
LCBzaXplKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpz
Y3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25z
dApAQCAtMzY1LDcgKzM1NSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVP
dmVyRWwKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlVUlDbGllbnQoKS5tb3VzZURpZE1vdmVP
dmVyRWxlbWVudChtX3BhZ2UsIGhpdFRlc3RSZXN1bHQsIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpN
b2RpZmllcnM+KG1vZGlmaWVyRmxhZ3MpLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhl
IFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQo
V2ViUGFnZVByb3h5TWVzc2FnZTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQsIG1fcGFnZS0+cGFn
ZUlEKCksIENvcmVJUEM6OkluKG1vZGlmaWVyRmxhZ3MsIEluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpNb3VzZURpZE1vdmVPdmVy
RWxlbWVudChtb2RpZmllckZsYWdzLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1
c2VyRGF0YS5nZXQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQpA
QCAtMzc2LDcgKzM2Niw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKGNvbnN0
IFMKICAgICAgICAgcmV0dXJuOwogICAgIG1fY2FjaGVkVG9vbFRpcCA9IHRvb2xUaXA7CiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVz
c2FnZTo6U2V0VG9vbFRpcCwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9jYWNoZWRU
b29sVGlwKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFRvb2xUaXAobV9jYWNoZWRUb29sVGlwKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSopCkBA
IC00NzYsNyArNDY2LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxl
cwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikK
IHsKICNpZiBVU0UoTEFaWV9OQVRJVkVfQ1VSU09SKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRDdXJzb3IsIG1fcGFn
ZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGN1cnNvcikpOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3Io
Y3Vyc29yKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAjZW5kaWYKIH0KIApJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHJldmlzaW9uIDY5MzE3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
QXJjaGl2ZVJlc291cmNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+
CkBAIC0yMTEsOCArMjExLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29tbWFu
ZEZvcgogICAgIG1fcGFnZS0+YWRkV2ViRWRpdENvbW1hbmQod2ViQ29tbWFuZC0+Y29tbWFuZElE
KCksIHdlYkNvbW1hbmQuZ2V0KCkpOwogICAgIHVpbnQzMl90IGVkaXRBY3Rpb24gPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4od2ViQ29tbWFuZC0+Y29tbWFuZCgpLT5lZGl0aW5nQWN0aW9uKCkpOwog
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvLCBtX3BhZ2UtPnBhZ2VJRCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbih3
ZWJDb21tYW5kLT5jb21tYW5kSUQoKSwgZWRpdEFjdGlvbikpOworICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWdpc3Rl
ckVkaXRDb21tYW5kRm9yVW5kbyh3ZWJDb21tYW5kLT5jb21tYW5kSUQoKSwgZWRpdEFjdGlvbiks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJD
b21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPikKQEAgLTIyMSw3ICsyMjAsNyBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVnaXN0ZXJDb21tYW5kRm9yCiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNsZWFyQWxs
RWRpdENvbW1hbmRzLCBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6Q2xlYXJBbGxFZGl0Q29tbWFuZHMoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIGJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpjYW5VbmRvKCkgY29uc3QKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAkocmV2aXNpb24gNjkzMTcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2lu
Y2x1ZGUgIlN0cmluZ1BhaXJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgpAQCAt
MzgsNyArMzksNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KQEAgLTEyNSw3ICsxMjYsOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRh
Y2hlZEZyb21QCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRS
ZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAg
ICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJlbW92ZUZyYW1lRnJvbUhp
ZXJhcmNoeSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1lSUQo
KSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShtX2ZyYW1lLT5mcmFtZUlEKCks
IEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBh
Z2UtPnBhZ2VJRCgpKTsKKwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hl
ZEZyb21QYXJlbnQzKCkKQEAgLTIyMyw3ICsyMjUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGll
bnQoKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh3
ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vz
cy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCks
IHVybCwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgdXJsLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQpA
QCAtMjk1LDcgKzI5Nyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
U3QKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAg
Ly8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlE
KCksIHVybCwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkp
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+
ZnJhbWVJRCgpLCB1cmwsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRh
LmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKQEAgLTMx
MCw3ICszMTIsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlCiAg
ICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRSZWNlaXZlVGl0bGVG
b3JGcmFtZSh3ZWJQYWdlLCB0aXRsZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90
aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVUaXRsZUZvckZyYW1lLCB3ZWJQ
YWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCB0aXRsZSwgSW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgdGl0bGUsIElu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSksIHdlYlBhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRD
aGFuZ2VJY29ucygpCkBAIC0zMzEsNyArMzMzLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRDbwogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50
KCkuZGlkQ29tbWl0TG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAog
ICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDb21taXRMb2FkRm9yRnJh
bWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIHJl
c3BvbnNlLm1pbWVUeXBlKCksIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlKSwgSW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIHJlc3BvbnNlLm1p
bWVUeXBlKCksIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlKSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNp
b25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC0zNDYsNyArMzQ4LDcgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYQogICAgIHdlYlBhZ2UtPmlu
amVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0
aGUgVUlQcm9jZXNzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsIHdl
YlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVk
QnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdl
SUQoKSk7CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBp
dC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFt
ZS0+bG9hZExpc3RlbmVyKCkpCkBAIC0zNjUsNyArMzY3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRGYQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVy
Q2xpZW50KCkuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1
c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmFp
bExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fZnJhbWUtPmZy
YW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkp
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZEZhaWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpLCB3ZWJQYWdl
LT5wYWdlSUQoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9hZCBsaXN0ZW5lciwgbm90aWZ5
IGl0LgogICAgIGlmIChXZWJGcmFtZTo6TG9hZExpc3RlbmVyKiBsb2FkTGlzdGVuZXIgPSBtX2Zy
YW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAgLTM4NCw3ICszODYsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2Fk
ZXJDbGllbnQoKS5kaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1l
LCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJ
bihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVz
ZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVz
ZXJEYXRhLmdldCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKQEAgLTM5OSw3ICs0MDEsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpCiAgICAgd2ViUGFnZS0+aW5q
ZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGaW5pc2hMb2FkRm9yRnJhbWUod2ViUGFnZSwg
bV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZEZpbmlzaExvYWRGb3JGcmFtZSwgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6Oklu
KG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNl
ckRhdGEuZ2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlzaExvYWRGb3JGcmFtZShtX2ZyYW1l
LT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdl
dCgpKSksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxp
c3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRM
aXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5lcigpKQpAQCAtNDE4LDcgKzQyMCw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmkKICAgICB3ZWJQYWdlLT5pbmpl
Y3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUod2ViUGFnZSwg
bV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJ
bihtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVz
ZXJEYXRhLmdldCgpKSkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdExheW91dEZvckZyYW1lKG1fZnJh
bWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEu
Z2V0KCkpKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpCkBAIC00MzMsNyAr
NDM1LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaQogICAgIHdl
YlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8g
Tm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlv
bigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckZyYW1lLCB3ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJh
bWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkp
KTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUobV9m
cmFtZS0+ZnJhbWVJRCgpLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0
YS5nZXQoKSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIEZyYW1lKiBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKCkKQEAgLTUxNCw4ICs1MTYsNyBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAgdWludDY0X3QgbGlzdGVuZXJJ
RCA9IG1fZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXIoZnVuY3Rpb24pOwogICAgIGNvbnN0IFN0
cmluZyYgdXJsID0gcmVxdWVzdC51cmwoKS5zdHJpbmcoKTsgLy8gRklYTUU6IFBhc3MgZW50aXJl
IHJlcXVlc3QuCiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQo
V2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUsIHdlYlBhZ2UtPnBh
Z2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Jl
SVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIE1JTUVUeXBlLCB1cmwsIGxpc3RlbmVySUQpKTsK
KyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUobV9mcmFtZS0+ZnJhbWVJRCgpLCBN
SU1FVHlwZSwgdXJsLCBsaXN0ZW5lcklEKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9u
JiBuYXZpZ2F0aW9uQWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpCkBAIC01MzQsOCArNTM1
LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogICAgIHVpbnQz
Ml90IG1vZGlmaWVycyA9IG1vZGlmaWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFj
dGlvbik7CiAgICAgaW50MzJfdCBtb3VzZUJ1dHRvbiA9IG1vdXNlQnV0dG9uRm9yTmF2aWdhdGlv
bkFjdGlvbihuYXZpZ2F0aW9uQWN0aW9uKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNv
bm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24sIHdlYlBhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmln
YXRpb25UeXBlLCBtb2RpZmllcnMsIG1vdXNlQnV0dG9uLCB1cmwsIGxpc3RlbmVySUQpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKG1fZnJhbWUtPmZyYW1lSUQo
KSwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgbGlzdGVuZXJJ
RCksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KQpAQCAt
NTYwLDggKzU2MCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWQK
ICAgICB1aW50MzJfdCBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JOYXZpZ2F0aW9uQWN0aW9uKG5h
dmlnYXRpb25BY3Rpb24pOwogICAgIGludDMyX3QgbW91c2VCdXR0b24gPSBtb3VzZUJ1dHRvbkZv
ck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwgd2ViUGFnZS0+cGFnZUlEKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1fZnJhbWUtPmZyYW1l
SUQoKSwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVybCwgbGlzdGVu
ZXJJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKG1fZnJh
bWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVycywgbW91c2VCdXR0b24sIHVy
bCwgbGlzdGVuZXJJRCksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y2FuY2VsUG9saWN5Q2hlY2soKQpAQCAtNTkyLDkgKzU5MSw5IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFMKIAogCiAgICAgdWludDY0X3QgbGlz
dGVuZXJJRCA9IG1fZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXIoZnVuY3Rpb24pOworICAgIFN0
cmluZ1BhaXJWZWN0b3IgdmFsdWVzVmVjdG9yKHZhbHVlcyk7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6V2lsbFN1Ym1p
dEZvcm0sIHdlYlBhZ2UtPnBhZ2VJRCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb3JlSVBDOjpJbihtX2ZyYW1lLT5mcmFtZUlEKCksIHNvdXJjZUZyYW1l
LT5mcmFtZUlEKCksIHZhbHVlcywgbGlzdGVuZXJJRCwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2Fn
ZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxTdWJtaXRGb3JtKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgc291cmNlRnJhbWUtPmZyYW1lSUQoKSwgdmFsdWVzVmVjdG9yLCBs
aXN0ZW5lcklELCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQo
KSkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopCkBAIC02MzAsMjEg
KzYyOSwyMiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VFc3RpCiB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkK
IHsKICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3Nh
Z2U6OkRpZFN0YXJ0UHJvZ3Jlc3MsIHdlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpKTsK
KyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0UHJvZ3Jlc3MoKSwgd2ViUGFnZS0+cGFnZUlEKCkpOwog
fQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5n
ZWROb3RpZmljYXRpb24oKQogewogICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+
cGFnZSgpKSB7CiAgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IHdlYlBhZ2UtPmNvcmVQYWdlKCkt
PnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRDaGFuZ2VQ
cm9ncmVzcywgd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKHByb2dyZXNzKSk7CisgICAg
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRDaGFuZ2VQcm9ncmVzcyhwcm9ncmVzcyksIHdlYlBhZ2UtPnBhZ2VJRCgp
KTsKKwogICAgIH0KIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNz
RmluaXNoZWROb3RpZmljYXRpb24oKQogewogICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gbV9m
cmFtZS0+cGFnZSgpKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCkt
PnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkRmluaXNoUHJvZ3Jlc3MsIHdlYlBhZ2UtPnBh
Z2VJRCgpLCBDb3JlSVBDOjpJbigpKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlzaFByb2dyZXNz
KCksIHdlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKQpAQCAtOTQ4LDcgKzk0OCw3IEBAIFBhc3NS
ZWZQdHI8RnJhbWU+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjoKICAgICBSZWZQdHI8V2ViRnJhbWU+
IHN1YmZyYW1lID0gV2ViRnJhbWU6OmNyZWF0ZVN1YmZyYW1lKHdlYlBhZ2UsIG5hbWUsIG93bmVy
RWxlbWVudCk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJIHByb2Nlc3MgdGhhdCBzdWJmcmFtZSBo
YXMgYmVlbiBhZGRlZC4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ3JlYXRlU3ViRnJhbWUsIHdlYlBhZ2UtPnBhZ2VJ
RCgpLCBDb3JlSVBDOjpJbihzdWJmcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENy
ZWF0ZVN1YkZyYW1lKHN1YmZyYW1lLT5mcmFtZUlEKCkpLCB3ZWJQYWdlLT5wYWdlSUQoKSk7CiAK
ICAgICBGcmFtZSogY29yZVN1YmZyYW1lID0gc3ViZnJhbWUtPmNvcmVGcmFtZSgpOwogCkluZGV4
OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRM
aXN0UHJveHkuY3BwCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dFByb3h5OjphZGRJdGVtKFBhCiAKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBwcnBJ
dGVtOwogICAgIHVpbnQ2NF90IGl0ZW1JRCA9IGhpc3RvcnlJdGVtVG9JRE1hcCgpLmdldChpdGVt
KTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVBy
b3h5TWVzc2FnZTo6QmFja0ZvcndhcmRBZGRJdGVtLCBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBD
OjpJbihpdGVtSUQpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRBZGRJdGVtKGl0ZW1JRCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpnb0Jh
Y2soKQpAQCAtMTM1LDE2ICsxMzUsMTYgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6
Z29Gb3J3YXJkKAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Z29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qIGl0ZW0pCiB7CiAgICAgdWludDY0X3QgaXRlbUlEID0gaGlzdG9yeUl0ZW1Ub0lETWFw
KCkuZ2V0KGl0ZW0pOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJQYWdlUHJveHlNZXNzYWdlOjpCYWNrRm9yd2FyZEdvVG9JdGVtLCBtX3BhZ2UtPnBhZ2VJ
RCgpLCBDb3JlSVBDOjpJbihpdGVtSUQpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRHb1RvSXRl
bShpdGVtSUQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKwogfQogCiBIaXN0b3J5SXRlbSogV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6OmJhY2tJdGVtKCkKIHsKICAgICB1aW50NjRfdCBiYWNrSXRlbUlE
ID0gMDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFja0ZvcndhcmRCYWNrSXRlbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQo
KSwgQ29yZUlQQzo6SW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KGJhY2tJdGVtSUQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9u
OjpOb1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0l0ZW0o
KSwKKyAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tJ
dGVtOjpSZXBseShiYWNrSXRlbUlEKSwKKyAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBD
b3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIApAQCAtMTU4LDEwICsxNTgsOSBAQCBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OmJhCiBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmN1cnJlbnRJ
dGVtKCkKIHsKICAgICB1aW50NjRfdCBjdXJyZW50SXRlbUlEID0gMDsKLSAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2Fn
ZTo6QmFja0ZvcndhcmRDdXJyZW50SXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6T3V0KGN1cnJlbnRJdGVtSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7
CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQ3VycmVudEl0ZW0oKSwKKyAgICAgICAg
ICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEN1cnJlbnRJdGVtOjpSZXBs
eShjdXJyZW50SXRlbUlEKSwKKyAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBD
OjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApA
QCAtMTc1LDEwICsxNzQsOSBAQCBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6
OmN1CiBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmZvcndhcmRJdGVtKCkK
IHsKICAgICB1aW50NjRfdCBmb3J3YXJkSXRlbUlEID0gMDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFj
a0ZvcndhcmRGb3J3YXJkSXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6
T3V0KGZvcndhcmRJdGVtSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CisgICAg
aWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkRm9yd2FyZEl0ZW0oKSwKKyAgICAgICAgICAgICBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEZvcndhcmRJdGVtOjpSZXBseShmb3J3
YXJkSXRlbUlEKSwKKyAgICAgICAgICAgICBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpDb25u
ZWN0aW9uOjpOb1RpbWVvdXQpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTky
LDEwICsxOTAsOSBAQCBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmZvCiBI
aXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1BdEluZGV4KGludCBpdGVt
SW5kZXgpCiB7CiAgICAgdWludDY0X3QgaXRlbUlEID0gMDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6QmFj
a0ZvcndhcmRJdGVtQXRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oaXRlbUluZGV4
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29yZUlQQzo6T3V0KGl0ZW1JRCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpIHsKKyAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleChpdGVtSW5kZXgpLAorICAg
ICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXg6
OlJlcGx5KGl0ZW1JRCksCisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6
Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAg
LTIzOSwxMCArMjM2LDkgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0RW5hYmxl
ZAogaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpiYWNrTGlzdENvdW50KCkKIHsKICAgICBp
bnQgYmFja0xpc3RDb3VudCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkQmFja0xp
c3RDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KGJhY2tMaXN0
Q291bnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCgpLAorICAgICAgICAgICAgIE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3VudDo6UmVwbHkoYmFja0xpc3RDb3Vu
dCksCisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6
Tm9UaW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTI1MiwxMCArMjQ4
LDkgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpiYWNrTGlzdENvdQogaW50IFdlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJkTGlzdENvdW50KCkKIHsKICAgICBpbnQgZm9yd2Fy
ZExpc3RDb3VudCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RD
b3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6T3V0KGZvcndhcmRMaXN0
Q291bnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpOb1RpbWVvdXQpKSB7CisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudCgpLAorICAgICAgICAgICAgIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudDo6UmVwbHkoZm9yd2Fy
ZExpc3RDb3VudCksCisgICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6Q29u
bmVjdGlvbjo6Tm9UaW1lb3V0KSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA2OTMxNykKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCIK
ICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgpAQCAtMTQyLDcgKzE0Miw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBj
b25zdCAKICAgICBTZXR0aW5nczo6c2V0TWluRE9NVGltZXJJbnRlcnZhbCgwLjAwNCk7CiAKICAg
ICBtX21haW5GcmFtZSA9IFdlYkZyYW1lOjpjcmVhdGVNYWluRnJhbWUodGhpcyk7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZENyZWF0ZU1haW5GcmFtZSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKG1fbWFpbkZyYW1lLT5m
cmFtZUlEKCkpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ3JlYXRlTWFpbkZyYW1lKG1fbWFpbkZyYW1lLT5m
cmFtZUlEKCkpLCBtX3BhZ2VJRCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgd2ViUGFnZUNvdW50
ZXIuaW5jcmVtZW50KCk7CkBAIC0yNDYsMTAgKzI0NiwxMCBAQCB2b2lkIFdlYlBhZ2U6OmNoYW5n
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpCiAgICAgLy8gVGVsbCB0aGUgVUkgcHJvY2VzcyB0aGF0IGFj
Y2VsZXJhdGVkIGNvbXBvc2l0aW5nIGNoYW5nZWQuIEl0IG1heSByZXNwb25kIGJ5IGNoYW5naW5n
CiAgICAgLy8gZHJhd2luZyBhcmVhIHR5cGVzLgogICAgIERyYXdpbmdBcmVhOjpEcmF3aW5nQXJl
YUluZm8gbmV3RHJhd2luZ0FyZWFJbmZvOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGlkQ2hhbmdlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcGFnZUlELCBDb3JlSVBDOjpJbihjb21wb3NpdGluZyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpPdXQobmV3RHJhd2lu
Z0FyZWFJbmZvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCk7CisKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoY29tcG9zaXRpbmcpLAorICAgICAgICBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nOjpSZXBs
eShuZXdEcmF3aW5nQXJlYUluZm8pLAorICAgICAgICBtX3BhZ2VJRCwgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6Tm9UaW1lb3V0KTsKICAgICAKICAgICBpZiAobmV3RHJhd2luZ0FyZWFJbmZvLnR5cGUg
IT0gZHJhd2luZ0FyZWEoKS0+aW5mbygpLnR5cGUpIHsKICAgICAgICAgbV9kcmF3aW5nQXJlYSA9
IDA7CkBAIC0yNjMsMTAgKzI2Myw3IEBAIHZvaWQgV2ViUGFnZTo6Y2hhbmdlQWNjZWxlcmF0ZWRD
b21wb3NpdGkKIHZvaWQgV2ViUGFnZTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShH
cmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBjaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShsYXllcik7Ci0gICAgCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IG1fZHJhd2luZ0FyZWEtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGxheWVyKTsKLSNlbmRpZgog
fQogCiB2b2lkIFdlYlBhZ2U6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCkBAIC0y
OTcsNyArMjk0LDcgQEAgdm9pZCBXZWJQYWdlOjp0cnlDbG9zZSgpCiAKIHZvaWQgV2ViUGFnZTo6
c2VuZENsb3NlKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6Q2xvc2VQYWdlLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4o
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNsb3NlUGFnZSgpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6bG9hZFVSTChjb25zdCBTdHJpbmcmIHVybCkKQEAgLTQ4MSw4ICs0NzgsNyBAQCB2b2lkIFdl
YlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFCiAgICAgQ3VycmVudEV2ZW50IGN1cnJl
bnRFdmVudChtb3VzZUV2ZW50KTsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGhhbmRsZU1vdXNlRXZl
bnQobW91c2VFdmVudCwgbV9wYWdlLmdldCgpKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSZWNlaXZlRXZlbnQs
IG1fcGFnZUlELCBDb3JlSVBDOjpJbihzdGF0aWNfY2FzdDx1aW50MzJfdD4obW91c2VFdmVudC50
eXBlKCkpLCBoYW5kbGVkKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obW91c2VFdmVudC50eXBlKCkpLCBoYW5kbGVkKSwgbV9wYWdlSUQpOwogfQog
CiBzdGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVs
RXZlbnQsIFBhZ2UqIHBhZ2UpCkBAIC01MDAsNyArNDk2LDcgQEAgdm9pZCBXZWJQYWdlOjp3aGVl
bEV2ZW50KGNvbnN0IFdlYldoZWVsRQogICAgIEN1cnJlbnRFdmVudCBjdXJyZW50RXZlbnQod2hl
ZWxFdmVudCk7CiAKICAgICBib29sIGhhbmRsZWQgPSBoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZl
bnQsIG1fcGFnZS5nZXQoKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFJlY2VpdmVFdmVudCwgbV9wYWdlSUQsIENv
cmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aGVlbEV2ZW50LnR5cGUoKSksIGhhbmRs
ZWQpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pih3
aGVlbEV2ZW50LnR5cGUoKSksIGhhbmRsZWQpLCBtX3BhZ2VJRCk7CiB9CiAKIHN0YXRpYyBib29s
IGhhbmRsZUtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQsIFBh
Z2UqIHBhZ2UpCkBAIC01MTksMjEgKzUxNSwyMSBAQCB2b2lkIFdlYlBhZ2U6OmtleUV2ZW50KGNv
bnN0IFdlYktleWJvYXJkCiAgICAgaWYgKCFoYW5kbGVkKQogICAgICAgICBoYW5kbGVkID0gcGVy
Zm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGtleWJvYXJkRXZlbnQpOwogCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OkRpZFJlY2VpdmVFdmVudCwgbV9wYWdlSUQsIENvcmVJUEM6OkluKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihrZXlib2FyZEV2ZW50LnR5cGUoKSksIGhhbmRsZWQpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVj
ZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlib2FyZEV2ZW50LnR5cGUoKSksIGhh
bmRsZWQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVNZW51SXRlbShj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewogICAgIGJvb2wgaXNFbmFibGVkID0gZmFsc2U7
Ci0gICAgaW50IHN0YXRlID0gMDsKKyAgICBpbnQzMl90IHN0YXRlID0gMDsKICAgICBGcmFtZSog
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
ICAgICBpZiAoZnJhbWUpIHsKICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpOwogICAgICAgICBzdGF0ZSA9IGNvbW1h
bmQuc3RhdGUoKTsKICAgICAgICAgaXNFbmFibGVkID0gY29tbWFuZC5pc1N1cHBvcnRlZCgpICYm
IGNvbW1hbmQuaXNFbmFibGVkKCk7CiAgICAgfQotICAgIAotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRWYWxpZGF0ZU1l
bnVJdGVtLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oY29tbWFuZE5hbWUsIGlzRW5hYmxlZCwgc3Rh
dGUpKTsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRWYWxpZGF0ZU1lbnVJdGVtKGNvbW1hbmROYW1lLCBpc0Vu
YWJsZWQsIHN0YXRlKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQpAQCAtNTU3LDcgKzU1Myw3IEBAIHZv
aWQgV2ViUGFnZTo6dG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEUKIAogICAgIGJvb2wgaGFuZGxl
ZCA9IGhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCwgbV9wYWdlLmdldCgpKTsKIAotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdl
OjpEaWRSZWNlaXZlRXZlbnQsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihzdGF0aWNfY2FzdDx1aW50
MzJfdD4odG91Y2hFdmVudC50eXBlKCkpLCBoYW5kbGVkKSk7CisgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2Vp
dmVFdmVudChzdGF0aWNfY2FzdDx1aW50MzJfdD4odG91Y2hFdmVudC50eXBlKCkpLCBoYW5kbGVk
KSwgbV9wYWdlSUQpOwogfQogI2VuZGlmCiAKQEAgLTYxMiw3ICs2MDgsNyBAQCB2b2lkIFdlYlBh
Z2U6OmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1CiAKIHZvaWQgV2ViUGFnZTo6c2hvdygpCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OlNob3dQYWdlLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oKSk7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNob3dQYWdlKCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRDdXN0b21Vc2Vy
QWdlbnQoY29uc3QgU3RyaW5nJiBjdXN0b21Vc2VyQWdlbnQpCkBAIC02NTMsMTMgKzY0OSwxMyBA
QCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAgSlNWYWx1ZSBy
ZXN1bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVT
Y3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHRWYWx1ZS50b1N0cmluZyhtX21haW5GcmFtZS0+Y29yZUZy
YW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5n
bG9iYWxFeGVjKCkpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUsIG1f
cGFnZUlELCBDb3JlSVBDOjpJbihyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHJlc3VsdFN0cmluZywgY2FsbGJhY2tJRCks
IG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIFN0cmluZyByZXN1bHRTdHJp
bmcgPSByZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpOwotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRHZXRS
ZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbiwgbV9wYWdlSUQsIENvcmVJUEM6OkluKHJl
c3VsdFN0cmluZywgY2FsbGJhY2tJRCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRHZXRSZW5kZXJUcmVlRXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihyZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0U291cmNlRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTY2Nyw3ICs2NjMsOCBAQCB2b2lkIFdlYlBhZ2U6Omdl
dFNvdXJjZUZvckZyYW1lKHVpbnQ2NF90CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKICAgICBp
ZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJ
RCkpCiAgICAgICAgcmVzdWx0U3RyaW5nID0gZnJhbWUtPnNvdXJjZSgpOwotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRH
ZXRTb3VyY2VGb3JGcmFtZSwgbV9wYWdlSUQsIENvcmVJUEM6OkluKHJlc3VsdFN0cmluZywgY2Fs
bGJhY2tJRCkpOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEdldFNvdXJjZUZvckZyYW1lKHJlc3VsdFN0cmlu
ZywgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwcmVmZXJlbmNl
c0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKSW5kZXg6IFdlYktp
dDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIu
dmNwcm9qCShyZXZpc2lvbiA2OTMxNykKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00NDksNiArNDQ5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxTdHJpbmdQYWlyVmVjdG9yLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxT
aGFyZWRcVXNlck1lc3NhZ2VDb2RlcnMuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03Njcs
MTAgKzc3MSw2IEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXENvcmVJUENTdXBwb3J0
XFdlYlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQotCQkJ
CTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxDb3JlSVBDU3VwcG9ydFxXZWJQ
cm9jZXNzUHJveHlNZXNzYWdlS2luZHMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KIAkJCTwv
RmlsdGVyPg0KIAkJCTxGaWx0ZXINCiAJCQkJTmFtZT0id2luIg0KQEAgLTE1MTMsNiArMTUxMywx
MCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxVSVByb2Nlc3NcV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYlBvbGljeUNs
aWVudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjAyOCw2ICsyMDMyLDEzIEBACiAJ
CQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXFdlYlBhZ2VNZXNzYWdlcy5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KKwkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcV2ViUGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGly
KVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQo
V2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcV2ViUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAiDQogCQkJCT4NCg==
</data>
<flag name="review"
          id="59901"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>